虽然项目一直在写左外连接、内连接等等的sql,但是其实对具体的实现还是不太清楚,接下来跟我一起来了解一下吧!
1. INNER JON 内连接 |
对应的sql语句
select <select_list>
from table A a
INNER JOIN Table B b
ON A.key=B.key
实例
表1
执行结果
表2
执行结果
内连接
执行结果
分析
- 可以看出,表1有6列,表2有3列,内连接有9列,说明内连接两表的列拼接起来
- 有重复的列username,并没有合并,都显示出来了
- ON后为连接条件,内连接只保留条件公有部分,就是保留a.id和b.user_id相等的行,即id=28,use_id=28的行保留下来
小结
内连接只有两者的公有部分
2. LEFT JON 左外连接 |
图解
对应的sql语句
select <select_list>
from table A a
LEFT JOIN Table B b
ON A.key=B.key
实例
分析
- 左外连接就是两表的列拼接起来,A表的数据都要,B表没有的行补NULL
3. Right JION 右外连接 |
图解
对应的sql
select <select_list>
from table A a
RIGHT JOIN Table B b
ON A.key=B.key
实例
sql
执行结果
分析
- B表数据都要,A表没有的自动补全
4. Right JION 右连接 |
图解
对应的sql
select <select_list>
from table A a
LEFT JOIN Table B b
ON A.key=B.key
where A.key=NULL
实例
执行结果
5. LEFT JION 左连接 |
图解
对应的sql
select <select_list>
from table A a
LEFT JOIN Table B b
ON A.key=B.key
where B.key=NULL
实例
执行结果
6. 全外连接 |
图解
对应的sql
select <select_list>
from table A a
OUTER JOIN Table B b
ON A.key=B.key
实例
执行结果
小结
mysql不能直接操作全外连接,需要使用左外连接与右外连接的两个结果集进行合并并去除重复。union 去重,union all 不去重。
7. 交叉外连接 |
图解
对应的sql
select <select_list>
from table A a
OUTER JOIN Table B b
ON A.key=B.key
where B.key=NULL
AND A.key=NULL
实例
执行结果
暂不支持