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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[云原生] Docker 入门指南:镜像、容器、卷和网络解析

Docker 是一种流行的容器化平台,它以其强大的功能和易用性在软件开发和部署领域广受欢迎。本文将带领您逐步探索 Docker 中的四个核心概念:镜像、容器、卷和网络。通过了解这些概念的是什么、为什么以及如何使用,您将能够更好地理解和利用 Do…

strings

在Go语言中,strings 包提供了许多用于处理字符串的函数。以下是一些常见的用法: 字符串拼接: package mainimport ("fmt""strings" )func main() {str1 : "Hello"str2 : "World"result : strings.Jo…

行为树保姆级教程(以机器人的任务规划为例

行为树 目录 什么是行为树(behavior tree)?行为树的相关术语 行为节点和控制节点不同类型的控制结点: 顺序节点选择节点并行节点装饰结点 机器人的例子:物体搜索 1:如果只存在一个地点A,那么行为树很简单&#xff0…

CSS第二天导读

1,Emmet语法 Emmet语法的前身是Zen coding,它使用缩写,来提高html / css 的编写速度,Vscode内部已经集成该语法 1.1,快速生成HTML结构语法 1.想要快速生成多个相同标签,加上*就可以了,比如 d…

物流实时数仓:数仓搭建(DWD)一

系列文章目录 物流实时数仓:采集通道搭建 物流实时数仓:数仓搭建 物流实时数仓:数仓搭建(DIM) 物流实时数仓:数仓搭建(DWD)一 文章目录 系列文章目录前言一、文件编写1.目录创建2.b…

iPhone 16 的电池供应可能来自印度

据英国《金融时报》报道,据报道,苹果已通知其供应链,包括中国德赛公司和台湾新普科技等电池供应商,其倾向于将 iPhone 16 的电池供应转移到印度。苹果鼓励供应商将现有产能迁往印度,以扩大该地区的生产规模。 鉴于电池…

Redis高级特性解析:持久化、主从复制与哨兵机制全面探讨

Redis持久化 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存…

Java使用Microsoft Entra微软 SSO 认证接入

1. Microsoft Entra Microsoft Entra ID 是基于云的标识和访问管理服务,可帮助员工访问外部资源。 示例资源包括 Microsoft 365、Azure 门户以及成千上万的其他 SaaS 应用程序。 Microsoft Entra ID 还可帮助他们访问你的企业 Intranet 上的应用等内部资源&#x…

2019年第八届数学建模国际赛小美赛B题数据中心冷出风口的设计解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 B题 数据中心冷出风口的设计 原题再现: 这是数据中心空调设计面临的一个问题。在一些数据中心,计算机机柜是开放的,在一个房间里排列成三到四排。冷却后的空气通过主管进入房间,并分为三到四个…

神经网络中梯度消失 以及梯度爆炸的原因已解决办法

深度神经网络中的梯度消失和梯度爆炸是两个常见的问题,它们都会导致网络训练过程中的梯度无法有效传播或者传播过于剧烈,从而影响网络的收敛性和性能。下面将详细介绍这两个问题以及解决方案。 梯度消失问题: 梯度消失指的是在网络的深层结…

python相关工具代码之网络图片下载并显示出下载图片保存到的地址

# codingutf-8 from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import time import random import os import urllib.request from bs4 import BeautifulSoup 信号传参类型 pyqtSignal() #无参数信号 pyq…

【华为数据之道学习笔记】5-2华为数据湖的特点

华为数据湖是逻辑上对内外部的结构化、非结构化的原始数据的逻辑汇聚。数据入湖要遵从6项入湖标准,基于6项标准保证入湖的质量,同时面向不同的消费场景提供两种入湖方式,满足数据消费的要求。经过近两年的数据湖建设,目前已经完成…

centos7安装和卸载MySQL8.0

一.卸载Mysql 1.关闭MySQL服务 systemctl stop mysqld 2.使用 rpm 命令查看已安装的安装包 rpm -qa|grep mysql 3.使用yum卸载安装的mysql yum remove mysql mysql-server mysql-libs mysql-server 4.查询剩余的安装包 rpm -qa|grep mysql 这里是我的centos7上的mysq…

Docker容器数据卷

一、概念 1.定义 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。 卷的设计目的就是数据的持久化,完全独…

0-50KHz频率响应模拟量高速信号隔离变送器

0-50KHz频率响应模拟量高速信号隔离变送器 型号:JSD TA-2322F系列 高速响应时间,频率响应时间快 特点: ◆小体积,低成本,标准 DIN35mm 导轨安装方式 ◆六端隔离(输入、输出、工作电源和通道间相互隔离) ◆高速信号采集 (-3dB,Min≤ 3.5 uS,订…

谷歌上架或更新被拒审的可能原因有哪些?

众所周知,在Google play应用商店上架或更新应用时,开发者需要遵守谷歌的相关规定和政策,否则可能会导致审核不通过,甚至永久封号。 很多开发者在提交应用到谷歌Play商店或进行应用更新时,即便了解了Google Play商店的…

unity 双摇杆控制教程(方向和旋转)

使用工具: unity 2021.2.8f1c1 visual studio 2022 插件: Joystick Pack 准备工作: 1.新建一个plane(作为地面),一个胶囊体(作为玩家),并在胶囊体上添加刚体组件&am…

java实现冒泡排序及其动图演示

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复这个过程直到整个数列都是按照从小到大的顺序排列。 具体步骤如下: 比较相邻的两个元素,如果前…

hive聚合函数之排序

1 全局排序(Order By) Order By:全局排序,只有一个Reduce。 (1).使用Order By子句排序 asc(ascend):升序(默认) desc(descend)&#…

分布式解决方案与实战

分布式多线程性能调优 使用多线程优化接口 //下单业务public Object order( long userId){long start System.currentTimeMillis();//方法的开始时间戳&#xff08;ms&#xff09;JSONObject orderInfo remoteService.createOrder(userId);Callable<JSONObject> calla…