DataBase【DB】,指的是長期儲存到計算機上的數據,按照一定順序組織,可以被各種使用者或者應用共用的數據集合
【用於儲存數據的地方,可以視爲儲存數據的容器】
DataBase Management System【DBMS】,能夠管理和操作數據庫的大型的軟體
數據庫是CS模式:Client/Server
用於建立、使用和維護數據庫,對數據庫進行統一的管理和控制,爲了保證數據庫的安全性和完整性,使用者可以通過數據庫管理系統存取數據庫中的數據
涉及到大量的數據需要長期儲存,就可以使用數據庫
使用:增刪改查的操作
持久化: 數據持久化, 一般存在硬碟, MySQL
快取: 臨時儲存, 一般可以存在記憶體, Redis
1>Oracle(甲骨文): 目前比較成功的關係型數據庫管理系統,執行穩定,功能齊全,效能超羣,技術領先,主要應用在大型的企業數據庫領域, 收費.
2>DB2: IBM(國際商業機器公司)的產品,伸縮性比較強
3>SQL Server: Microsoft的產品,軟體介面友好,易學易用,在操作性和互動性方面獨樹一幟
4>MySQL: 免費的數據庫系統,被廣泛參照於中型應用系統,體積小,速度快,總體擁有成本低,開放原始碼,2008年被SUN收購,2009年SUN被Oracle收購
數據庫的安裝請自行百度,有很多人會安裝出錯,注意安裝的路徑,最好是自己另開一個,然後把環境變數新增到系統變數中。
Structure Query Language,結構化查詢語言
表:爲了儲存應用實體中的數據,一般會給數據庫中建立表,一個數據庫可以同時管理多個表
數據庫 => 表
表: 表格
列:表示欄位, id, name, age
行:代表一條數據, 一條記錄 或 一個實體
DDL【Data Definition Language】,數據定義語言,使用者建立、修改、刪除表結構
DML【Data Manipulation Language】,數據操作語言,用於對錶數據進行增刪改的操作
DQL【Data Query Language】,數據查詢語言,用於負責表數據的查詢工作
DCL【Data Control Language】:數據控制語言,用來定義存取許可權和安全級別
管理員許可權開啓cmd,輸入mysql -u root -p命令進行登錄,並輸入密碼即可登錄數據庫
在上面介面敲入命令show databases;回車可以檢視當前所有的數據庫
在上面介面敲入命令create database myuserdb;可以檢視當前所有的數據庫
注意:在MySQL數據庫中,我們的命令列一般都需要加入英文 ‘;’
進入我建立的數據庫:
use myuserdb;
檢視所有表
show tables;
建立表格(簡單):
create table user(id int, name varchar(30),age int);
描述表格:
desc user;
刪除表:
drop table user;
建立標準表:
mysql> create table user(
-> id int primary key auto_increment, # 自動增長
-> name varchar(20),
-> age int
-> );
表格的增刪改查:
mysql> insert into user(name, age) values('馬雲',50);
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | 馬雲 | 50 |
+----+------+------+
更新表格
mysql> update user set name=‘馬超’ where id=10;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
刪除數據:
mysql> delete from user where id=10;
Query OK, 1 row affected (0.01 sec)
id不會重置(auto_increment欄位)
truncate 快速清空表中得數據,能針對自動增值得數據重新置1
drop 刪除整個表和表結構
insert 插入數據
insert into table_name(items) values(item_value)
可以一次性插入一條或者多條數據
update 更新表/修改表格內容
update table_name set field1=new_value1, field2=new_value2 [where Clause]
注意:
a.完全可以更新一個欄位或者多個欄位
b.where相當於Python中的if語句
c.可以指定任何條件到where子句中
d.如果沒有where子句,則預設所有的行都被同時更新爲指定的操作[慎用!一般要結合where使用]
where子句
where子句其實就是一個操作符,類似於Python中的if語句,可以做數據的篩選
| = | 相等 |
| ---------------- | ------------------------- |
| <> / != | 不相等 |
| < | 小於 |
| <= | 小於等於 |
| 操作符 | 說明 |
| > | 大於 |
| >= | 大於等於 |
| IN(A,B) | A 和 B 之間 |
| between A and B | 位於兩值之間 |
| AND | 連線多個表達式 並且的關係 |
delete 刪除
delete from table_name where clause
注意:
a.如果where子句沒有指定,則預設將表中的數據全部刪除【慎用!】
b.可以指定任何條件在where子句中
刪除表中的數據的方法有delete,truncate, 其中truncate table用於刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句類似;但是,TRUNCATE TABLE 速度更快,使用的系統資源和事務日誌資源更少
Truncate是一個能夠快速清空資料表內所有資料的SQL語法。並且能針對具有自動遞增值的欄位,做計數重置歸零重新計算的作用。
數據庫執行DQL語言不會對數據庫中的數據發生任何改變,而是讓數據庫發送查詢結果到用戶端
查詢返回的結果其實是一張虛擬表
語法:
SELECT 列名 FROM 表名【WHERE --> GROUP BY -->HAVING--> ORDER BY】
基本查詢語句
#1.查詢所有列
mysql> select * from student;
+------+----------+------+--------+
| id | name | age | gender |
+------+----------+------+--------+
| 1 | aaaa | 19 | female |
| 2 | bbbbbbbb | 20 | male |
| 3 | cc | 15 | male |
| 4 | ddd | 16 | female |
| 5 | eee | 20 | female |
+------+----------+------+--------+
5 rows in set (0.00 sec)
#2.查詢指定列
mysql> select id,name,gender from student;
+------+----------+--------+
| id | name | gender |
+------+----------+--------+
| 1 | aaaa | female |
| 2 | bbbbbbbb | male |
| 3 | cc | male |
| 4 | ddd | female |
| 5 | eee | female |
+------+----------+--------+
5 rows in set (0.00 sec)
條件查詢
主要結合where的使用
between…and: 介於…和…之間
and:邏輯與
or:邏輯或
in / not in:類似於Python中的成員運算子
is / is not: 類似於Python中的身份運算子 , 常用語判斷null值, 如:name is null
演示:
#1.查詢性別爲女,並且年齡爲20的記錄
mysql> select * from student where gender='female' and age=20;
+------+------+------+--------+
| id | name | age | gender |
+------+------+------+--------+
| 5 | eee | 20 | female |
+------+------+------+--------+
1 row in set (0.00 sec)
#2.查詢編號爲1或者姓名爲ddd的記錄
mysql> select * from student where id='1' or name='ddd';
+------+------+------+--------+
| id | name | age | gender |
+------+------+------+--------+
| 1 | aaaa | 19 | female |
| 4 | ddd | 16 | female |
+------+------+------+--------+
2 rows in set (0.00 sec)
#3.查詢編號分別爲1,2,3的記錄
mysql> select * from student where id='1' or id='2' or id='3';
+------+----------+------+--------+
| id | name | age | gender |
+------+----------+------+--------+
| 1 | aaaa | 19 | female |
| 2 | bbbbbbbb | 20 | male |
| 3 | cc | 15 | male |
+------+----------+------+--------+
3 rows in set (0.00 sec)
#簡寫形式
mysql> select * from student where id in('1','2','3');
+------+----------+------+--------+
| id | name | age | gender |
+------+----------+------+--------+
| 1 | aaaa | 19 | female |
| 2 | bbbbbbbb | 20 | male |
| 3 | cc | 15 | male |
+------+----------+------+--------+
3 rows in set (0.00 sec)
#4.查詢編號不爲1,2,3的記錄
mysql> select * from student where id not in('1','2','3');
+------+------+------+--------+
| id | name | age | gender |
+------+------+------+--------+
| 4 | ddd | 16 | female |
| 5 | eee | 20 | female |
+------+------+------+--------+
2 rows in set (0.00 sec)
模糊查詢
where 子句中=表示精準查詢
like:一般情況下結合where子句使用
萬用字元:
_: 匹配任意一個字元
%:匹配0~n個字元【n大於等於1】
演示:
#1.查詢姓名由4個字元組成的記錄
mysql> select * from student where name like '____';
+------+------+------+--------+
| id | name | age | gender |
+------+------+------+--------+
| 1 | aaaa | 19 | female |
+------+------+------+--------+
1 row in set (0.00 sec)
#2.查詢姓名由3個字元組成的記錄,並且最後一個字母爲c的記錄
mysql> select * from student where name like '__c';
Empty set (0.00 sec)
#3.查詢以a開頭的記錄
mysql> select * from student where name like 'a%';
+------+------+------+--------+
| id | name | age | gender |
+------+------+------+--------+
| 1 | aaaa | 19 | female |
+------+------+------+--------+
1 row in set (0.01 sec)
#4.查詢姓名中包含b的記錄
mysql> select * from student where name like '%b%';
+------+----------+------+--------+
| id | name | age | gender |
+------+----------+------+--------+
| 2 | bbbbbbbb | 20 | male |
+------+----------+------+--------+
1 row in set (0.00 sec)
#5.查詢姓名中第2個字母爲c的記錄
mysql> select * from student where name like '_c%';
+------+------+------+--------+
| id | name | age | gender |
+------+------+------+--------+
| 3 | cc | 15 | male |
+------+------+------+--------+
1 row in set (0.00 sec)
欄位控制查詢
as: 起別名,用法 :select 欄位 as 別名
distinct: 去除重複記錄
#1.去除重複記錄
mysql> select distinct id from student;
#2.給列名起別名
mysql> select name as 姓名,gender as 性別 from student;
排序
order by:指定數據返回的順序
asc:ascending,升序
desc: descending,降序
用法:select from 表 order by xxx
演示:
#1.查詢所有的記錄,按照年齡升序排序
mysql> select * from student order by age asc;
#2.查詢所有學生記錄,按照年齡降序排序,如果年齡相等,則按照編號進行升序排序
mysql> select * from student order by age desc,id asc;
聚合函數
聚合函數主要用來做縱向運算
1、count():統計指定列不爲null的記錄行數
#1.查詢年齡大於20的人數
mysql> select count(*) from student where age>20;
2、sum():計算指定列的數值和
#1.查詢所有學生的年齡和
mysql> select sum(age) from student;
3、求指定列中的最大值和最小值
max():
min():
#求最大年齡和最小年齡
mysql> select max(age),min(age) from student;
4、avg()
average:平均數
#查詢所有學生的平均年齡
mysql> select avg(age) from student;
總結:
查詢關鍵字的書寫順序:select 聚合函數 from where order by
分組查詢
group by:分組查詢
having:有…,表示條件,類似於where的用法
演示:
#在當前數據庫下建立新的表
mysql> create table emp(
-> empno int primary key,
-> enname varchar(20),
-> job varchar(20),
-> mgr int,
-> hiredate date,
-> sal double,
-> comm double,
-> deptno int
-> );
#1.查詢各個部門的人數
mysql> select count(*) from emp group by deptno; # 先分組 後count
#2.查詢每個部門的部門編號和每個部門的工資和
mysql> select deptno,sum(sal) from emp group by deptno;
#3.查詢每個部門的部門編號和每個部門工資大於1500的人數
mysql> select deptno,count(*) from emp where sal>1500 group by deptno;
#4.查詢工資總和大於7000的部門編號以及工資和
mysql> select deptno,sum(sal) from emp group by deptno having sum(sal)>7000;
總結:
having和where的區別
a.二者都表示對數據執行條件
b.having是在分組之後對數據進行過濾
where是在分組之前對數據進行過濾
c.having後面可以使用聚合函數
where後面不可以使用聚合函數
分頁查詢
limit:用來限定查詢的起始行,以及總行數
演示:
#1.查詢4行記錄,起始行從0開始
mysql> select * from emp limit 0,4;
#2.查詢3行記錄,起始行從2開始
mysql> select * from emp limit 2,3;
總結:
mysql> select deptno,sum(sal) from emp where sal>1500 group by deptno having sum(sal)>5000 order by sum(sal) asc limit 4;
查詢語句書寫順序:select----》from—》where—》group by-----》having-----》order by----->limit
查詢語句執行順序:from----》where-----》group by----》having----》order by ----》select-----》limit