在平常的开发工作中,我们经常会遇到列表查询、数据统计等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。加油!美好的风景一直在路上!