SQL數據庫--查詢

參考資料 -- 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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章