SQL语法系统性学习,关卡式进阶-学习笔记

学习笔记-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);

1、基础语法 - 查询 - 全表查询
select * from student
2、基础语法 - 查询 - 选择查询
select name, age from student;
3、基础语法 - 查询 - 别名
select name as 学生姓名, age as 学生年龄 from student;
4、基础语法 - 查询 - 常量和运算
select name , score, score * 2 as double_score from student;
5、基础语法 - 条件查询 - where
select name , score from student where name ='鱼皮'
6、基础语法 - 条件查询 - 运算符
select name , age from student where name != '热dog'
7、基础语法 - 条件查询 - 空值
select name , age , score from student where age is not null
8、基础语法 - 条件查询 - 模糊查询
select name , score from student where name not like '%李%'
9、基础语法 - 条件查询 - 逻辑运算
select name , score from  student where  name like '%李%' or score > 500
10、基础语法 - 去重
select distinct class_id , exam_num from student
11、基础语法 - 排序
select name , age , score from student order by score desc , age asc
12、基础语法 - 截断和偏移
select name , age from student order by age asc limit 1 , 3
13、基础语法 - 条件分支
select name , case when (age > 60) then '老同学'
 when (age >= 20) then '年轻' else  '小同学' end as age_level
from student order by name asc

14、函数 - 时间函数
select name , date() as 当前日期 from student
15、函数 - 字符串处理
select id ,  name , upper(name) as upper_name from student where  name = '热dog'
16、函数 - 聚合函数
select sum(score) as total_score , avg(score) as avg_score , max(score) as max_score, min(score)
as min_score from student
17、分组聚合 - 单字段分组
select class_id , avg(score) as avg_score from student group by class_id
18、分组聚合 - 多字段分组
select class_id ,exam_num, count (*) as total_num from student group by class_id ,exam_num

19、分组聚合 - having 子句

select class_id, sum(score) as total_score from student group by class_id having sum(score) > 150


20、查询进阶 - 关联查询 - cross join
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;

21、查询进阶 - 关联查询 - inner join
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;
22、查询进阶 - 关联查询 - outer join
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
23、查询进阶 - 子查询
select name , score , class_id from student  where class_id
in (select id as class_id from class )

24、查询进阶 - 子查询 - exists
select name ,age , class_id from student
where not exists( select * from class where student.class_id = class.id)

24、查询进阶 - 组合查询

select name ,age ,score, class_id from student
union all
select name, age ,score, class_id from student_new
26、查询进阶 - 开窗函数 - sum over

开窗是一种强大的查询工具,它允许我们保留原始详细信息,且能进行对分组数据进行计算,拼接在每条数据上。像一个透视镜一样,能聚焦在特定分组展示了全部信息

select id , name , age, score, class_id ,
avg(score) over (partition by class_id) as  class_avg_score
from student
27、查询进阶 - 开窗函数 - sum over order by

累计求和

select id , name , age , score , class_id,
sum(score) over  (partition by class_id order by score asc) as class_sum_score
from student
28、查询进阶 - 开窗函数 - rank
select id , name , age , score , class_id ,
rank() over (partition by class_id order by score desc) as ranking
from student
28、查询进阶 - 开窗函数 - row_number

与rank的区别,行号唯一,相同也递增


select id , name , age , score , class_id,
row_number() over (partition by class_id order by score desc) as row_number
from student


30、查询进阶 - 开窗函数 - lag / lead

查看左/右情况

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值