子查询和连接查询一样,都提供了使用单个查询访问多个表中的数据的方法。子查询在其他查询的基础上,提供一种进一步有效的方式来访问数据。
IN 关键字
使用 IN 关键字可以将原表中特定的的值与子查询中返回的结果集中的值进行比较,如果某行特定的值存在,则在 SELECT 语句的查询结果就包含这一行。
例子: 查询部门在纽约的所有员工信息
select * from emp where deptno in ( select deptno from dept where loc = 'NEW YORK' );
以上查询语句的执行顺序为:首先执行括号内的子查询,然后再执行外层查询。
EXISTS 关键字
在使用 exists 关键字的时候,只考虑是否满足判断的条件,而数据本身是什么并不重要,在这种情况下就可以使用 EXISTS 关键字。 换句话说 EXISTS 关键字只关心子查询是否有返回值,如果有那么 EXISTS 就为 true 否则为 false.
select * from emp where exists ( select deptno from dept where loc = 'NEW YORK' );