exists 和 in 区别二

 

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.使用子查询的结果来确定外部查询的结果集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值