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

相关推荐
程序员黑豆34 分钟前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
hey_sml2 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo2 小时前
数据结构-环形链表
java·数据结构·链表
萧瑟余晖3 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
IvorySQL4 小时前
PostgreSQL 日报 | JOIN 与外键优化(8 月 9 日)
数据库·postgresql
是未才4 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ltl4 小时前
自治数据库十年回顾:Peloton、NoisePage、OtterTune 到云原生 auto-tuning
数据库
ttod_qzstudio4 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖5 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
灯澜忆梦6 小时前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化