SQL中EXISTS和IN的區別?

SQL中的EXISTSIN子句有什麼區別? 性能

咱們什麼時候應該使用EXISTS ,什麼時候應該使用INspa


#1樓

Exists關鍵字計算true或false,但IN關鍵字比較相應子查詢列中的全部值。 另外一個Select 1能夠與Exists命令一塊兒使用。 例: code

SELECT * FROM Temp1 where exists(select 1 from Temp2 where conditions...)

IN效率較低,所以Exists速度更快。 it


#2樓

若是您使用的是IN運算符,則SQL引擎將掃描從內部查詢中提取的全部記錄。 另外一方面,若是咱們使用EXISTS,SQL引擎會在找到匹配後當即中止掃描過程。 io


#3樓

  1. 當子查詢結果很是大時, EXISTSIN快得多。
    當子查詢結果很是小時, INEXISTS快。 效率

    CREATE TABLE t1 (id INT, title VARCHAR(20), someIntCol INT) GO CREATE TABLE t2 (id INT, t1Id INT, someData VARCHAR(20)) GO INSERT INTO t1 SELECT 1, 'title 1', 5 UNION ALL SELECT 2, 'title 2', 5 UNION ALL SELECT 3, 'title 3', 5 UNION ALL SELECT 4, 'title 4', 5 UNION ALL SELECT null, 'title 5', 5 UNION ALL SELECT null, 'title 6', 5 INSERT INTO t2 SELECT 1, 1, 'data 1' UNION ALL SELECT 2, 1, 'data 2' UNION ALL SELECT 3, 2, 'data 3' UNION ALL SELECT 4, 3, 'data 4' UNION ALL SELECT 5, 3, 'data 5' UNION ALL SELECT 6, 3, 'data 6' UNION ALL SELECT 7, 4, 'data 7' UNION ALL SELECT 8, null, 'data 8' UNION ALL SELECT 9, 6, 'data 9' UNION ALL SELECT 10, 6, 'data 10' UNION ALL SELECT 11, 8, 'data 11'
  2. 查詢1 select

    SELECT FROM t1 WHERE not EXISTS (SELECT * FROM t2 WHERE t1.id = t2.t1id)

    查詢2 查詢

    SELECT t1.* FROM t1 WHERE t1.id not in (SELECT t2.t1id FROM t2 )

    若是在t1你的id有空值,那麼查詢1將找到它們,可是查詢2沒法找到空參數。 di

    個人意思是IN沒法與null進行比較,所以它沒有null的結果,可是EXISTS能夠將全部內容與null進行比較。 co


#4樓

若是子查詢返回多個值,則可能須要執行外部查詢 - 若是條件中指定的列中的值與子查詢的結果集中的任何值匹配。 要執行此任務,您須要使用in關鍵字。

您能夠使用子查詢來檢查是否存在一組記錄。 爲此,您須要將exists子句與子查詢一塊兒使用。 exists關鍵字始終返回true或false值。


#5樓

EXISTS的性能比IN快。 若是大多數過濾條件都在子查詢中,那麼最好使用IN,若是大多數過濾條件都在主查詢中,那麼最好使用EXISTS。

相關文章
相關標籤/搜索