-
基本查詢
SELECT * FROM <表名>
使用
SELECT * FROM students
時,SELECT
是關鍵字,表示將要執行一個查詢,*
表示“所有列”,FROM
表示將要從哪個表查詢 - 條件查詢
SELECT * FROM <表名> WHERE <條件表達式>
條件表達式可以用
<條件1> AND <條件2>
表達滿足條件1並且滿足條件2;<條件1> OR <條件2>
表示滿足條件1或者滿足條件2;NOT <條件>
,表示“不符合該條件”的記錄。而NOT class_id = 2
等價於class_id <> 2。
- 投影查詢
SELECT 列1, 列2, 列3 FROM <表名> //返回某些列的數據
SELECT 列1 別名1, 列2 別名2, 列3 別名3 FROM <表名> //返回某些列的數據並修改列名 - 排序
SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;
ORDER BY score表示按score排序,DESC表示倒序,gender表示如果score相同時按gender升序排序(默認ASC)。如果帶有WHERE,則ORDER BY需要放在WHERE后面。
- 分頁查詢
-- 查詢第1頁 SELECT id, name, gender, score FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;
- 聚合查詢
-- 使用聚合查詢並設置結果集的列名為num: SELECT COUNT(*) num FROM students;
使用聚合查詢時還可以使用WHERE進行條件查詢。除了COUNT(),還有SUM() AVG() MAX() MIN()等聚合函數。CEILING()表示向上取整,FLOOR()向下取整。
聚合查詢用於分組時:SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
將會顯示3個結果,在SELECT后加入字段class_id,可以分組統計出class_id各個count值。
此外,分組前還可以進行條件篩選:SELECT class_id, COUNT(*) num FROM students WHERE score > 90 GROUP BY class_id;
分組后,還可以對分組進一步篩選:
SELECT class_id, COUNT(*) num FROM students WHERE score > 90 GROUP BY class_id HAVING COUNT(*) > 2;
WHERE和HAVING的區別:a.where在分組前限定,如果不符合要求,則不參與分組;having在分組之后限定,如果不符合要求,將不會被查詢出來。b.where后不可跟聚合函數,having后可以進行聚合函數的判斷。
- 連接查詢
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score FROM students s INNER JOIN classes c ON s.class_id = c.id;