当前位置: 首页 > article >正文

复习打卡MySQL篇03

目录

1. 多表查询

1.1 内连接

1.2 左外连接,右外连接

1.3 外键约束

2. 子查询

3. 开窗函数


1. 多表查询

制作测试数据

drop table if exists tb_class ;
create table tb_class(
	class_id int primary key,
	class_name varchar(20)
)engine=innodb default charset=utf8;
drop table if exists tb_students;
create table tb_students(
	id int primary key,
	student_name varchar(20),
	class_id int,
	age int
)engine=innodb default charset=utf8;
insert into tb_class values (1,"1班"),(2,"2班"),(3,"3班"),(4,"4班"),(5,"5班");
insert into tb_students values (1, "小明", 1, 18),(2, "小刚", 6, 17),(3, "小红", 3, 22);

1.1 内连接

表A inner join 表B on 关联条件

查询两个表中符合条件的共有记录

select 
	student_name,
	class_name 
from tb_class c
inner join tb_students s
on c.class_id = s.class_id ;

或:

select 
	student_name,
	class_name 
from tb_class c
inner join tb_students s
where c.class_id = s.class_id ;

 

1.2 左外连接,右外连接

左外连接查询(语法左边数据表就是主表):查询结果会保留主表中的所有数据,然后去右边中进行匹配,如果有与之匹配结果就显示,如果没有与其匹配的结果,则右表关联字段都为null

右外连接同理

select 
	student_name,
	class_name 
from tb_class c
left join tb_students s
on c.class_id = s.class_id ;

   

1.3 外键约束

先建立外键约束 => 才能插入数据

添加外键约束语法:

alter table 表名 add foreign key(外键) references 表名(主键) on DELETE cascade on UPDATE cascade;

这样一来主键中的数据修改删除,所关联的外键也随之修改删除

通过show create table 表名;可以查看外键约束名,并可以通过alter table 表名 drop foreign key 外键约束名;来删除外键。

事务、外键都只能使用InnoDB引擎,否则无法使用事务与外键功能。

2. 子查询

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询。

主查询和子查询的关系:

  • 子查询是嵌入到主查询中

  • 子查询是辅助主查询的,要么充当条件,要么充当数据源(数据表)

  • 子查询是可以独立存在的语句,是一条完整的 select 语句

需求:查询年龄大于平均年龄的所有学生:

select * from tb_student where age > (select avg(age) from tb_student);

需求:查询年龄最小的学生:
 

select * from tb_students where age = (select min(age) from tb_students);

3. 开窗函数

聚合函数执行完毕后,只返回一个汇总的数据结果。如果想保留所有字段以及所有记录,我们可以使用窗口函数来实现数据查询与分析工作。

语法:

select 
*,
开窗函数() over(partition by 分组字段 order by 排序字段),
...
from 表名;

partition by :相当于分组group by

  • rank()排名函数:有并列且排名序号不连续
  • dense_rank()函数:有并列且序号连续
  • row_number()函数:不并列且永远都是连续的

http://www.kler.cn/a/441797.html

相关文章:

  • 【Python项目】小区监控图像拼接系统
  • 【高阶数据结构】布隆过滤器(BloomFilter)
  • AutoGen入门——快速实现多角色、多用户、多智能体对话系统
  • 递归练习六(普通练习11-15)
  • 【0x0052】HCI_Write_Extended_Inquiry_Response命令详解
  • SDL2:arm64下编译使用 -- SDL2多媒体库使用音频实例
  • 一篇文章解决HarmonyOS开发USB调试设备连接失败
  • 【精】Linux虚拟机 Docker 配置阿里云镜像加速
  • 深入理解 HTTP 协议:从基础到实践全解析
  • C++ 并发专题 - C++线程同步的几种方法
  • Mysql 笔记2 emp dept HRs
  • DCDC降压模块
  • MyBatis 核心知识与实践
  • AndroidStudio——安卓项目结构与文件介绍
  • ubuntu+ros新手笔记(二):古月·ROS2入门21讲学习笔记
  • 【PostgreSQL异常解决】PostgreSQL 异常错误: PG::Error 服务意外关闭连接
  • 【ArcGIS技巧】天地图下载瓦片并合并成图片
  • Hive-4.0.1数据库搭建(可选配置用户名密码远程连接,涵盖切换为tez引擎)
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.3,RTCP协议, RTCP协议概述,RTCP协议详情
  • 图数据库 | 15、可扩展的图数据库设计(上)
  • C# 读取EXCEL的数据批量插入单个PDF里的多个位置
  • 系统可观测性——Logback日志框架
  • Spring Boot 3.x:自动配置类加载机制的变化
  • 如何在Linux上搭建DHCP服务
  • 解决Docker拉取镜像报错问题的详细步骤
  • win10配置子系统Ubuntu子系统(无需通过Windows应用市场)实际操作记录