Difference between EXISTS and IN in SQL?

前端 未结 21 1762
执笔经年
执笔经年 2020-11-22 16:50

What is the difference between the EXISTS and IN clause in SQL?

When should we use EXISTS, and when should we use IN

21条回答
  •  一向
    一向 (楼主)
    2020-11-22 17:15

    The exists keyword can be used in that way, but really it's intended as a way to avoid counting:

    --this statement needs to check the entire table
    select count(*) from [table] where ...
    
    --this statement is true as soon as one match is found
    exists ( select * from [table] where ... )
    

    This is most useful where you have if conditional statements, as exists can be a lot quicker than count.

    The in is best used where you have a static list to pass:

     select * from [table]
     where [field] in (1, 2, 3)
    

    When you have a table in an in statement it makes more sense to use a join, but mostly it shouldn't matter. The query optimiser should return the same plan either way. In some implementations (mostly older, such as Microsoft SQL Server 2000) in queries will always get a nested join plan, while join queries will use nested, merge or hash as appropriate. More modern implementations are smarter and can adjust the plan even when in is used.

提交回复
热议问题