学习笔记-SQL语法系统性学习,关卡式进阶
笔记参考:作者鱼皮 关卡式Sql语句学习体验网站 ,网站开源代码
如果想本地体验语法:1.下载大佬开源代码,运行前端项目(推荐);
2.或是自己使用Sql工具,简单体验以下语法体验
使用MariaDB工具练习SQL语句教程
-- `student`
create table if not exists `student`
(
`id` integer not null primary key AUTOINCREMENT,
`name` varchar(256) not null,
`age` int null,
`class_id` bigint not null,
`score` double default 0 null,
`exam_num` int default 0 null
);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('鸡哥', 25, 1, 2.5, 1);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('鱼皮', 18, 1, 400, 4);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('热dog', 40, 2, 600, 4);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('摸FISH', null, 2, 360, 4);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('李阿巴', 19, 3, 120, 2);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('老李', 56, 3, 500, 4);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('李变量', 24, 4, 390, 3);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('王加瓦', 23, 4, 0, 4);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('赵派森', 80, 4, 600, 4);
insert into `student` (`name`, `age`, `class_id`, `score`, `exam_num`)
values ('孙加加', 60, 5, 100.5, 1);
select * from student
select name, age from student;
select name as 学生姓名, age as 学生年龄 from student;
select name , score, score * 2 as double_score from student;
select name , score from student where name ='鱼皮'
select name , age from student where name != '热dog'
select name , age , score from student where age is not null
select name , score from student where name not like '%李%'
select name , score from student where name like '%李%' or score > 500
select distinct class_id , exam_num from student
select name , age , score from student order by score desc , age asc
select name , age from student order by age asc limit 1 , 3
select name , case when (age > 60) then '老同学'
when (age >= 20) then '年轻' else '小同学' end as age_level
from student order by name asc
select name , date() as 当前日期 from student
select id , name , upper(name) as upper_name from student where name = '热dog'
select sum(score) as total_score , avg(score) as avg_score , max(score) as max_score, min(score)
as min_score from student
select class_id , avg(score) as avg_score from student group by class_id
select class_id ,exam_num, count (*) as total_num from student group by class_id ,exam_num
select class_id, sum(score) as total_score from student group by class_id having sum(score) > 150
select s.name as student_name , s.age as student_age,
s.class_id , c.name as class_name from student s cross join class c;
select s.name as student_name , s.age as student_age , s.class_id ,
c.name as class_name, c.level as class_level from student s
join class c on s.class_id = c.id;
select s.name as student_name, s.age as student_age, s.class_id , c.name as class_name,
c.level as class_level from student s left join class c on s.class_id = c.id
select name , score , class_id from student where class_id
in (select id as class_id from class )
select name ,age , class_id from student
where not exists( select * from class where student.class_id = class.id)
select name ,age ,score, class_id from student
union all
select name, age ,score, class_id from student_new
开窗是一种强大的查询工具,它允许我们保留原始详细信息,且能进行对分组数据进行计算,拼接在每条数据上。像一个透视镜一样,能聚焦在特定分组展示了全部信息
select id , name , age, score, class_id ,
avg(score) over (partition by class_id) as class_avg_score
from student
累计求和
select id , name , age , score , class_id,
sum(score) over (partition by class_id order by score asc) as class_sum_score
from student
select id , name , age , score , class_id ,
rank() over (partition by class_id order by score desc) as ranking
from student
与rank的区别,行号唯一,相同也递增
select id , name , age , score , class_id,
row_number() over (partition by class_id order by score desc) as row_number
from student
查看左/右情况
select id , name , age , score , class_id ,
lag(name ,1, null) over (partition by class_id order by score desc) as prev_name,
lead(name, 1,null) over (partition by class_id order by score desc) as next_name
from student
声明:文章只供学习,创造价值,乐哉分享!
一起入门后端 204146007