mysql数据库多表查询上机操作题
时间: 2025-07-20 08:09:08 浏览: 11
### 多表查询练习题及操作示例
以下是一些 MySQL 多表查询的练习题和操作示例,帮助理解和掌握多表查询的技巧。
#### 1. 笛卡尔积(或交叉连接)
笛卡尔积是两个表的组合,其中第一个表的每一行与第二个表的每一行组合。这种连接方式通常不是实际查询所需要的,除非有特定需求。
示例:
```sql
SELECT * FROM Student, SC;
```
这个查询会返回 `Student` 表和 `SC` 表的笛卡尔积结果[^1]。
#### 2. 内连接(INNER JOIN)
内连接用于返回两个表中匹配的行。
示例:
```sql
SELECT Student.Sname, SC.score
FROM Student
INNER JOIN SC ON Student.SID = SC.SID;
```
这个查询会返回所有有成绩的学生姓名和对应的成绩[^2]。
#### 3. 左连接(LEFT JOIN)
左连接返回左表的所有行,即使右表没有匹配的行,右表的字段会显示为 NULL。
示例:
```sql
SELECT Student.Sname, SC.score
FROM Student
LEFT JOIN SC ON Student.SID = SC.SID;
```
这个查询会返回所有学生的姓名,即使他们没有成绩记录[^2]。
#### 4. 右连接(RIGHT JOIN)
右连接返回右表的所有行,即使左表没有匹配的行,左表的字段会显示为 NULL。
示例:
```sql
SELECT Student.Sname, SC.score
FROM Student
RIGHT JOIN SC ON Student.SID = SC.SID;
```
这个查询会返回所有成绩记录,即使没有对应的学生记录。
#### 5. 全连接(FULL JOIN)
全连接返回两个表中的所有行,当某表没有匹配时,另一表的字段会显示为 NULL。MySQL 不支持 FULL JOIN,但可以通过 UNION 实现。
示例:
```sql
SELECT Student.Sname, SC.score
FROM Student
LEFT JOIN SC ON Student.SID = SC.SID
UNION
SELECT Student.Sname, SC.score
FROM Student
RIGHT JOIN SC ON Student.SID = SC.SID;
```
这个查询会返回所有学生和成绩记录,没有匹配的部分显示为 NULL[^2]。
#### 6. 子查询
子查询是在另一个查询语句中使用的查询。
示例:
```sql
SELECT Sname
FROM Student
WHERE SID IN (SELECT SID FROM SC WHERE score > 80);
```
这个查询会返回所有成绩大于 80 的学生的姓名[^4]。
### 实验题目
#### 实验题目1:查找所有有成绩的学生信息
编写一个 SQL 查询,查找所有有成绩的学生信息。
#### 实验题目2:查找所有学生的成绩信息
编写一个 SQL 查询,查找所有学生的成绩信息,即使他们没有成绩记录。
#### 实验题目3:查找所有成绩记录对应的学生信息
编写一个 SQL 查询,查找所有成绩记录对应的学生信息,即使没有学生记录。
#### 实验题目4:查找成绩大于80分的学生姓名
编写一个 SQL 查询,查找成绩大于 80 分的学生姓名。
#### 实验题目5:查找所有学生及其成绩
编写一个 SQL 查询,查找所有学生及其成绩,没有成绩的部分显示为 NULL。
阅读全文
相关推荐




















