aja*_*jay 10 sql t-sql sql-server join
我听说连接应该优先于嵌套查询.一般来说是真的吗?或者可能存在一个比其他更快的情况:
例如哪个是更有效的查询方式?:
Select emp.salary
from employee emp
where emp.id = (select s.id from sap s where s.id = 111)
Run Code Online (Sandbox Code Playgroud)
要么
Select emp.salary
from employee emp
INNER JOIN sap s ON emp.id = s.id
WHERE s.id = 111
Run Code Online (Sandbox Code Playgroud)
我听说连接应该优先于嵌套查询.一般来说是真的吗?
这取决于要求和数据.
如果有多个与其相关的子记录,则使用JOIN可能会复制父表的结果集中的信息,因为JOIN会返回匹配的行.这意味着如果您在使用JOIN时需要父表中的唯一值,则需要查看使用其中一个DISTINCT或一个GROUP BY子句.但是如果使用子查询,这一点都不是问题.
而且,子查询并不完全相同.有直接的评估,就像你的例子:
where emp.id = (select s.id from sap s where s.id = 111)
Run Code Online (Sandbox Code Playgroud)
......和IN子句:
where emp.id IN (select s.id from sap s where s.id = 111)
Run Code Online (Sandbox Code Playgroud)
...如果s.id返回多个值,直接评估将引发错误,它将匹配子查询返回的任何值.但也有EXISTS条款......
WHERE EXISTS(SELECT NULL
FROM SAP s
WHERE emp.id = s.id
AND s.id = 111)
Run Code Online (Sandbox Code Playgroud)
EXISTS的不同之处在于:
SELECT 1/0,它应该触发被零除错误但不会| 归档时间: |
|
| 查看次数: |
15885 次 |
| 最近记录: |