mysql多表查询

1、 笛卡尔积与隐式内连接

对select * fom emp,dept;所返回的结果集遵循笛卡尔积运算;

为了消除冗余的笛卡尔积;我们需要使用where x 例如

select * from emp,dept where emp.dept_id=dept.id;

其实这是一种隐式内连接。

2、 多表查询分类

我们可以将多表查询分成: 内连接,外连接,自连接等。

3、 内连接的两种写法

内连接有隐式内连接和显示内连接

隐式内连接FROM 表1, 表2 WHERE 条件,写法简洁,但在表较多时可读性稍差。

显式内连接FROM 表1 INNER JOIN 表2 ON 条件,使用 INNER JOIN 关键字,逻辑更清晰,推荐在复杂查询中使用。

4、 外连接的实战经验

对于外连接,我们可以分为左外连接和右外连接

实际上在实际开发,我们只focus on左外就可以了(右外也可调成左外嘛)

使用的语法是:

from 表1 left join 表2 on 条件

结果和表1的数据量是一样的,例如表1有n条数据,左外连接的结果就有n条数据

**即左外连接(LEFT JOIN)保证左表的所有数据都被返回,右表没有匹配的则用 NULL 填充,这在业务中最常用,**比如 "查询所有员工及其所属部门,包括没有部门的员工"。

5、 自连接

它将同一张表通过别名的方式当作两张不同的表来使用,从而实现对表中数据的关联查询。

1、必须使用表别名 因为是同一张表进行连接,必须用别名(如 a 和 b)来区分 "两张表",否则数据库无法识别你要引用的是哪一部分的数据。

2、既可以是内连接,也可以是外连接

3、例子:

1)需求:查询员工及其直属领导的名字(只查询有领导的员工)

SELECT a.name, b.name FROM emp a, emp b WHERE a.managerid = b.id;

这是一个隐式内连接,只会返回那些有领导(即 managerid 不为空)的员工。

2)需求:查询所有员工及其领导的名字,包括没有领导的员工

SELECT a.name '员工', b.name '领导' FROM emp a LEFT JOIN emp b ON a.managerid = b.id; 因为要忙组左表的数据全都被返回,所以使用左外连接。

左表是员工表,右表是领导表。 如果某个员工没有领导(managerid 为 NULL),那么 b.name 这一列就会显示为 NULL。

联合查询

一、联合查询是一种将多个 SELECT 查询的结果集纵向合并成一个大结果集的查询方式,它的核心作用是实现 "多表同构数据的合并展示"。

1、对于联合查询的多张表的列数必须保持一致,字段类型也需保持一致。

2、列名由第一个查询决定 最终结果集的列名,由第一个 SELECT 语句中的字段名决定,后续查询的列名会被忽略。

二、UNION vs UNION ALL

1、union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。

正因为union要去重,需要额外的排序和比较,性能较低 适用于当你需要确保结果集中没有重复数据时。

2、例子:

假设我们有两张结构相同的表:emp_2024(2024 年员工)和 emp_2025(2025 年员工)。|

sql 复制代码
SELECT name, salary FROM emp_2024
UNION ALL
SELECT name, salary FROM emp_2025;
相关推荐
白帽小丑8 小时前
# 一次 MySQL DELETE 误操作的数据恢复尝试实录
数据库·mysql
Dxy12393102169 小时前
MySQL索引完整教程:创建、查看、修改、删除与日常管理
前端·javascript·mysql
Quincy_Freak11 小时前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
至乐活着11 小时前
MySQL索引底层原理与查询优化实战:从B+树到执行计划
mysql·b+树·查询优化·sql性能·索引原理
2601_9626838913 小时前
治理遗留系统中的“生肉 SQL”:一次用多模型协作优化慢查询的实战复盘
数据库·人工智能·sql
酱学编程13 小时前
【从零到一实现一个 AI Agent 框架 · 第四篇】04. 任务规划:拆解复杂目标 -
服务器·网络·数据库·人工智能
shushangyun_14 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
华山令狐虫15 小时前
DBAPI AI 写 SQL:支持动态 SQL 与参数占位符,自然语言一键生成
数据库·人工智能·sql·dbapi
IvorySQL16 小时前
PG 技术日报|2026-07-04
数据库·人工智能·postgresql·开源
Hoxy.R16 小时前
KingbaseES读写分离高可用集群扩容、备库重建与故障切换实战
运维·数据库