
例 已知S(Sno,Sname,Age,Sex),SC(Sno,Cno,Score)
查询要求: 检索选修C2课的学生学号与姓名。
第1种写法(连接查询):
SELECT S.Sno, Sname
FROM S,SC
WHERE S.Sno=SC.Sno AND Cno='C2';
第2种写法(嵌套查询1):
SELECT Sno, Sname
FROM S
WHERE Sno IN (
SELECT Sno
FROM SC
WHERE Cno='C2');
第3种写法(嵌套查询2)
SELECT Sno,Sname
FROM S
WHERE 'C2' IN (
SELECT Cno
FROM SC
WHERE Sno=S.Sno);
第4种写法(使用存在量词的嵌套查询):
SELECT Sno, Sname
FROM S
WHERE EXISTS(
SELECT *
FROM SC
WHERE SC.Sno=S.Sno AND Cno='C2');
第5种写法 使用自然连接
SELECT Sno,Sname
FROM S NATURAL JOIN SC
WHERE Cno='C2';
第6种写法 使用on引导的等值连接
select s.sno,sname
from s join sc on s.sno=sc.sno
where cno='C2';
第7种写法 使用USING()引导的等值连接
select sno,sname
from s join sc using(sno)
where cno='C2';
第8种写法
SELECT Sno,Sname
FROM S
NATURAL JOIN
(SELECT Sno FROM SC WHERE Cno='C2');
第9种写法
select s.sno,sname
from s join
(SELECT Sno FROM SC WHERE Cno='C2')X
on s.sno=X.sno;
第10种写法
select sno,sname
from s join
(SELECT Sno FROM SC WHERE Cno='C2')
using(sno);
第11种写法
select * from
(select sno,sname from s)
natural join
(select sno from sc where cno='C2');
第12种写法
select * from
(select sno,sname from s)
join
(select sno from sc where cno='C2')
using(sno);
第13种写法
select X.sno,sname from
(select sno,sname from s)X
join
(select sno from sc where cno='C2')Y
on X.sno=Y.sno;
结果为:





