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

相关推荐
SelectDB技术团队2 分钟前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光21 分钟前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓120124 分钟前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
天天摸鱼的java工程师26 分钟前
Java 解析 JSON 文件:八年老开发的实战总结(从业务到代码)
java·后端·面试
白仑色27 分钟前
Spring Boot 全局异常处理
java·spring boot·后端·全局异常处理·统一返回格式
染落林间色31 分钟前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
喵手33 分钟前
反射机制:你真的了解它的“能力”吗?
java·后端·java ee
kaika144 分钟前
告别复杂配置!使用 1Panel 运行环境功能轻松搭建 Java 应用
java·1panel·建站·halo
有梦想的攻城狮1 小时前
Java 11中的Collections类详解
java·windows·python·java11·collections
颜颜yan_1 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库