1. 程式人生 > >MySQL 高階使用

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