[SQL 筆記備份]- 024_子查詢(3)
[SQL 筆記備份]- 024_子查詢(3)
http://sql.yehyeh.net/content/Subqueries.php
在WHERE裡的子查詢
說明:
·
一個SQL敘述中,若含有另一個以小括號括住的SQL敘述,則稱為子查詢
·
子查詢很常使用,尤其是一個SQL敘述牽涉到多個表格時。
·
一個SQL敘述中,可以同時擁有多個子查詢
·
子查詢回傳結果可以代替表格,亦即子查詢可以接在FROM後面
·
子查詢常搭配IN或NOT IN關鍵字使用,此時只能查詢一個欄位
格式:
SELECT *
FROM 資料表
WHERE 欄位 IN (子查詢)
範例:
找出考試有及格的學生姓名
Students |
|||
NO |
NAME |
SEX |
HEIGHT |
103001 |
王小明 |
男 |
170 |
103002 |
王小明 |
女 |
160 |
103003 |
陳小華 |
女 |
165 |
103004 |
張小強 |
男 |
165 |
103005 |
張小玲 |
女 |
Exam1 |
|
NO |
SCORE |
103001 |
70 |
103002 |
80 |
103003 |
50 |
Exam2 |
|
NO |
SCORE |
103001 |
80 |
103002 |
50 |
103004 |
70 |
SELECT NAME, SCORE
FROM STUDENT
WHERE NO IN ( SELECT NO FROM EXAM1 WHERE SCORE >= 60);
NAME |
SCORE |
王小明 |
70 |
王小明 |
80 |
—————————
FROM後的子查詢
說明:
·
FROM後面接子查詢時,通常要查的表格不只一個
格式:
SELECT * FROM (子查詢1)[, (子查詢2)]
範例:
找出考試有及格的學生姓名
Students |
|||
NO |
NAME |
SEX |
HEIGHT |
103001 |
王小明 |
男 |
170 |
103002 |
王小明 |
女 |
160 |
103003 |
陳小華 |
女 |
165 |
103004 |
張小強 |
男 |
165 |
103005 |
張小玲 |
女 |
xam1 |
|
NO |
SCORE |
103001 |
70 |
103002 |
80 |
103003 |
50 |
Exam2 |
|
NO |
SCORE |
103001 |
80 |
103002 |
50 |
103004 |
70 |
SELECT NAME, SCORE
FROM STUDENT A,
(SELECT NO FROM EXAM1 WHERE SCORE >= 60) B
WHERE A.NO = B.NO;
NAME |
SCORE |
王小明 |
70 |
王小明 |
80 |