一文搞懂SQL中的各种联结——外联结、左外联结、右外联结、全外联结

一、什么是外联结(outer join)

前面讲的内联结(inner join)主要是针对两个表中“ 共有”的那一部分而言的,从前面可以看到,productinfo表格中的 阿里巴巴、四维图新 ,vendors表格里面的拓普康、南智传感 并没有查询出来,因为它们都只在一个表格中,不是公共的。而外联结就可以处理这种问题了。

二、左外联结(left outer join)

select p.*,v.*

from productinfo as p LEFT OUTER JOIN vendors as v

on p.vendname=v.vendname

从上可见,原本左边的productinfo表格中没有和vendors表格匹配的 阿里巴巴 四维图新 也被查询出来了。但是因为vendors表格没有与 阿里巴巴 和四维图新 相匹配的,故而全为空NULL。

三、右外联结(right outer join)

select p.*,v.*

from productinfo as p RIGHT OUTER JOIN vendors as v

扫描二维码关注公众号,回复: 2524850 查看本文章

on p.vendname=v.vendname

但是因为SQLite里面并不支持 右外联结 和 全外联结,故而会报错,但是依然有解决办法,所谓的“ 左 ”、“右”,只是一个在from子句之后的左右关系,我可以换一下,如下代码:

select p.*,v.*

from vendors as v LEFT OUTER JOIN productinfo as p  /*将vendors换到前面即可*/

on p.vendname=v.vendname

结果为:

从上面可见,vendors表格中拓普康

南智传感被现实出来了,但是因为productinfo里面没有与之匹配的,故而全部显示为空NULL。

四、全外联结

全外联结很多数据库不支持,SQLite也不支持,access、MariaDB、MySQL、Open Office Base都不支持,这里不做讨论。

猜你喜欢

转载自blog.csdn.net/qq_27825451/article/details/81330555