连接原理与执行顺序
第 1 步:生成笛卡尔积(全匹配)
把左表每一行,和右表每一行全部组合一遍。
左表 3 行 + 右表 3 行 = 9 行数据
第 2 步:按 ON 条件过滤(保留有效数据)
只保留 ON 左表.字段 = 右表.字段 匹配成功的行。
——————————————————————————————————————————————————
SQL 完整执行顺序
- FROM / JOIN 👉 先找表、拼接表
- ON 👉 连接条件过滤
- WHERE 👉 对拼接后的结果过滤
- GROUP BY 👉 分组
- HAVING 👉 分组后过滤
- SELECT 👉 查要显示的字段
- ORDER BY 👉 最后排序
———————————————————————————————————————————————————
create table user_info
(
user_id int,
user_name varchar(10)
);
insert into user_info
values
(1,'张三'),
(2,'李四'),
(3,'王五');
create table order_info
(
order_id int,
user_id int,
order_name varchar(20)
);
insert into order_info
values
(101,1,'手机'),
(102,2,'电脑');
select
u.user_id,
u.user_name,
o.order_name
from user_info u --左表
Left JOIN order_info o --右表
on u.user_id = o.user_id;
select *
from user_info u
left join order_info o
on u.user_id = o.user_id --先执行 连接过滤
where o.order_name = '手机'; --后执行 整体过滤

浙公网安备 33010602011771号