參考資料 -- https://www.liaoxuefeng.com/
-
基本查詢
查詢student表的所有數據
SELECT * FROM students
-
條件查詢 (NOT AND OR)
不是2班的,而且成績小於80分或者大於90分的
SELECT * FROM students
WHERE NOT class_id = 2
AND (score < 80 OR score > 90);
-
投影查詢(按列名查詢)
SELECT id,score,name FROM students
WHERE NOT class_id = 2
AND (score < 80 OR score > 90);
-
排序查詢(默認遞增排序ASC,遞減需要加上關鍵字DESC)
SELECT id,score,name FROM students
WHERE NOT class_id = 2
AND (score < 80 OR score > 90)
ORDER BY score ASC;
--ORDER BY score DESC;
-
分頁查詢
按3行1頁顯示,並去掉前3行
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 3;
-
聚合查詢(COUNT,AVG,SUM,MAX,MIN)
按3行1頁顯示,一共有多少頁。
SELECT CEILING(COUNT(*) / 3) page_num FROM students;
所有男生的平均成績。
SELECT AVG(score) score FROM students
WHERE gender = 'M';
所有男生的總成績。
SELECT SUM(score) score_sum FROM students
WHERE gender = 'M';
-
分組聚合
每個班分別有多少人
SELECT class_id, COUNT(*) num FROM students
GROUP BY class_id;
每個班的平均成績
SELECT class_id, AVG(score) FROM students
GROUP BY class_id;
每個班男女同學的平均成績
SELECT class_id, gender, AVG(score) FROM students
GROUP BY class_id, gender
ORDER BY class_id ASC, gender ASC;
-
多表查詢(笛卡爾查詢)
可以給每個表設置一個別名(student -> s)
同時,兩個表中可能存在相同名字的列,需要給列重命名(s.id -> sid)
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;
-
連接查詢
內連接 -- INNER
外連接 -- OUTER(RIGHT LEFT FULL)
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
--INNER JOIN classes c
--RIGHT OUTER JOIN classes c
--LEFT OUTER JOIN classes c
FULL OUTER JOIN classes c
ON s.class_id = c.id;