数据库两表连接嵌套查询
时间: 2024-12-30 18:26:34 浏览: 6
### SQL 中实现两表连接
在 SQL 中,通过 `JOIN` 关键字可以实现在多个表之间建立关联并提取所需的数据。对于两个表之间的连接操作,通常有多种类型的连接方式可供选择。
#### 内连接查询
内连接返回的是满足条件的匹配行。当使用 `INNER JOIN` 时,只有那些在被联结的两个表中都存在对应关系的数据才会出现在最终的结果集中[^3]。
```sql
SELECT Student.Sno, Student.Sname, SC.Cno, SC.Grade
FROM Student INNER JOIN SC ON Student.Sno = SC.Sno;
```
这段代码展示了如何利用学生的学号 (`Sno`) 将 `Student` 表和成绩表(`SC`)相连接,并选取特定字段作为输出结果的一部分[^1]。
#### 左外连接查询
左外连接会保留左边表格中的所有记录,即使右边的表里没有对应的匹配项也会显示出来;而对于右侧不存在相应条目的情况,则会在左侧表的基础上补充NULL值来填充缺失的部分[^2]。
```sql
SELECT Student.Sno, Student.Sname, SC.Cno, SC.Grade
FROM Student LEFT OUTER JOIN SC ON Student.Sno = SC.Sno;
```
此命令将展示所有的学生信息以及他们所选修过的课程详情,即便有的同学尚未参与任何一门课的学习也不会遗漏其基本信息。
---
### 使用嵌套查询的方式访问多张表的信息
除了直接运用 `JOIN` 来处理跨表检索之外,在某些情况下还可以采用子查询的形式完成同样的目标——即在一个较大的查询内部再定义一个小范围内的查询逻辑。这种方式特别适用于需要基于某个具体条件下获取另一组数据的情形下[^4]。
下面的例子说明了怎样借助于嵌套结构去寻找由某位老师教授的所有科目下的全部学员名单:
```sql
SELECT T.name AS TeacherName, C.cname AS CourseName, S.sname AS StudentName
FROM teachers T,
courses C,
students S
WHERE T.id IN (
SELECT teacher_id FROM course_student CS WHERE CS.student_id = S.sid AND CS.course_id = C.cid
) AND T.name = 'Eastern Heretic';
```
上述脚本首先定位到名为 "Eastern Herotic" 的讲师,接着找出该教师负责讲授的所有课程编号,最后结合这些信息筛选出参加过这些课程的学生姓名列表[^5]。
阅读全文