这些查询是否相同?

时间:2015-05-11 22:58:03

标签: sql oracle

以下从人力资源部门获取员工的方式有任何利弊吗?特别是从绩效角度来看?

--1
select * from employee emp
join department dep on emp.depId = dep.id and dep.name = 'HR';

--2
select * from employee emp
join (select * from department dep where dep.name='HR') d
on emp.depId = d.id;

--3
select * from employee emp
join department dep on emp.depId = dep.id 
where dep.name = 'HR';

P.S。它们都有相同的查询计划和成本

1 个答案:

答案 0 :(得分:-1)

--1
select * from employee emp
join department dep on emp.depId = dep.id and dep.name = 'HR';
  1. 对我来说,这是最好的查询,因为您将来自员工的数据与来自部门的数据为HR命名的部门进行匹配。因此,您可以限制联接中department表中的数据。

    - 2 从员工emp中选择* 加入(从部门dep中选择*,其中dep.name =' HR')d 在emp.depId = d.id;

  2. 这是最糟糕的查询,因为子查询对于RDBMS来说总是很昂贵。所以首先RDBMS将执行子查询,然后将其与employee表匹配。使用3个完整阅读表。

    - 3 从员工emp中选择* 在emp.depId = dep.id上加入部门dep dep.name =' HR';

  3. 这是几乎每个人都会写的选项,如果您看到执行计划,它会转换为1。

相关问题