```markdown
在数据库查询中,我们经常需要从多个表中筛选出符合特定条件的数据。假设有一个名为sc
的成绩表,存储了学生的学号、课程号、成绩等信息。如果我们希望查询出平均成绩大于等于85的所有学生的学号、姓名和平均成绩,可以通过SQL语句来实现。
假设sc
表的结构如下:
| 字段名 | 数据类型 | 描述 | |----------|-----------|----------| | 学号 | VARCHAR | 学生的学号 | | 课程号 | VARCHAR | 课程的编号 | | 成绩 | DECIMAL | 该学生在该课程中的成绩 |
此外,假设有一个student
表,包含了学生的详细信息,如下所示:
| 字段名 | 数据类型 | 描述 | |----------|-----------|----------| | 学号 | VARCHAR | 学生的学号 | | 姓名 | VARCHAR | 学生的姓名 |
我们要查询出所有学生的学号、姓名和平均成绩,并且平均成绩要大于等于85。
为实现该查询,首先我们需要计算每个学生的平均成绩,并且筛选出平均成绩大于等于85的学生。查询语句如下:
sql
SELECT s.学号, st.姓名, AVG(sc.成绩) AS 平均成绩
FROM sc sc
JOIN student st ON sc.学号 = st.学号
GROUP BY s.学号, st.姓名
HAVING AVG(sc.成绩) >= 85;
FROM sc sc
: 选择成绩表sc
。JOIN student st ON sc.学号 = st.学号
: 将成绩表与学生表student
按学号进行连接。SELECT s.学号, st.姓名, AVG(sc.成绩) AS 平均成绩
: 选择学号、姓名和平均成绩。GROUP BY s.学号, st.姓名
: 按学号和姓名分组,以便计算每个学生的平均成绩。HAVING AVG(sc.成绩) >= 85
: 过滤出平均成绩大于等于85的学生。执行以上SQL查询后,返回的结果将是所有符合条件的学生的学号、姓名和他们的平均成绩,类似如下表格:
| 学号 | 姓名 | 平均成绩 | |--------|--------|----------| | 2021001| 张三 | 88.5 | | 2021005| 李四 | 90.0 | | 2021009| 王五 | 87.2 |
通过以上SQL查询,我们成功筛选出了平均成绩大于等于85的学生,并且显示了他们的学号、姓名和平均成绩。这是一个简单的数据库查询应用,利用了JOIN
、GROUP BY
和HAVING
子句来完成数据的筛选与汇总。
```