很多时候需要将一列值和一系列的值做比较。最简单的办法就是在WHERE子句中使用子查询。
使用子查询有IN和EXISTS两种形式。几乎所有使用IN操作符的子查询都可以改变为使用EXISTS的子查询。
在绝大多数情况下EXISTS要比IN的效率高,因为EXISTS执行的是semijoin,所以在一些情况下,
不必遍历子查询表中的所有行。
-
--使用IN,访问路径选择的是hash join
-
select first_name, last_name, department_id from employees
-
where department_id in (select department_id from departments where location_id <= 1700);
-
--使用EXISTS,访问路径选择的是hash join semi
-
select e.first_name, e.last_name, e. department_id from employees e
-
where exists (select 1 from departments d where d.department_id = e.department_id and d.location_id <= 1700);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1070169/
,如需转载,请注明出处,否则将追究法律责任。