0%

[資料庫] Lesson 6 子查詢

子查詢(SubQuery)算是比較進階的應用,在資料表關聯變得複雜或是要查詢特殊條件時就會用上子查詢。

比如要查詢全班平均及格以上的同學時,就會先用一個子查詢來算出全班的平均分數,再用這個平均分數放到Where句子中去做為條件。

在Select 區段的子查詢

用在SELECT中大多是一個值的結果,比如要同時列出學生的成績及全班的平均分數

1
2
SELECT `id`,`score`,avg(`score`) as '總平均' FROM `students`

在from 區段的子查詢

在FROM區段中的字查詢,其結果會被視為是一張資料表,因此等同於是做了一次結合查詢,通常會幫這個子查詢的結果命名一個暫時的資料表名

1
2
3
4
5

SELECT `students`.`id`,`students`.`score`,`A`.`address`
FROM `students`,(SELECT `id`,`address` FROM `private`)A
WHERE `students`.`id`=`A`.`id`

在where(join) 區段的字查詢

WHERE 區段的子查詢視需要可以很複雜,搭配各種限制語法及排序等可以得到各種查詢結果

1
2
3
4
5
6
7
8
9
SELECT 欄位.... 
FROM `table`
WHERE `students`.`id`=(子查詢)


SELECT 欄位....
FROM `table`
WHERE `students`.`id` IN(子查詢)