第5章数据查询
——子查询
子查询
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。子查询的结果用来作为另一个查询的参数。
子查询称为内部查询或内部选择,包含子查询的语句称为外部查询或外部选择。
例:查询选修了C2课程的学生姓名。
SELECT SNAME
FROM STUDENT
WHERE SNO IN (SELECT SNO
FROM S_C
O='C2')
SELECT SNAME
FROM STUDENT,S_C
WHERE =
AND O='C2'
★子查询包括以下组件:
包含选择列表组件的常规SELECT子句。
包含一个或多个表名称的常规FROM子句。
可选的WHERE 、GROUP BY、HAVING子句。
注:只有指定了top时才能使用order by 子句,
不能包含into子句。
★子查询所在位置:
子查询可以嵌套在外部SELECT语句的SELECT、WHERE或HAVING子句内,也可以嵌套在其他子查询内。
【例】从TEACHER表中查询所有教师的教工号、姓名、所在系、课程号以及在STUDENT1表中修了这门课程的学生的人数。
SELECT TNO,TNAME,O,
(SELECT COUNT(*) FROM STUDENT1
O=O)
AS S_NUM
FROM TEACHER
1. 用比较运算符引入的子查询。
3. 用IN和NOT IN引入的子查询。
2. 用ANY 、SOME或 ALL修改的比较运算符引入的子查询。
4. 用EXISTS或 NOT EXISTS引入的子查询。
子查询引入方式:
IN的子查询:
该子查询结果是包含零个值或多个值。
【例】。
O
FROM STUDENT1
WHERE MARK=
结果:12
AME
FROM COURSE1
O
= '12'
IN(
)
【例】从STUDENT1表中查询同时修过了1号和10号课程的学生的学号、姓名、所在系信息。
SELECT SNO,SNAME,DNAME
FROM STUDENT1
O='1'
AND SNO IN
(SELECT SNO
FROM STUDENT1
O= '10')
【练习1】从STUDENT1表中查询存在不及格课程的学生的姓名、所在系、所有的课程号及成绩信息。
【练习2】从STUDENT1表中查询修过了1号但没有修10号课程的学生的学号、姓名、所在系信息。
SELECT SNO,SNAME,DNAME
FROM STUDENT1
O='1'
AND SNO NOT IN (SELECT SNO
FROM STUDENT1
O='10')
SELECT SNAME,O,MARK
FROM STUDENT1
WHERE SNO IN (SELECT SNO
FROM STUDENT1
WHERE MARK<60)
第5章 查询(5)-子查询 来自淘豆网m.daumloan.com转载请标明出处.