Using 'IN' with a sub-query in SQL Statements

你说的曾经没有我的故事 提交于 2019-11-28 01:56:18
gbn

No, it's OK to use.

You can write the query above using IN, EXISTS in all RDBMS, some also support INTERSECT.

Semantically this is a semi-join which "give me rows from table A where I have a at least one match in tableB". An INNER JOIN is "give me all matching rows"

So if TableA has 3 rows and TableB has 5 rows that match:

  • an INNER JOIN is 15 rows
  • a semi-join is 3 rows

This is why IN and EXISTS are pushed by me and the other SQL types here: a JOIN is wrong, requires DISTINCT and will be slower.

EXISTS support multiple column JOINs, IN doesn't in SQL Server (it does in others).

Rather than a distinct you could use group by. I have had cases where I got better response time using join. Typically when I am joining all the rows via a primary key / foreign key relationship and the where is looking at a non key column. Especially if multiple joins. The IN can SOMETIMES force an index scan and the join will TYPICALLY use a seek if it is going to the PK. When you design you tables line up the primary keys so they are in the same order and explicitly declare the PK / FK relationships. Join are NOT limited to PK / FK. But a common use of a join is to walk the PK / FK relationship and in that case my experience using a join with the keys aligned is the best performance.

Alex_L

As you can read here, JOINS are faster than sub-selects.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!