数据库关系代数和SQL练习题
时间: 2025-01-02 07:19:54 浏览: 14
### 数据库关系代数与SQL练习题
#### 示例题目1:查找特定条件的学生信息
假设有一个学生表 `Students`,其结构如下:
| 学号 (ID) | 姓名 (Name) | 年龄 (Age) | 性别 (Gender) |
|--|
| 001 | Alice | 20 | F |
| 002 | Bob | 22 | M |
| 003 | Charlie | 21 | M |
##### 使用关系代数表示:
选择年龄大于等于21岁的男性学生的学号和姓名。
\[ \sigma_{\text{Age} \geq 21 \land \text{Gender} = 'M'}(\pi_{\text{ID}, \text{Name}} (\text{Students})) \]
##### 对应的SQL语句:
```sql
SELECT ID, Name FROM Students WHERE Age >= 21 AND Gender = 'M';
```
---
#### 示例题目2:统计各科成绩平均分
假设有两个表:`Courses` 和 `Grades`。其中 `Courses` 表存储课程信息,而 `Grades` 表记录了每位学生每门课的成绩。
`Courses` 表结构如下:
| 课程编号 (CourseID) | 课程名称 (CourseName) |
|---------------------|-----------------------|
| C001 | 数学 |
| C002 | 英语 |
| C003 | 物理 |
`Grades` 表结构如下:
| 学生编号 (StudentID) | 课程编号 (CourseID) | 成绩 (Score) |
|--|---------------------|--------------|
| S001 | C001 | 85 |
| S001 | C002 | 90 |
| S002 | C001 | 78 |
| S002 | C003 | 88 |
##### 使用关系代数表示:
计算每一门课程的平均分数,并显示课程名及其对应的平均分。
\[ \pi_{\text{CourseName}, \overline{\text{Score}}} (\rho_{\text{AverageScore}} ((\gamma_{\text{CourseID}; \overline{\text{Score}}} (\text{Grades}) ) ⋈ \text{Courses})) \]
##### 对应的SQL语句:
```sql
SELECT Courses.CourseName, AVG(Grades.Score) AS AverageScore
FROM Grades JOIN Courses ON Grades.CourseID = Courses.CourseID
GROUP BY Courses.CourseName;
```
---
#### 示例题目3:查询选修了某门课程的所有学生名单
继续沿用上述表格定义。
##### 使用关系代数表示:
找出所有选修了物理这门课的学生的名字。
\[ \pi_{\text{Name}}((\sigma_{\text{CourseName}='物理'}(\text{Courses}) ⋈ \text{Grades}) ⋈ \text{Students}) \]
##### 对应的SQL语句:
```sql
SELECT DISTINCT s.Name
FROM Students s
JOIN Grades g ON s.ID = g.StudentID
JOIN Courses c ON g.CourseID = c.CourseID
WHERE c.CourseName = '物理';
```
阅读全文