MYSQL 多表联结

参考:
JOIN与逗号的区别

交叉连接的操作只有两种:INNER JOIN和CROSS JOIN。
JOIN,是 INNER JOIN的缺省写法。
CROSS JOIN,因为有明确的语义,就是要生成笛卡尔全集。因此之后就不容许跟on条件。
INNER JOIN,是对笛卡尔全集的补充处理。因此可以跟条件。由于笛卡尔集是将左右表同等对待,也就是将临时表中每个行作为一个整体看待,因此ON的条件就是对整行进行的处理,处理的结果就如同过滤。对于不满足条件的整行,将不会传递给WHERE语句,也就不会出现在最终的结果集中。
那为什么MYSQL不按SQL标准进行实现?
SQL标准,是对SQL的逻辑表示。因此强调语法在逻辑上必须自解释和清晰。并不限制如何实现。
MYSQL,由于其本身是开源的,因此对SQL标准实际进行了简化和收敛,保留最核心最基本的内容,将可组合或没必要具体的都去掉,这样给用户留下更宽松的语义空间。即用户不必去修改MYSQL的源代码,通过功能组合或对语义进行继承也可完成自定义语义要求。
比如MYSQL中没有 FULL OUTER JOIN语法,但可通过LEFT 和RIGHT JOIN的联合使用实现。
INNER JOIN /CROSS JOIN/JOIN的三者等价也是MYSQL的一种简化和收敛。
在 INNER JOIN中,可以没有ON条件。
当没有ON条件时,表达完整的笛卡尔集。
当用ON条件时,ON是对临时表整行记录进行的处理,相当于过滤。
无论是否有ON条件,都可以跟WHERE语句。where对整行进行条件判断,形成结果集。
但,并不是说使用where来替换on。
到这里,自然又引出逗号,有必要整理下针对","与JOIN,ON和WHERE的用法细微区别:
1)where,可跟在逗号语法之后,处理后形成最终结果集。
2)on,只能跟在JOIN语法之后,是对中间结果的补充处理。处理后结果交给WHERE。
3)on条件后,还可以跟where条件。
4)逗号,不能与JOIN一起使用。逗号是隐式表达交叉连接;JOIN,是显式表达交叉连接。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值