当前位置:   article > 正文

理解MySQL七种连接_mysql 连接

mysql 连接

如上图是MySQL的七种连接

由于MySQ对于外连接支持SQL99语法,我们就以JOIN...ON举例

 

 表t_dept                                                                                   表t_emp

 

1.内连接:A表,B表交叉的部分

  1. SELECT *
  2. FROM t_dept d INNER JOIN t_emp e
  3. ON d.id = e.deptid;

 INNER可省略,执行结果如下

 

2.左外连接:A表,B表交叉的部分和A表独有的部分

  1. SELECT *
  2. FROM t_dept d LEFT OUTER JOIN t_emp e
  3. ON d.id = e.deptid

OUTER可省略,执行结果如下 

 3.右外连接:A表,B表交叉的部分和B表独有的部分

  1. SELECT *
  2. FROM t_dept d RIGHT JOIN t_emp e
  3. ON d.id = e.deptid


  注意看上面两个结果的最后一行,我们可以发现两个表合起来以后在另外一张表中没有内容的地方用null填充了,如此一来左中图和右中图咱们就能写出来了。比如找A表独有的部分就面向A表写个外连接,再加上一个条件  B表的连接条件为null(本例中是d.id或e.deptid)


4.左中图:A表特有的

  1. SELECT *
  2. FROM t_dept d LEFT JOIN t_emp e
  3. ON d.id = e.deptid
  4. WHERE e.deptid IS NULL

 

5.右中图:B表特有的

 

 

  1. SELECT *
  2. FROM t_dept d RIGHT JOIN t_emp e
  3. ON d.id = e.deptid
  4. WHERE d.id IS NULL

 6.右下图:就是上面两个图合起来啦 那怎么合起来呢,就会用到UNION关键字

 UNION:合并去重,效率低

UNION ALL:合并不去重,效率高

这里两个都可以用,因为左中图和右中图本来就没有重合的部分,就用效率高的UNION ALL好了。

  1. SELECT *
  2. FROM t_emp e LEFT JOIN t_dept d
  3. ON e.deptid = d.id
  4. WHERE d.id IS NULL
  5. UNION ALL
  6. SELECT *
  7. FROM t_emp e RIGHT JOIN t_dept d
  8. ON e.deptid = d.id
  9. WHERE e.id IS NULL

7.满外连接:MySQL不支持FULL JOIN,需要合并操作,我们用效率高的UNION ALL就得选没有重合的两个图,这里以右外连接和左中图合并为例

  1. SELECT *
  2. FROM t_emp e RIGHT JOIN t_dept d
  3. ON e.deptid = d.id
  4. UNION ALL
  5. SELECT *
  6. FROM t_emp e LEFT JOIN t_dept d
  7. ON e.deptid = d.id
  8. WHERE d.id IS NULL

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/433569
推荐阅读
相关标签
  

闽ICP备14008679号