1.查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;
嵌套 SELECT * FROM S WHERE SAGE <> (SELECT SAGE FROM S WHERE SNAME=’ 张力’)
2.带有IN谓词的子查询(NOT IN)
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='刘晨');
查询选修了课程名为“信息系统”的学生学号和姓名
SELECT Sno,Sname /最后在Student关系中取出Sno和Sname/
FROM Student
WHERE Sno IN
(SELECT Sno /然后在SC关系中找出选修了3号课程的学生学号/
FROM SC
WHERE Cno IN
(SELECT Cno /首先在Course关系中找出“信息系统”的课程号,结果为3号/
FROM Course
WHERE Cname='信息系统'
)
);
内查询独立于外查询,称为不相关子查询
本查询同样可以用连接查询实现:
SELECT Student.Sno,Sname
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND
SC.Cno=Course.Cno AND
Course.Cname='信息系统';
查询没有选修“CO2"课程的学生姓名
select sname
from s
where sno not in
(select sno
from sc
where cno='CO2')
- 带有比较运算符的子查询
带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单个值时,可以用 >、<、=、>=、<=、!=、或<>等比较运算符。
找出每个学生超过他自己选修课程平均成绩的课程号
SELECT Sno,Cno
FROM SC X
WHERE Grade >=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
内层查询不能独立实现,称为相关子查询