SQL中EXISTS的使用
生活随笔
收集整理的這篇文章主要介紹了
SQL中EXISTS的使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 1.簡(jiǎn)介
- 2.表結(jié)構(gòu)
- 3.查詢所有選修了“C1”課程的學(xué)生名。
- 4.查詢沒有選C1課程的學(xué)生的學(xué)號(hào)、姓名
- 5.查詢選修了所有課程的學(xué)生的姓名(續(xù))
- 6.查詢至少選修了S1所選的全部課程的學(xué)生名
- 7.在FROM語句中使用子查詢,對(duì)查詢結(jié)果定義表名及列名 例:求平均成績(jī)超過80分的學(xué)號(hào)及平均成績(jī)
1.簡(jiǎn)介
- 不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢的稱為不相關(guān)子查詢。
- 相關(guān)子查詢:子查詢的查詢條件依賴于外層父查詢的某個(gè)屬性值的稱為相關(guān)子查詢,帶EXISTS 的子查詢就是相關(guān)子查詢
- EXISTS表示存在量詞:帶有EXISTS的子查詢不返回任何記錄的數(shù)據(jù),只返回邏輯值“True”或“False”
2.表結(jié)構(gòu)
選課表:學(xué)號(hào)、課程號(hào)
學(xué)生表:學(xué)號(hào)、姓名
課程表:課程號(hào)、課程名
3.查詢所有選修了“C1”課程的學(xué)生名。
普通SQL查詢:
SELECT 姓名 FROM 學(xué)生表 WHERE 學(xué)號(hào) IN (SELECT 學(xué)號(hào) FROM 選課表 WHERE 課程號(hào) = 'C1');帶EXISTS的SQL查詢:
SELECT 姓名 FROM 學(xué)生表 WHERE EXISTS (SELECT * FROM 選課表WHERE 學(xué)生表.學(xué)號(hào) = 選課表.學(xué)號(hào) AND 課程號(hào) = 'C1' );相關(guān)子查詢執(zhí)行過程:先在外層查詢中取“學(xué)生表”的第一行記錄,用該記錄的相關(guān)的屬性值(在內(nèi)層WHERE子句中給定的)處理內(nèi)層查詢,若外層的WHERE子句返回“TRUE”值,則這條記錄放入結(jié)果表中。然后再取下一行記錄;重復(fù)上述過程直到外層表的記錄全部遍歷一次為止。
EXISTS語句不關(guān)心子查詢的具體內(nèi)容,因此用“SELECT *”,“Exists + 子查詢”用來判斷該子查詢是否返回記錄。
- Exists:若子查詢的結(jié)果集非空時(shí),返回“True”;若子查詢的結(jié)果集為空時(shí),返回“False” 。
- NOT EXISTS :若子查詢結(jié)果為空,返回“TRUE”值;若子查詢的結(jié)果集非空時(shí),返回 “FALSE。
4.查詢沒有選C1課程的學(xué)生的學(xué)號(hào)、姓名
SELECT 姓名 FROM 學(xué)生表 WHERE NOT EXISTS (SELECT *FROM 選課表WHERE 學(xué)生表.學(xué)號(hào) = 選課表.學(xué)號(hào) AND 課程號(hào) = 'C1' );5.查詢選修了所有課程的學(xué)生的姓名(續(xù))
SELECT 姓名 FROM 學(xué)生表 WHERE NOT EXISTS (SELECT *FROM 課程表WHERE NOT EXISTS(SELECT *FROM 選課表WHERE 學(xué)生表.學(xué)號(hào) = 選課表.學(xué)號(hào) AND 課程表.課程號(hào) = 選課表.課程號(hào)) );6.查詢至少選修了S1所選的全部課程的學(xué)生名
SELECT 姓名 FROM 學(xué)生表 WHERE NOT EXISTS ( SELECT *FROM 選課表 AS 選課表X WHERE 選課表X.學(xué)號(hào)='s1' AND NOT EXISTS (SELECT *FROM 選課表 AS 選課表YWHERE 學(xué)生表.學(xué)號(hào) = 選課表Y.學(xué)號(hào) AND 選課表X.課程號(hào) = 選課表Y.課程號(hào)) );7.在FROM語句中使用子查詢,對(duì)查詢結(jié)果定義表名及列名 例:求平均成績(jī)超過80分的學(xué)號(hào)及平均成績(jī)
SELECT 學(xué)號(hào), AVG_G FROM (SELECT 學(xué)號(hào), AVG(Grade)FROM 選課表GROUP BY 學(xué)號(hào) ) AS RA(學(xué)號(hào), AVG_G) WHERE AVG_G > 80轉(zhuǎn)載于:https://www.cnblogs.com/jiangyunfeng/p/9054305.html
總結(jié)
以上是生活随笔為你收集整理的SQL中EXISTS的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SecureCRT文件传输
- 下一篇: POJ 1321