1. DQL:查詢語句
1. 排序查詢
2. 聚合函數(shù)
3. 分組查詢
4. 分頁查詢
2. 約束
3. 多表之間的關(guān)系
4. 范式
5. 數(shù)據(jù)庫的備份和還原
DQL:查詢語句
1. 排序查詢
* 語法:order by 子句
* order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
* 排序方式:
* ASC:升序,默認(rèn)的。
* DESC:降序。
* 注意:
* 如果有多個排序條件,則當(dāng)前邊的條件值一樣時,才會判斷第二條件。
2. 聚合函數(shù):將一列數(shù)據(jù)作為一個整體,進(jìn)行縱向的計算。
1. count:計算個數(shù)
1. 一般選擇非空的列:主鍵
2. count(*)
2. max:計算最大值
3. min:計算最小值
4. sum:計算和
5. avg:計算平均值
* 注意:聚合函數(shù)的計算,排除null值。
解決方案:
1. 選擇不包含非空的列進(jìn)行計算
2. 函數(shù)
3. 分組查詢:
1. 語法:group by 分組字段;
2. 注意:
1. 分組之后查詢的字段:分組字段、聚合函數(shù)
2. where 和 的區(qū)別?
1. where 在分組之前進(jìn)行限定,如果不滿足條件,則不參與分組。在分組之后進(jìn)行限定,如果不滿足結(jié)果mysql添加聯(lián)合唯一約束,則不會被查詢出來
2. where 后不可以跟聚合函數(shù),可以進(jìn)行聚合函數(shù)的判斷。
-- 按照性別分組。分別查詢男、女同學(xué)的平均分
sex , AVG(math) FROM GROUP BY sex;
-- 按照性別分組。分別查詢男、女同學(xué)的平均分,人數(shù)
sex , AVG(math),COUNT(id) FROM GROUP BY sex;
-- 按照性別分組。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人,不參與分組
sex , AVG(math),COUNT(id) FROM WHERE math > 70 GROUP BY sex;
-- 按照性別分組。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人,不參與分組,分組之后。人數(shù)要大于2個人
sex , AVG(math),COUNT(id) FROM WHERE math > 70 GROUP BY sex COUNT(id) > 2;
sex , AVG(math),COUNT(id) 人數(shù) FROM WHERE math > 70 GROUP BY sex 人數(shù) > 2;
4. 分頁查詢
1. 語法:limit 開始的索引,每頁查詢的條數(shù);
2. 公式:開始的索引 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)
-- 每頁顯示3條記錄
* FROM LIMIT 0,3; -- 第1頁
* FROM LIMIT 3,3; -- 第2頁
* FROM LIMIT 6,3; -- 第3頁
3. limit 是一個MySQL"方言"
約束
* 概念: 對表中的數(shù)據(jù)進(jìn)行限定,保證數(shù)據(jù)的正確性、有效性和完整性。
* 分類:
1. 主鍵約束: key
2. 非空約束:not null
3. 唯一約束:
4. 外鍵約束: key
* 非空約束:not null,值不能為null
1. 創(chuàng)建表時添加約束
TABLE stu(
id INT,
NAME (20) NOT NULL -- name為非空
);
2. 創(chuàng)建表完后,添加非空約束
ALTER TABLE stu NAME (20) NOT NULL;
3. 刪除name的非空約束
ALTER TABLE stu NAME (20);
* 唯一約束:,值不能重復(fù)
1. 創(chuàng)建表時,添加唯一約束
TABLE stu(
id INT,
(20) -- 添加了唯一約束
);
* 注意mysql中,唯一約束限定的列的值可以有多個null
2. 刪除唯一約束
ALTER TABLE stu DROP INDEX ;
3. 在創(chuàng)建表后,添加唯一約束
ALTER TABLE stu (20) ;
* 主鍵約束: key。
1. 注意:
1. 含義:非空且唯一
2. 一張表只能有一個字段為主鍵
3. 主鍵就是表中記錄的唯一標(biāo)識
2. 在創(chuàng)建表時,添加主鍵約束
table stu(
id int key,-- 給id添加主鍵約束
name (20)
);
3. 刪除主鍵
-- 錯誤 alter table stu id int ;
ALTER TABLE stu DROP KEY;
4. 創(chuàng)建完表后,添加主鍵
ALTER TABLE stu id INT KEY;
5. 自動增長:
1. 概念:如果某一列是數(shù)值類型的,使用 可以來完成值得自動增長
2. 在創(chuàng)建表時,添加主鍵約束,并且完成主鍵自增長
table stu(
id int key ,-- 給id添加主鍵約束
name (20)
);
3. 刪除自動增長
ALTER TABLE stu id INT;
4. 添加自動增長
ALTER TABLE stu id INT ;
* 外鍵約束: key,讓表于表產(chǎn)生關(guān)系,從而保證數(shù)據(jù)的正確性。
1. 在創(chuàng)建表時,可以添加外鍵
* 語法:
table 表名(
....
外鍵列
外鍵名稱 key (外鍵列名稱) 主表名稱(主表列名稱)
);
2. 刪除外鍵
ALTER TABLE 表名 DROP KEY 外鍵名稱;
3. 創(chuàng)建表之后,添加外鍵
ALTER TABLE 表名 ADD 外鍵名稱 KEY (外鍵字段名稱) 主表名稱(主表列名稱);
4. 級聯(lián)操作
1. 添加級聯(lián)操作
語法:ALTER TABLE 表名 ADD 外鍵名稱
KEY (外鍵字段名稱) 主表名稱(主表列名稱) ON ON ;
2. 分類:
1. 級聯(lián)更新:ON
2. 級聯(lián)刪除:ON
數(shù)據(jù)庫的設(shè)計
1. 多表之間的關(guān)系
1. 分類:
1. 一對一(了解):
* 如:人和身份證
* 分析:一個人只有一個身份證,一個身份證只能對應(yīng)一個人
2. 一對多(多對一):
* 如:部門和員工
* 分析:一個部門有多個員工,一個員工只能對應(yīng)一個部門
3. 多對多:
* 如:學(xué)生和課程
* 分析:一個學(xué)生可以選擇很多門課程,一個課程也可以被很多學(xué)生選擇
2. 實現(xiàn)關(guān)系:
1. 一對多(多對一):
* 如:部門和員工
* 實現(xiàn)方式:在多的一方建立外鍵,指向一的一方的主鍵。
2. 多對多:
* 如:學(xué)生和課程
* 實現(xiàn)方式:多對多關(guān)系實現(xiàn)需要借助第三張中間表。中間表至少包含兩個字段,這兩個字段作為第三張表的外鍵,分別指向兩張表的主鍵
3. 一對一(了解):
* 如:人和身份證
* 實現(xiàn)方式:一對一關(guān)系實現(xiàn),可以在任意一方添加唯一外鍵指向另一方的主鍵。
3. 案例
-- 創(chuàng)建旅游線路分類表
-- cid 旅游線路分類主鍵,自動增長
-- cname 旅游線路分類名稱非空,唯一,字符串 100
TABLE (
cid INT KEY ,
cname (100) NOT NULL
);
-- 創(chuàng)建旅游線路表
/*
rid 旅游線路主鍵,自動增長
rname 旅游線路名稱非空,唯一,字符串 100
price 價格
rdate 上架時間,日期類型
cid 外鍵,所屬分類
*/
TABLE (
rid INT KEY ,
rname (100) NOT NULL ,
price ,
rdate DATE,
cid INT,
KEY (cid) (cid)
);
/*創(chuàng)建用戶表
uid 用戶主鍵,自增長
用戶名長度 100,唯一,非空
密碼長度 30,非空
name 真實姓名長度 100
生日
sex 性別mysql添加聯(lián)合唯一約束,定長字符串 1
手機號,字符串 11
email 郵箱,字符串長度 100
*/
TABLE (
uid INT KEY ,
(100) NOT NULL,
(30) NOT NULL,
NAME (100),
DATE,
sex CHAR(1) '男',
(11),
email (100)
);
/*
創(chuàng)建收藏表
rid 旅游線路 id,外鍵