MySQL查询之内连接,外连接查询场景的区别与不同

前言

我在写sql查询的时候,用的最多的就是where条件查询,这种查询也叫内连查询inner join,当然还有外连查询outer join左外连接,右外连接查询,常用在多对多关系中,那他们区别和联系是什么呢?

内连接inner join

内连接最常用定义:

  1. 连接结果仅包含符合连接条件的行组合起来作为结果集,参与连接的两个表都应该符合连接条件使用关键词:INNER JOIN 连接多张表

也就是返回两个表的交集(阴影)部分,如下图所示:

如下sql查询语句

查询所有分配了部门信息的用户信息

也就是部门id在用户表,和部门表都存在行符合条件数据才展示

1select u.USERNAME, u.MOBILE, u.EMAIL, d.DEPT_NAME 2from t_user u inner join 3 t_dept d 4on u.DEPT_ID = d.DEPT_ID

内连接还有一种隐式的写法,即不需要显示的指定 INNER JOIN 关键字

等价于

1select u.USERNAME, u.MOBILE, u.EMAIL, d.DEPT_NAME 2from t_user u, 3 t_dept d 4where u.DEPT_ID = d.DEPT_ID

一般我们常用直接使用where关键词查询连接条件这样更方便简单

外连接outer join

左(外)连接 left join

定义:

  1. 左(外)连接,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为 NULL,如下图所示:

  1. 语法
1LEFT JOIN ON 2LEFT OUTER JOIN ON

left joinleft outer join 的简写,它的全称是左外连接,是外连接中的一种。

如下sql查询语句

查询所有员工信息(包含部门信息)

1select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME 2from t_user u left outer join 3 t_dept d 4on u.DEPT_ID = d.DEPT_ID

等价于

1select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME 2from t_user u left join 3 t_dept d 4on u.DEPT_ID = d.DEPT_ID

如下图我们可以看到,左外连接 t_user 表里面 USERNAME 为 kenx 的记录,其 DEPT_ID 为 15,但 DEPT_ID 为 15 的记录在 t_dept 表里面是不存在的,此时,我们用的是左外连接,因此,可以查出该条记录,但 t_dept 表里面的字段的值都是 NULL。

右(外)连接 right join

定义:

  1. 右(外)连接,右表的记录将会全部表示出来,而左表只会显示符合搜索条件的记录。左表记录不足的地方均为 NULL,如下图所示:

  1. 语法
1RIGHT JOIN ON 2RIGHT OUTER JOIN ON

right joinright outer join 的简写,它的全称是右外连接,是外连接中的一种。

如下查询sql 语句

1select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME 2from t_user u right join 3 t_dept d 4on u.DEPT_ID = d.DEPT_ID

等价于

1select u.USERNAME, u.MOBILE, u.EMAIL,u.DEPT_ID, d.DEPT_NAME 2from t_user u right outer join 3 t_dept d 4on u.DEPT_ID = d.DEPT_ID

如下图 与左外连接刚好相反 查询出了所有部门信息,不符合条件的用户信息字段都为NULL

总结

  1. 内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

  2. 外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

  3. 左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。

  4. 右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。

  5. 全外连接:左外连接 union 右外连接,Mysql 中暂不支持。

点赞
收藏

评论区

加载中...

相关推荐

sql语句中的 inner join 、 left join 、 right join、 full join 的区别

简单明了地说,连接分内连接和外链接假设有A和B两张表内连接:innerjoin   表示把AB表的记录相符都显示出来,把AB表不符合条件的都排除外连接分三种,即左连接(LEFTOUTERJOIN)、右连接(RIGHTOUTERJOIN)、全连接(FULLOUTERJOIN),下面就简单解析一下,。1.ALEFTOUTERJOI

MySQL数据库查询

MySQL数据库查询12、说明:使用外连接A、left(outer)join:左外连接(左连接):包含leftjoin左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).。SQL:select\fromstudent(表1)leftjoincourse(表2)onstude

MySQL—关联(连接)查询(笛卡尔积、内连接、外连接、左连接、右外连接、外连接、自连接)

MySQL—关联(连接)查询知识大纲概述笛卡尔积关联条件内连接\INNERJOIN\外连接\OUTERJOIN\左连接\LEFTJOIN\右外连接\RIGHTJOIN\外连接\FULLJOIN\

MySQL教程(十四)—— 连接

1 连接的语法结构MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作。语法结构:1table_reference//第一张表2{INNER|CROSSJOIN|{LEFT|RIGHT}OUTERJOIN}//连接选择:内连接,左外、右外连接3t

mysql学习之join从句

一、join从句共有5种类型内连接(innerjoin)全外连接(fullouterjoin)左外连接(leftouterjoin)右外连接(rightouterjoin)交叉连接(crossjoin)二、演示案例新建两张表user1表和user2表CRE

mysql2_4

连接查询将多张表进行记录的连接(按照某个指定的条件进行数据拼接)  最终结果是:记录数有可能变化,字段书一定会增加(至少两张表的合并)  连接查询的意义:在用户查看数据的时候,需要显示的数据来自多张表。  连接查询分类sql中将连接查询分成四类:内连接,外连接,自然连接,交叉连接  1.交叉连接:crossjoi