【MYSQL】SQL执行关键字的加载顺序

SQL执行关键字的加载顺序

FROM # 先查询表是否存在
ON
JOIN
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT

为什么是on在join前面呢?

按我的理解,join on 数据库会进行三步处理:

先将两表做笛卡尔积产生中间表

通过on的全部条件过滤中间表的记录

根据join的类型判断是否要添加外部行(只有在外连接LEFT/RIGHT/FULL中才会发生),把保留表的记录添加到中间表

on与where的区别?

on是用于生成中间表的过滤条件,但不是最终的过滤条件,因为外连接有可能把结果加回来

where是在临时表生成好后再对临时表进行过滤

JOIN 关键字

left join:左连接,返回左表中所有的记录以及右表中连接字段相等的记录

right join:右连接,返回右表中所有的记录以及左表中连接字段相等的记录

inner join (join):内连接,又叫等值连接,只返回两个表中连接字段相等的行

full join:外连接,返回两个表中的行:left join + right join

cross join:结果是笛卡尔积,把左表和右表的数据进行一个N*M的组合

MySQL不支持full join,可以使用union代替

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值