mysql 查詢 (二)
帶 any/all 謂詞的子查詢
例子:
1. 查詢出成績比1號學生或3號學生高的其他學生的 的資訊(stu)
檢視 stu 表
方法1:使用 any 謂詞
方法2:使用聚合函式 min()
2. 查詢出成績比1號學生和3號學生都高的其他學生的 的資訊(stu)
使用 all 謂詞
使用聚合函式 max()
帶有 exists 謂詞的子查詢
例子:
1. 查詢未選課程的學生資訊(stu中有,而stu_score中沒有的學號)
檢視 stu, stu_score表
使用 not exists
2. 查詢既選修了1號課程又選修了4號課程的學生的學號(stu_score)
基於派生表的查詢(from 型子查詢)
例子:
1. 用from型子查詢實現 select * from stu where sex = 'f' and grade <60:(性別女,分數低於60)
連線查詢
多表連線查詢原理:
1. 先確定資料要用到哪些表。
2. 將多個表先通過笛卡爾積變成一個表。
3. 然後去除不符合邏輯的資料(根據where後的條件)。
1. 不帶謂詞的連線(很少使用)
例如:
連線 stu 和 stu_score
select stu.*, stu_score.* from stu,stu_score;
2. 等值連線
例子:
(1) 查詢選修了1號課程的所有學生的基本資訊
(2) 查詢出所有學生的學號,姓名,課程名及各門功課的成績 (stu,score,course)
stu,score,course三表如下所示:
查詢:
---------------------------------------------------------------------------------------------------------------------
自身連線
例子
查詢既選修了1號課程又選修了2號課程的學生的學號(score)
----------------------------------------------------------------------------------------------------------------------------
外連線
例子
查詢出所有學生的學號,姓名,課程號,及各門功課的成績 (stu,stu_score)包括沒有選修任何課程的學生
stu, stu_score 表
stu 左連線 stu_score
stu 右連線 stu_score
集合查詢
1. 並操作:union
例子:
(1): 合併 A 和 B,id 對應的 num 求和
A, B:
合併: