oracle 中 IN 和EXISTS 的用法

有2张表,结构如下:

家长表 genearch:

gid varchar2(4) primary key,
gname varchar2(10)
 

学生表 student:

stuid varchar2(4) primary key,
sname varchar2(10) not null,
gid varchar2(4)
 

其中,student表中的字段gid是表genearch的外键.

现在有个小需求,student表中有些学生是没有家长的,要求查出student表中没有家长的学生信息.

以下是2个sql:

1. 使用IN查询

SELECT S.STUID, S.SNAME
  FROM STUDENT S
 WHERE S.GID IN (SELECT gid FROM GENEARCH);
 

 2. 使用exists查询

SELECT S.STUID, S.SNAME
  FROM STUDENT S
 WHERE EXISTS (SELECT gid FROM GENEARCH WHERE s.gid=gid);
 

建议使用exists查询,因为exists查询效率比IN查询要高,原因请参阅:

http://blog.csdn.net/lick4050312/article/details/4476333

猜你喜欢

转载自xurichusheng.iteye.com/blog/1508405