知道exists 是替代 IN 的好方法
对与一个对应的条件的查询,比如通过一个no
select * from A WHERE exists (select B.no from B Where A.no = B.no)要是两个条件的呢? 比如一个no,还需要一个 CLASS
能否写成
select * from A WHERE exists (select B.no ,B.CLASS from B Where A.no = B.no and A.class=B.class )?
对与一个对应的条件的查询,比如通过一个no
select * from A WHERE exists (select B.no from B Where A.no = B.no)要是两个条件的呢? 比如一个no,还需要一个 CLASS
能否写成
select * from A WHERE exists (select B.no ,B.CLASS from B Where A.no = B.no and A.class=B.class )?
select * from A WHERE exists (select B.no ,B.CLASS from B Where A.no = B.no and A.class=B.class ) 在子查询里,你select 的字段列多少只会和语法分析有关,不会影响到其他结果,主要看的是查询条件
--参考一下,有时自已多动手试一试。SQL> select * from tabcopy3; ID NAME SAL BIRTHDATE
---------- -------- ---------- -----------
1 张三 5
15 李四 2
1 王五 3
15 王大麻 4
2 赵六 15 1980-8-86 rows selectedSQL> select * from tabcopy4; ID NAME
---------- --------
1 张三
2 李四
3 王五1
4
赵六SQL> select * from tabcopy3 a where exists(select * from tabcopy4 b where a.id=b.id); ID NAME SAL BIRTHDATE
---------- -------- ---------- -----------
1 张三 5
1 王五 3
2 赵六 15 1980-8-8SQL> select a.* from tabcopy3 a, tabcopy4 b where a.id=b.id; ID NAME SAL BIRTHDATE
---------- -------- ---------- -----------
1 张三 5
1 王五 3
2 赵六 15 1980-8-8SQL>
若真要是你说的这样,ORACLE还要IN干什么?
用IN或者是用EXISTS主要取决于结果集数据量的多少!并不是说所有地方用EXISTS都是最快的!
其他的如楼上诸位所说!
对的,只不过是大多数情况下,EXISTS快点