exists&&in

来源:互联网 发布:知乎每日精选接口 编辑:程序博客网 时间:2024/06/16 16:45

exists&in
表a,表b:字段都是number,varchar
SQL> select * from a;

        ID NAME
---------- ----------
         1 loge0001
         2 py
         3 loge0001
         4 loge0001
         5 py
         6 aaaa
         7 bbbb

已选择7行。

SQL> select * from b;

        ID NAME
---------- ----------
         1 loge0001
         2 py
         3 loge0001
         4 loge0001
         5 py
         6 aaaa
         7 cccc
子查询1,使用exists
查找a和b表中相同的名字的记录;
SQL> select * from a where exists(select * from b where a.name=b.name);

        ID NAME
---------- ----------
         4 loge0001
         3 loge0001
         1 loge0001
         5 py
         2 py
         6 aaaa
子查询2,使用in:
SQL> select * from  a where name in (select name from b );

        ID NAME
---------- ----------
         4 loge0001
         3 loge0001
         1 loge0001
         5 py
         2 py
         6 aaaa

但是使用这个查询就查不出来:
SQL> select * from a where exists(select * from b);

        ID NAME
---------- ----------
         1 loge0001
         2 py
         3 loge0001
         4 loge0001
         5 py
         6 aaaa
         7 bbbb
执行原理就是,首先对于a表的每个元素执行子查询,这样如果没有限制条件,就查询了所有a中的记录

另外比如删除a表中的记录:
delete from a where id in (select max(id) from a group by name having count(*)>1)

删除表a中重复记录的两外方法
2、delete from a where id not in ( selec max(id) from a group by name)
3、导出到临时表,然后操作

0 0
原创粉丝点击