如上图是MySQL的七种连接
由于MySQ对于外连接支持SQL99语法,我们就以JOIN...ON举例
表t_dept 表t_emp
文章来源地址https://www.toymoban.com/news/detail-400387.html
1.内连接:A表,B表交叉的部分
SELECT *
FROM t_dept d INNER JOIN t_emp e
ON d.id = e.deptid;
INNER可省略,执行结果如下
2.左外连接:A表,B表交叉的部分和A表独有的部分
SELECT *
FROM t_dept d LEFT OUTER JOIN t_emp e
ON d.id = e.deptid
OUTER可省略,执行结果如下
3.右外连接:A表,B表交叉的部分和B表独有的部分
SELECT *
FROM t_dept d RIGHT JOIN t_emp e
ON d.id = e.deptid
注意看上面两个结果的最后一行,我们可以发现两个表合起来以后在另外一张表中没有内容的地方用null填充了,如此一来左中图和右中图咱们就能写出来了。比如找A表独有的部分就面向A表写个外连接,再加上一个条件 B表的连接条件为null(本例中是d.id或e.deptid)
4.左中图:A表特有的
SELECT *
FROM t_dept d LEFT JOIN t_emp e
ON d.id = e.deptid
WHERE e.deptid IS NULL
5.右中图:B表特有的
SELECT *
FROM t_dept d RIGHT JOIN t_emp e
ON d.id = e.deptid
WHERE d.id IS NULL
6.右下图:就是上面两个图合起来啦 那怎么合起来呢,就会用到UNION关键字
UNION:合并去重,效率低
UNION ALL:合并不去重,效率高
这里两个都可以用,因为左中图和右中图本来就没有重合的部分,就用效率高的UNION ALL好了。
SELECT *
FROM t_emp e LEFT JOIN t_dept d
ON e.deptid = d.id
WHERE d.id IS NULL
UNION ALL
SELECT *
FROM t_emp e RIGHT JOIN t_dept d
ON e.deptid = d.id
WHERE e.id IS NULL
7.满外连接:MySQL不支持FULL JOIN,需要合并操作,我们用效率高的UNION ALL就得选没有重合的两个图,这里以右外连接和左中图合并为例
SELECT *
FROM t_emp e RIGHT JOIN t_dept d
ON e.deptid = d.id
UNION ALL
SELECT *
FROM t_emp e LEFT JOIN t_dept d
ON e.deptid = d.id
WHERE d.id IS NULL
文章来源:https://www.toymoban.com/news/detail-400387.html
到了这里,关于理解MySQL七种连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!