MySQL中的复合查询和索引

多表查询

显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表,因此要联合查询

显示部门号为10的部门名,员工名和工资

显示各个员工的姓名,工资,及工资级别

自连接

自连接是指在同一张表连接查询

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

在where中包含子查询

显示SMITH同一部门的员工

in关键字;查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自 己的

all关键字;显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

any关键字;显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门 的员工)

在from中包含子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。

显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

查找每个部门工资最高的人的姓名、工资、部门、最高工资

显示每个部门的信息(部门名,编号,地址)和人员数量

合并查询

union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

将工资大于2500或职位是MANAGER的人找出来

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行

将工资大于25000或职位是MANAGER的人找出来

内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连 接,也是在开发过程中使用的最多的连接查询。

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

显示SMITH的名字和部门名称

外连接

左外连接

如果联合查询,左侧的表完全显示我们就说是左外连接。

select 字段名 from 表名1 left join 表名2 on 连接条件

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

右外连接

如果联合查询,右侧的表完全显示我们就说是右外连接。

select 字段名 from 表名1 right join 表名2 on 连接条件

对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要 显示出来

索引

本质 :一种有序的数据结构,将索引列的值与对应行数据的物理位置(或主键)关联起来,避免全表扫描。

页(Page)是交互最小单位

InnoDB默认的页大小:16KB

磁盘-内存 只按页交换,不会只读取一行

数据、索引都存储在页中:数据页+索引页(目录页)

Page(页)

MySQL 中要管理很多数据表文件,而要管理好这些文件,就需要 成一个个独立文件是有一个或者多个Page构成的。

不同的Page,在 MySQL 中,都是 16KB ,使用 因为有主键的问题, prev 和 next 构成双向链表 MySQL 会默认按照主键给我们的数据进行排序,从上面的Page内数据记录可以看 出,数据是有序且彼此关联的。

多个Page

目录页的本质也是页,普通页中存的数据是用户数据,而目录页中存的数据是普通页的地址。

索引就是页的目录

InnoDB所有索引(主键/普通/联合)底层都是B+树,节点就是页

聚簇索引(主键索引)

叶子节点=数据页:存整行数据,按主键有序

非叶子节点=索引页(目录页):只存最小主键,用来找数据页

查询过程(比如 id=22 ):

  1. 根索引页 → 二分找「22 落在哪个子页」

  2. 中间索引页 → 继续二分 → 定位到 数据页号

  3. 加载该数据页到内存 → 页内二分(靠「页目录」)→ 找到行

二级索引

叶子节点存:索引列值+主键值,不存整行

查询:先在二级索引树找到主键--再去聚簇索引查行--回表

主键索引的特点:

一个表中,最多有一个主键索引,当然可以使符合主键

主键索引的效率高(主键不可重复)

创建主键索引的列,它的值不能为null,且不能重复

主键索引的列基本上是int

唯一索引的特点:

一个表中,可以有多个唯一索引

查询效率高

如果在某一列建立唯一索引,必须保证这列不能有重复数据

如果一个唯一索引上指定not null,等价于主键索引

相关推荐
itfallrain13 分钟前
Spring 构造器循环依赖排查:@RequiredArgsConstructor + @Lazy 到底有没有生效
数据库·python·spring
Database_Cool_28 分钟前
AnalyticDB MySQL vs StarRocks/ByteHouse:云数仓选型指南——全托管 vs 自建方案
数据库·数据仓库·mysql·阿里云
Omics Pro1 小时前
「自兹以往」动物肠道微生物组
数据库·人工智能·机器学习·语言模型·自然语言处理
zzz_23681 小时前
【Redis】分布式锁完整演进
数据库·redis·分布式
mN9B2uk171 小时前
数据库的约束简介
java·数据库·sql
计算机安禾1 小时前
【数据库系统原理】第4篇:关系数据结构的形式化定义:域、笛卡尔积与关系模式
数据结构·数据库·算法
Henry-SAP1 小时前
SAP(ERP) BOM变更实时同步MRP方案
数据库·云原生
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第99题】【Mysql篇】第29题:如何选择合适的分布式主键方案?
java·数据库·分布式·mysql·面试
倔强的石头_2 小时前
kingbase备份与恢复实战(七)—— 恢复演练与验收:从“能恢复”到“可交付预案”
数据库
满昕欢喜2 小时前
第2章 SQL Server 2019服务器管理
数据库·sqlserver