select * from A where id in(1,2,3); --id在可选范围中去取值.
select * from A where id in(select id from B);-- 选出A表与B表中id相等的数据,等价于select A.* from A,B where A.id=B.id
select * from A where exists(select 1 from B where B.id = A.id); --表达的意思与上面一条语句相同,属相关子查询过滤条件为每次遍历外层查询的结果集与子查询匹配,如果子查询还有其他过滤条件则先过滤子查询,再与其匹配
--当两个表以2个字段以上进行比较时,用exists进行表达则比用in表达方便,如下面一条语句:
select * from A where exists(select 1 from B where B.id = A.id and B.pno = A.pno);
相关子查询与普通子查询的区别在于:相关子查询引用了外部查询中的列!这种用外部查询来限制子查询的方法使
SQL查询变得更加强大和灵活。因为相关子查询能够引用外部查询,所以它们尤其适合编写复杂的where条件!
相关子查询不能自己单独运行,其执行顺序如下:
1.首先执行一次外部查询
2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
3.使用子查询的结果来确定外部查询的结果集