数据库左连接,右连接,内连接
转摘:https://www.cnblogs.com/jianshuai520/p/11055519.html
我们来举个例子。天庭上面有一个管理系统:管理系统有个主表:主表记录着各个神仙的基本信息(我们把它当成表A)。还有个表记录着他们这个神仙的详细信息(我们把它当成表B)。
表A的信息为
idA | name | position |
---|---|---|
1 | 李靖 | 托塔天王 |
2 | 值年神李丙 | 四值功曹 |
3 | 增长天王 | 四大天王 |
4 | 青龙孟章神君 | 四方神 |
表B的信息为(此神仙有无犯过天条)
IDB | Name | THINGS |
---|---|---|
1 | NO | |
3 | YES | 上班玩忽职守 |
4 | NO | |
5 | NO | |
6 | YES | 调戏嫦娥妹妹 |
刚好赶上天庭蟠桃会,王母就让你统计下,参加蟠桃会的人有无犯事的记录,有的话就取消他参加宴会的资格。
1|1这个时候,你用上了 左连接 方法
语句为下:select A.* ,B.* from A left outer join B on (A.IDA=B.IDB)
IDA | NAME | position | IDB | Name | THINGS |
---|---|---|---|---|---|
1 | 李靖 | 托塔天王 | 1 | NO | |
2 | 值年神李丙 | 四值功曹 | NULL | NULL | NULL |
3 | 增长天王 | 四大天王 | 3 | YES | 上班玩忽职守 |
4 | 青龙孟章神君 | 四方神 | 4 | NO |
结果就如同这样,表B中的IDB=5和6这条数据没有展示出来。且IDA=2 这条数据在表B中取null,左连接取的就是FROM后面该表中的所有数据作为查询结果。
1|2但是如果你用了右连接:
语句为下:select A.* ,B.* from A right outer join B on (A.IDA=B.IDB)
IDA | NAME | position | IDB | Name | THINGS |
---|---|---|---|---|---|
1 | 李靖 | 托塔天王 | 1 | NO | |
3 | 增长天王 | 四大天王 | 3 | YES | 上班玩忽职守 |
4 | 青龙孟章神君 | 四方神 | 4 | NO | |
NULL | NULL | NULL | 5 | NO | |
NULL | NULL | NULL | 6 | YES | 调戏嫦娥妹妹 |
这个时候王母一看。什么,居然有人调戏 嫦娥,而且还查不到这个人?王母就会大发雷霆然后限你一天之内找到这个人。
1|3内连接和自然连接的写法一样
select * from A,B where A.IDA=B.IDB
IDA | NAME | position | IDB | Name | THINGS |
---|---|---|---|---|---|
1 | 李靖 | 托塔天王 | 1 | NO | |
3 | 增长天王 | 四大天王 | 3 | YES | 上班玩忽职守 |
4 | 青龙孟章神君 | 四方神 | 4 | NO |
整体来概述一下,这些的区别是什么:
通俗易懂
左连接:左边有的,右边没有的为null
右连接:左边没有的,右边有的为null
内连接:显示左边右边共有的