常用sql语句练习(二):学生表、课程表、成绩表

在平常的开发工作中,我们经常会遇到列表查询、数据统计等sql的编写,那么,常用的sql语句都有哪些呢?

建表语句:

sql 复制代码
-- 学生表
CREATE TABLE s_students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(50) NOT NULL,
    gender VARCHAR(10),
    age INT
);
 
-- 课程表
CREATE TABLE s_courses (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(50) NOT NULL,
    teacher VARCHAR(50),
    credit INT
);
 
-- 成绩表
CREATE TABLE s_grades (
    student_id INT,
    course_id INT,
    score INT,
    PRIMARY KEY (student_id, course_id)
);

1:查询每门课程的最高成绩及学生姓名和课程名:

sql 复制代码
select ss.student_name,
sc.course_name,
max(sg.score) 
from s_students ss 
left join  s_grades sg on ss.student_id = sg.student_id 
left join s_courses sc on sg.course_id = sc.course_id
GROUP BY sg.course_id

2:查询每门课程的前三名成绩、学生姓名及课程名:

sql 复制代码
WITH rankGrades AS (
    SELECT
        ss.student_name,
        sc.course_name,
        sg.score,
        ROW_NUMBER() OVER(PARTITION BY sg.course_id ORDER BY sg.score DESC) as number
        from s_students ss 
        left join  s_grades sg on ss.student_id = sg.student_id
		left join s_courses sc on sg.course_id = sc.course_id
)
SELECT
    student_name,
    course_name,
    score
FROM
    rankGrades
WHERE
    number <= 3;

运行结果:

3:查询每个同学成绩的最高分、姓名及课程名:

sql 复制代码
select ss.student_name,
sc.course_name,
max(sg.score) 
from s_students ss 
left join  s_grades sg on ss.student_id = sg.student_id 
left join s_courses sc on sg.course_id = sc.course_id
GROUP BY sg.student_id

运行结果:

4:查询每个同学的成绩,同一个同学的成绩排在一起,成绩由高到低显示:

sql 复制代码
select ss.student_name,
sc.course_name,sg.score 
from s_students ss 
left join  s_grades sg on ss.student_id = sg.student_id 
left join s_courses sc on sg.course_id = sc.course_id
GROUP BY sg.student_id,sg.course_id 
ORDER BY ss.student_name desc,sg.score desc;

运行结果:

5:求各科成绩的最高分、最低分、平均分和总分:

sql 复制代码
select max(sg.score),
min(sg.score),
round(avg(sg.score), 1),
sum(sg.score) 
from s_grades sg 
left join s_courses sc on sg.course_id = sc.course_id 
GROUP BY sg.course_id

运行结果:

以上为常用sql。加油!美好的风景一直在路上!

相关推荐
小羊没烦恼!11 小时前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里12 小时前
java中的继承和多态的区别
java
小羊没烦恼!12 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕12 小时前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码12 小时前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖12 小时前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时13 小时前
01-06-A-JVM排查实战详解
java·jvm
这个DBA有点耶13 小时前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
vipxieliang13 小时前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
DBA_G13 小时前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库