Home [SQL] Exists 用法
Post
Cancel

[SQL] Exists 用法

用法

exists: ()內子查詢語句傳回結果不為空,說明where條件成立就會執行主sql語句。如果為空就表示where條件不成立,sql語句就不會執行。 not exists 和 exists相反,子查詢語句結果為空,則表示where條件成立,執行sql語句。否則不執行。

exists : 強調是否回傳結果集,不要求知道回傳什麼,與in的差別就是,in只能傳回一個欄位值,exists允許傳回多個欄位。如:

1
2
select name from student 
where sex = 'm' and mark exists(select 1 from grade where ...) 

exists引導的子句有結果集返回,那麼exists這個條件就算成立了,返回的字段始終為1,這個數字沒有意義。所以exists子句不在乎回傳什麼,而是在乎是不是有結果集回傳。

  • exists (sql回傳的結果為真)
  • not exists (sql不回傳的結果為真)

exists 效率一般優於 in ,使用EXISTS,會先檢查主查詢,然後執行子查詢知道它找到第一個符合項,這就節省了時間。 IN 子查詢時,先執行子查詢,並將所得的結果清單存放在一個加了索引的暫存表中。

exists 效率優於 distinct,當提交一對多表資料的查詢時,避免在 SELECT 子句中使用 DISTINCT

exists適合外表的結果集小的情況
in適合內表小的情況

Exists 用法

This post is licensed under CC BY 4.0 by the author.