文章目录
前言
开篇感言
第一次发文章,源于今天下午上课时,相关子查询讲得台下学生一脸懵逼。为了不误人子弟与自己卑微的尊严,故有此文 。如果还没懂,随时找我,欢迎留言。
一些说明
本文所用概念与示例大多引用自王珊老师的《数据库系统概论》第5版,部分原创。
以下是本篇文章正文内容
数据表
1、Student(学生表)
Sno | Sname | Ssex | Sage | Sdept |
---|---|---|---|---|
201215121 | 李勇 | 男 | 20 | CS |
201215122 | 刘晨 | 女 | 19 | CS |
201215123 | 王敏 | 女 | 18 | MA |
201215125 | 张立 | 男 | 19 | IS |
2、Course(课程表)
Cno | Cname | Cpno | Ccredit |
---|---|---|---|
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | 2 | |
7 | PASCAL语言 | 6 | 4 |
3、SC(选课表/成绩表)
Sno | Cno | Grade |
---|---|---|
201215121 | 1 | 92 |
201215121 | 2 | 85 |
201215121 | 3 | 88 |
201215122 | 2 | 90 |
201215122 | 3 | 88 |
一、子查询(subquery)
查询块:在SQL语言中,一个"SELECT-FROM-WHERE"语句称为一个查询块。
嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询(nested query)。
例1:查询选择了2号课程的学生姓名(数据表见上文)
SELECT Sname /*外层查询或父查询*/
FROM Student
WHERE Sno IN
(
SELECT Sno /*内层查询或子查询*/
FROM SC
WHERE Cno = '2'
)
例1中,下层查询块被嵌套于上层查询的WHERE条件中,其中下层查询称为内层查询或子查询,上层查询称为外层查询或父查询。
二、不相关子查询(unrelated subqueries)
1.概念
不相关子查询<