MySQL 高階使用
DISTINCT 用於對查詢的記錄去重
分組函式:
COUNT(*) 用於獲取查詢的記錄總數
COUNT(DISTINCT xxx) 用於獲取查詢的記錄中不重複內容的總數
MAX(xxx) 用於獲取查詢記錄中的最大值
MIN(xxx) 用於獲取查詢記錄中的最小值
AVG(xxx) 用於獲取查詢記錄中的平均值
SUM(xxx) 對於查詢記錄中的資料求和
GROUP BY xxx 把資料按照指定列進行分組
分組後只能:
1. 查詢分組條件欄位
2. 使用分組函式對每一組內的資料進行計算
對 GROUP BY 的結果進行過濾,使用 HAVING
ORDER BY xxx 把查詢結果按照指定列進行排序
多個排序條件使用 , 分隔
ASC:預設,升序
DESC:降序
按照學號降序排列,學號相同按照成績升序排列
SELECT * FROM score ORDER BY stu_id DESC, grade;
LIMIT x,y 獲取查詢結果中的一部分記錄
從 x 開始取 y 條,如果不足 y 條,就取所有剩餘記錄
LIMIT 0, 4 從 0 開始取 4 條
LIMIT 4, 4 從 4 開始取 4 條
SELECT 欄位列表
FROM 表名
WHERE 過濾條件
GROUP BY 分組條件
HAVING 過濾分組計算結果
ORDER BY 排序條件
LIMIT x,y 分頁
前兩個必須寫,後五個可選,順序不能錯亂
對於數字類的查詢結果,可以進行四則運算
但是一旦 NULL 參與了運算,得到的結果比為 NULL
IFNULL(subsidy, 0) 如果 subsidy 值為 NULL,使用 0 代替
WHERE subsidy IS NULL 為 NULL 的判斷
WHERE subsidy IS NOT NULL 不為 NULL 的判斷
SELECT MAX() MIN() … post FROM xxx GROUP BY post
SELECT MAX(salary) FROM xxx
id post salary | 1003 | Coder | 6000 | | 1005 | Coder | 7000 | | 1000 | Coder | 12000 | | 1001 | Coder | 3480 | | 1004 | Programmer | 9400 | | 1006 | DBA | 10030 | | 1007 | DBA | 5000 |
**子查詢:**使用另外一個 SQL 作為查詢的 欄位,表,條件等等
用於合併需要多步完成的查詢操作
**連線:**用於從多張表中查詢資料
表連線必須為表起一個別名,方便使用
兩張表的笛卡兒積:(會導致拼接結果暴增,效率低,不常用)
SELECT a.name, b.name
FROM employee as a, dept as b
WHERE a.dept_id = b.id;
1000 1000
1001 1001
1000 1000
1000 1001
1001 1000
1001 1001
內連線(INNER JOIN):(只拼接關聯的部分)
SELECT a., b.
FROM employee as a INNER JOIN dept as b
ON a.dept_id = b.id;
1000 1000
1001 1001
1002 1003
1000 1000
1001 1001
左外連線(LEFT JOIN):
SELECT a., b.
FROM employee as a LEFT JOIN dept as b
ON a.dept_id = b.id;
1000 1000
1001 1001
1002 1003
1000 1000
1001 1001
1002 NULL
右外連線(RIGHT JOIN):
SELECT a., b.
FROM employee as a RIGHT JOIN dept as b
ON a.dept_id = b.id;
1000 1000
1001 1001
1002 1003
1000 1000
1001 1001
NULL 1003
1000 1000
1001 1001 左
1002 NULL
1000 1000
1001 1001 1000 1000 內
1002 1003 1001 1001
1000 1000
1001 1001 右
NULL 1003