子查询又叫嵌套查询
子查询的select 语句不能使用order by子句,order by不要只能对最终查询结果排序。
1.带IN的子查询
select * from emp where dep_id in (select id from dept id); 在子查询中的order by id排序 对最后结果无影响。
2.带ANY或ALL的子查询2
select salary from emp where id in(2,5);
select * from emp where salary
select * from emp where salary
其他操作符功能类似(=,<>,,<=,>=)。
以上用于对子查询出的集合值不明确,且子查询的值不多的情况下,不用直接获取最值而交给数据库匹配的方法。
3.EXISTS
select * from emp where EXISTS (select id from dept where dept.id=emp.dep_id);
用法: exists后面一定是子查询语句,不能用(值1,值2)代替;where exists (查询),结构中没有列;exists后面的子查询不返回任何实际数据,只返回真或假,当返回真时 where条件成立,该条记录保留。
exists (查询),只要子查询不会空 则where条件就返回真。