當前位置: 妍妍網 > 辦公

SQL | EXISTS運算子不用怕,看這篇足夠了!

2024-02-19辦公

點選藍字 · 關註我們

大家新年好呀!我是Bryce~

今天給大家分享一下SQL中的EXISTS運算子,並且與IN運算子作對比。一起來看看吧!

1. 基本介紹

1.1 功能簡介
EXISTS是SQL中的條件運算子,用於檢查子查詢是否返回任何行。如果子查詢返回至少一行結果,則EXISTS返回true,否則返回false。

1.2 執行順序
EXISTS首先執行子查詢,如果子查詢返回結果,則外部查詢中的條件被視為滿足,否則條件被視為不滿足。

1.3 簡單理解
可以將EXISTS想象成一個檢查器,它檢查某樣東西是否存在。

例如,如果我們想知道某個課程是否有學生選修,我們可以使用EXISTS來檢查學生表中是否存在選修該課程的記錄。如果存在,就意味著有學生選修了這門課程,否則沒有。

2. 使用範例

2.1 EXISTS 使用範例
假設我們有兩個表:Students和Courses。我們想找出至少有一個學生選修的課程。我們可以這樣查詢:

SELECT CourseNameFROM CoursesWHEREEXISTS (SELECT1FROM StudentsWHERE Students.CourseID = Courses.CourseID);

2.2 NOT EXISTS 使用範例
NOT EXISTS是EXISTS的相反,它檢查子查詢是否不返回任何行。以下範例將返回所有沒有學生選修的課程名稱:

SELECT CourseNameFROM CoursesWHERENOTEXISTS (SELECT1FROM StudentsWHERE Students.CourseID = Courses.CourseID);

3. 與 IN 的區別

3.1 區別介紹
EXISTS和IN都是用於子查詢,但它們的作用略有不同。EXISTS檢查子查詢返回的行數,而IN則比較外部查詢和子查詢之間的值。

3.2 IN使用範例
假設我們使用IN來執行與上面相同的查詢,返回所有至少有一個學生選修的課程名稱,與上述EXISTS查詢相同。

SELECT CourseNameFROM CoursesWHERE CourseID IN (SELECT CourseIDFROM Students);

3.3 NOT IN使用範例
NOT IN與NOT EXISTS類似,但是與IN相對應。以下範例將返回所有沒有學生選修的課程名稱,與上述 NOT EXISTS查詢相同。

SELECT CourseNameFROM CoursesWHERE CourseID NOTIN (SELECT CourseIDFROM Students);

4. 註意事項

  • 使用EXISTS和NOT EXISTS時,子查詢的結果集不會被實際選擇,因此 它們通常比IN和NOT IN更有效率,尤其是在子查詢返回大量結果時。

  • 確保子查詢返回想要的結果,否則可能導致邏輯錯誤。

  • 5. 最後結論

    EXISTS和NOT EXISTS是在SQL中用於檢查子查詢結果是否為空的強大工具。透過結合其他條件運算子如IN和NOT IN,可以更靈活地進行數據分析。

    以上就是本次分享的全部內容。

    我是Bryce,我們下期見~

    你好!我是Bryce,自學從機械專業轉行大廠數據分析。轉正半年被主管破格提拔晉升一級,目前是某計畫數據業務負責人。日常輸出數分技術、AI編程、職場認知相關內容,歡迎交流!(微信:jt2540892461)

    關註我

    常進步

    關註下方公眾號,回復【數據分析書籍】,即可獲取SQL、Python、機器學習等方面的電子書合集。