数据库SQL真题
时间: 2025-07-04 17:47:00 浏览: 3
### 数据库 SQL 练习题与考试题
以下是关于数据库 SQL 的一些经典练习题和考试题目,涵盖了常见的操作场景:
#### 查询类题目
1. **查询所有学生的姓名及其对应的年级名称**
使用 `student` 表和 `grade` 表完成联结查询。
```sql
SELECT s.stu_name, g.grade_name
FROM student s
INNER JOIN grade g ON s.id_grade = g.grade_id;
```
2. **查询每门科目的平均分**
结合 `score` 和 `subjects` 表计算各科目的平均分。
```sql
SELECT sub.subjects_name, AVG(s.score) AS average_score
FROM score s
INNER JOIN subjects sub ON s.id_subjects = sub.subjects_id
GROUP BY sub.subjects_name;
```
3. **查询选修了所有课程的学生学号和姓名**
参考提供的例子[^2],可以扩展如下:
```sql
SELECT DISTINCT st.stuno, st.stu_name
FROM score sc
INNER JOIN student st ON sc.stuno = st.stu_id
GROUP BY sc.stuno, st.stu_name
HAVING COUNT(DISTINCT sc.id_subjects) >= (
SELECT COUNT(subjects_id) FROM subjects
);
```
4. **查询每个年级的总人数**
对 `student` 表按年级进行统计。
```sql
SELECT id_grade, COUNT(stu_id) AS total_students
FROM student
GROUP BY id_grade;
```
5. **查询成绩大于等于 90 分的学生信息**
这是一个简单的条件过滤查询。
```sql
SELECT st.*, sc.score
FROM student st
INNER JOIN score sc ON st.stu_id = sc.stuno
WHERE CAST(sc.score AS DECIMAL) >= 90;
```
---
#### 更新与删除类题目
6. **更新某位学生的密码为新值**
假设要将学生编号为 `'S001'` 的密码更改为 `'newpassword'`。
```sql
UPDATE student SET STU_password = 'newpassword' WHERE stu_id = 'S001';
```
7. **删除某个特定电话号码的记录**
删除电话号码为 `'13937745615'` 的客户记录。
```sql
DELETE FROM customer WHERE tel = '13937745615';
```
8. **批量插入班级数据**
插入多个班级的数据到 `clazz` 表中。参考[^3]中的方法:
```sql
INSERT INTO clazz (class_name, teacher_name, class_level) VALUES
('班级A', '王老师', '一年级'),
('班级B', '李老师', '二年级');
```
---
#### 聚合函数与排序类题目
9. **求所有员工的平均年龄**
计算 `person` 表中员工的平均年龄。
```sql
SELECT AVG(age) AS average_age FROM person;
```
10. **按照出生日期升序排列学生信息**
排序时使用 `ORDER BY` 子句。
```sql
SELECT * FROM student ORDER BY birthday ASC;
```
11. **统计各部门的员工数量**
按部门 ID 分组并计数。
```sql
SELECT department_id, COUNT(name) AS employee_count
FROM person
GROUP BY department_id;
```
---
#### 复杂连接类题目
12. **查询每位教师所带班级的信息**
将教师表与班级表通过外键关联起来。假设存在 `teacher` 和 `clazz` 表。
```sql
SELECT t.teacher_name, c.class_name
FROM teacher t
LEFT JOIN clazz c ON t.teacher_id = c.teacher_id;
```
13. **查询每个年级中最年轻的三位学生**
需要用子查询实现排名功能。
```sql
SELECT stu_id, stu_name, id_grade, birthday
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY id_grade ORDER BY birthday DESC) rn
FROM student
) temp
WHERE rn <= 3;
```
---
###
阅读全文
相关推荐


















