mysql - SQL 这个 left jion 和 left outer jion 怎么结果是一样的?

查看:94
本文介绍了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后,我看到结果还是一模一样,用什么例子可以理解加和不加的区别呢?

解决方案

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.id
      UNION
      SELECT * 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

这篇关于mysql - SQL 这个 left jion 和 left outer jion 怎么结果是一样的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆