日期:2014-05-16  浏览次数:20524 次

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

?

?

?