MySQL中的交叉连接、内连接、外连接

MySQL中的交叉连接、内连接、外连接,第1张

学生student表:

课程course表:

交叉连接:

结果为两张表的笛卡尔积:

内连接(inner join ,inner 可以省略)

显示内连接和隐示内连接获得的查询结果是一样的,都是A表和B表的交集(例:A.id = B.id),但是只能查到有关系的信息,如果A表的一条数据的与B表关联的字段没有对应的信息(如:A.id = null),即:这条数据在B表中没有对应的信息,则无法获得。

外连接(outer join,outer可以省略)

左外连接获得的查询结果是左边的表A的全部信息和A,B两张表的交集,左边A表的全部包含A表中在B表中没有对应关系的信息。

右外连接获得的查询结果是右边的表B的全部信息和A,B两张表的交集,右边B表的全部包含B表中在A表中没有对应关系的信息。

以下均为个人看法,不喜勿喷。

(1)写法上的区别

现在是两张表,写起来简单,如果是多张表,多种连接,甚至包含子查询,那么如果只存在左连接或者右连接,那么写法上会麻烦很多。

比如 a left join b on XXX=xxxx

right join c XXX=xxxx

left join d XXX=xxx

where a.xxxx=F.xxxx

等等,甚至更麻烦一些,那么只存在一种连接的话,改写起来就会比较麻烦。

(2)语句只是工具

习惯上我们一般会找一个主表(起主要作用的表),并从它开始写相应的语句,假设只存在一种连接,那么为了写语句就可能会打乱思维方式。语句只是工具,当然是怎么方便怎么来,所以二者相应的都存在。

(3)语言的规范性

我说的是编程语言,只有左没有右,就好像只有前没有后,内部解析的时候可能都是一样的,但是外部写作的时候必须是完整的,如果只有做没有右,那么可能就是缺失的。

能实现,先左联 然后 unio all 然后右连吧

SELECT a.列1,a,列2,,,,,,,, FROM a LEFT JOIN b ON a.id=b.id

->UNION

->SELECTa.列1,a,列2,,,,,,,, FROM a RIGHT JOIN b ON a.id=b.id


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6112654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存