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

相关推荐
赵锦川14 分钟前
css相关:input输入框中加入搜索图标
java·前端·javascript
ac-er888818 分钟前
PHP函数 func_num_args() 的作用
java·开发语言·php
周周写不完的代码1 小时前
Redis-持久化机制
数据库·redis·缓存
战神刘玉栋1 小时前
《程序猿之Redis缓存实战 · Redis 与数据库一致性》
数据库·redis·缓存
神的孩子都在歌唱3 小时前
行为设计模式 -观察者模式- JAVA
java·观察者模式·设计模式
2401_857297915 小时前
秋招内推--招联金融2025
java·前端·算法·金融·求职招聘
jnrjian5 小时前
Oracle datafile 数目限制是多少
数据库·oracle
卡布达ovo5 小时前
MongoDB入门
数据库·mongodb
-$_$-6 小时前
【黑马点评】2 商户查询缓存
java·jmeter·缓存·maven
2401_857439696 小时前
春潮涌动:构建“衣依”服装销售平台的Spring Boot之旅
java·spring boot·后端