Mysql碎片整理:多表查询

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 多表查询

提示

本文简单介绍一下多表查询的基本方法,供快速复习和浏览。主要涉及到:子查询联结查询,其中联结查询主要介绍

  • 内联结(INNER JOIN
  • 外联结(LEFT OUTER JOINRIGHT OUTER JOIN

子查询

将一个 SELECT的查询结果作为 一整个单元,在另外一个 SELECT语句中使用

例子:查询商品,要求销售价格比菜刀的销售价格贵。

我们可以拆解该语句:

  1. 查询菜刀的销售价格
SELECT sale_price FROM product WHERE product_name = '菜刀'
  1. 将查询出的菜刀销售价格放在新SELECTWHERE条件中。
SELECT * FROM product WHERE sale_price > (SELECT sale_price FROM product WHERE product_name = '菜刀')

这里就用到了子查询,将一个结果的单元封装到另外一个查询语句中。

注意 : 子查询既可以用在单表中做嵌套查询,也可以用在多表中。但单表的嵌套查询是常用的。


联结

联结:主要是针对两个表中 有关联的字段,例如 A.id = B.id,A表中的id和B表中的id是有关联的。

内联结

内联结:更多的用途是以 A.id = B.id为条件后,找出两个表中的 公共部分。它的关键字是 INNER JOIN ON
SELECT * 
FROM T1 
INNER JOIN T2
ON 条件

T1 INNER JOIN T2:将两个表的记录拼接起来,它需要按条件进行拼接,即ON,执行后会对比;两个表的每行记录,如果满足ON条件,就会将两个表的所有列进行拼接,形成一个表。它的执行效果和WHERE的等值判断一样,但是效率会比WHERE高。

例子:有两个表,一个是用户表(USERS),一个是订单表(ORDERS),查询用户的购物信息

SELECT  *
FROM USERS
INNER JOIN ORDERS
ON USERS.ID = ORDERS.CUSTOMER_ID;

外联结

外联结:更多的用途是以A.id = B.id为条件后

  • A LEFT JOIN B:以A表为完整展示,B表为筛选条件 ,在B中找不到对应A的记录,则将B中的内容置为NULL。

或者

  • A RIGHT JOIN B:以B表为完整展示,A表为筛选条件,在A中找不到对应B的记录,则将A中的内容置为NULL。

还是以上面的例子展开这里可以这样说:

例子:查询所有的用户信息和它的购物信息,若没有购物信息设置为NULL即可

SELECT *
FROM USERS
LEFT JOIN ORDERS
ON USERS.ID = ORDERS.CUSTOMER_ID;

记忆起来其实比较简单,它们不光是将对应条件USERS.ID = ORDERS.CUSTOMER_ID的两个表的字段做全拼接。而且,USERS表中的内容是全部展示,如果不满足条件USERS.ID = ORDERS.CUSTOMER_ID的字段咋整?设置为NULL即可。即USERS表是完整展示信息的,而不满足条件的这一行,在ORDERS的字段中都设为NULL。

T1 RIGHT JOIN T2LEFT JOIN刚好相反,它是T2表完整展示。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
关系型数据库 MySQL
3. Mysql 如何实现多表查询
MySQL多表查询主要包括内连接和外连接。内连接有隐式和显式:隐式是通过`From 表A, 表B where 连接条件`,显式是`From 表A inner join 表B on 连接条件`。外连接包括左外连接(`left join`)、右外连接(`right join`)和全外连接(较少使用)。此外,还有交叉连接(`cross join`),但也较少使用。
77 0
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库碎片化:隐患与解决策略
UUID作为主键可能导致MySQL存储碎片,影响性能。频繁的DML操作、字段长度变化和非顺序插入(如UUID)都会造成碎片。碎片增加磁盘I/O,降低查询效率,浪费空间,影响备份速度。建议使用自增ID,固定长度字段,并适时运行OPTIMIZE TABLE来减少碎片。
|
2月前
|
SQL 存储 关系型数据库
MySQL 回收表碎片实践教程
在 MySQL 数据库中,随着数据的增删改操作,表空间可能会出现碎片化,这不仅会占用额外的存储空间,还可能降低表的扫描效率,特别是一些大表,在进行数据清理后会产生大量的碎片。本篇文章我们一起来学习下如何进行碎片回收以及相关注意点。
86 1
MySQL 回收表碎片实践教程
|
6月前
|
关系型数据库 MySQL 数据库
关系型数据库MySQL开发要点之多表查询2024详解
关系型数据库MySQL开发要点之多表查询2024详解
41 2
|
6月前
|
关系型数据库 MySQL 数据库
MySQL数据库开发之多表查询数据准备及案例实操
MySQL数据库开发之多表查询数据准备及案例实操
52 1
|
6月前
|
关系型数据库 MySQL 数据库
MySQL数据库基础第四篇(多表查询与事务)
MySQL数据库基础第四篇(多表查询与事务)
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
48 5
|
6月前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(4)-实例练习、多表查询总结
MySQL数据库——多表查询(4)-实例练习、多表查询总结
214 1
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
379 1
|
6月前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(2)-内连接、外连接
MySQL数据库——多表查询(2)-内连接、外连接
53 1