常用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。加油!美好的风景一直在路上!

相关推荐
卡尔特斯21 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源21 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole21 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫1 天前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide1 天前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户3721574261351 天前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源1 天前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
薛定谔的算法1 天前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Java中文社群1 天前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心1 天前
从零开始学Flink:数据源
java·大数据·后端·flink