mysql - SQL 这个 left jion 和 left outer jion 怎么结果是一样的?
问题描述
SELECT b.id,b.cid,b.name,t.type FROM shbooks b LEFT JOIN shtype t ON t.id = b.cid;SELECT b.id,b.cid,b.name,t.type FROM shbooks b LEFT OUTER JOIN shtype t ON t.id = b.cid;
不加OUTER的时候,我完全能理解,把表1在表2对应的类名显示出来,
但是加上 OUTER后,我看到结果还是一模一样,用什么例子可以理解加和不加的区别呢?
问题解答
回答1:LEFT JOIN和LEFT OUTER JOIN是一样的,只是通常我们写SQL语句的是时候把OUTER给省略了。这个可以理解像内连接,我们写内连接的时候,通常也是省略INNER,直接写JOIN
多表链接有
内连接(JOIN 或 INNER JOIN)
SELECT * FROM a [INNER] JOIN b ON a.id=b.id
外连接
左连接或者叫左外向连接(LEFT JOIN 或者 LEFT OUTER JOIN)
SELECT * FROM a LEFT [OUTER] JOIN b ON a.id=b.id
右连接或者叫右外向连接(RIGHT JOIN 或者 RIGHT OUTER JOIN)
SELECT * FROM a RIGHT [OUTER] JOIN b ON a.id=b.id
完全外连接,就是通过关键UNION把左连接和右连接两个语句连在一起
SELECT * FROM a LEFT [OUTER] JOIN b ON a.id=b.idUNIONSELECT * FROM a RIGHT [OUTER] JOIN b ON a.id=b.id
交叉连接(CROSS JOIN),这个会涉及到笛卡尔积,笛卡尔积我个人理解就是两个表交叉组合。所以得到的集合结果就是查询到的A表符合条件的记录*B表符合条件的记录.
这个有个小坑,就是不能像内连接和外连接一样,给语句加上ON,如果加了,查询结果就像内连接一样
SELECT * FROM a CROSS JOIN b where a.id=1回答2:
这两个应该就是一样的吧。left join是left outer join的简写。你可以用explain extended和show warnings看到数据库优化改写之后的语句,两个SQL是一样的。
相关文章:
1. javascript - 微信jssdk ios下自定义onMenuShareAppMessage 分享失效,Android分享成功2. 老师百度网盘分享一下WampServer的包啊,我们下载几kb要下载一天的.3. vue.js - linux下怎么使用vue-cli的vue命令4. html5 - 在移动端设置font-size小于12px。line-height的问题5. 前端 - CSS中的过度受限在W3C规范里面的哪一部分有提到?6. css3 - 能否在CSS中定义“对特定字体的文本加粗”?7. redis - 微信网页授权的access_token需要缓存吗?8. css3 - 获取translateX的值9. sublime3 里面的scss文件怎么不提示css3的代码呀10. android - 哪位大神知道java后台的api接口的对象传到前端后输入日期报错,是什么情况?求大神指点
