mysql 的 join 和 where 优先级

mysql 的 join 和 where 优先级

定义

join功能

  • inner join(内连接,或等值连接) : 获取两个表中字段匹配关系的记录。
  • left join (左连接) : 获取左表所有记录,即使右表没有对应匹配的记录。
  • right join (右连接) : 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

where

where 是 mysql 语句的查询条件

测试数据表

表 a1

xy
110
220
330

表 a2

xy
10100
20200
20300
create table if not exists `a1`(
    `x` int(10),
    `y` int(10)
);

create table if not exists `a2`(
    `y` int(10),
    `z` int(10)
)

查询 sql 及结果

正常左连接

select * from a1 left join a2 on a1.y = a2.y;
xyyz
11010100
22020200
22020300
330NULLNULL

左连情况下, 由于左边a1.y = 30在右表无数据所以右表数据 (y,z)为 NULL

左连 on && and

select * from a1 left join a2 on a1.y = a2.y and a2.y = 10;
xyyz
11010100
220NULLNULL
330NULLNULL

由于是左连, 所以判断 (a1.y = a2.y && a2.y = 10) 只能筛选出(10, 100)与左边匹配, 所以后面均为 NULL.
即实际优先级是 select * from (a1 left join a2 on a1.y = a2.y and a2.y = 10)

左连 on && where

select * from a1 left join a2 on a1.y = a2.y where a2.y = 10;
xyyz
11010100

只有一条数据, 因此可判断其优先级为select * from (a1 left join a2 on a1.y = a2.y) where a2.y = 10.
也就是说 会先左连生成临时表, 然后再在整体表上进行 where 查询.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值