select 子句中的内联查询与 where 子句中的连接之间的差异 [重复]

Posted

技术标签:

【中文标题】select 子句中的内联查询与 where 子句中的连接之间的差异 [重复]【英文标题】:DIfference between inline query in select clause and a join in where clause [duplicate] 【发布时间】:2014-10-18 12:02:47 【问题描述】:

有什么区别:

select e.first_name,
       e.last_name,
       e.id,
       d.dept_name
from employees e, departments d
where e.department_id = d.department_id;

select e.first_name,
       e.last_name,
       e.id,
       (select d.dept_name frpm departments d where d.department_id = e.department_id) dept_name    
from employees e;

我说的是性能、查询时间、CPU 利用率等方面的差异。 哪个更好用?

【问题讨论】:

你为什么不告诉我们?只需测试它,我们就可以讨论我们的事实。无意冒犯。 对于这两个查询,始终存在最坏情况和最佳情况的情况。您必须在数据库记录的不同条件下自行探索它们。 底部的一个为您提供员工中的记录数,如果员工:部门不是 1:1,则会出现错误。根据比赛的运作方式,排名第一的可能会给您更多或更少的员工数量。如果您设置了 FK,则不必担心,但请注意,它们可能根本不会给您相同的结果。 【参考方案1】:

第一个是inner join;返回的行是两个表中具有匹配 ID 的行。

虽然第二个会在子选择中没有共享部门 ID 的情况下为您提供 NULL,但它仍会为您提供主选择的结果

【讨论】:

以上是关于select 子句中的内联查询与 where 子句中的连接之间的差异 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 WHERE 子句中使用 SELECT 查询

UPDATE 查询的 WHERE 子句中的 SELECT 查询 [重复]

linq to sql select和where的区别

sql的嵌套查询,把一次查询的结果做为表继续进一步查询;内联视图

删除 SQL 查询中 Where 子句中的条件

1.6 在WHERE子句中引用取别名的列