一、概述

  在实际开发中,大部分情况下都不是在单表中进行数据操作,一般都是多张表进行联合查询。通常一个业务就会对应的有好几张表。MySql中的连接查询分为交叉连接,内连接,外连接三部分。其中交叉连接也叫笛卡尔积,也是内连接的一种。

二、连接查询常用方法 

   准备数据表:员工信息表(emp) 以及部门信息表(demp)

   【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP    【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

 1、交叉连接:

  也叫笛卡尔积。特点:不使用任何选择条件,直接把表1中的每个行与表2中的每个行进行一一匹配。因此该方式会产生很多重复数据,用的比较少。下面我们根据具体例子来进行详细解读。

  案例:查询员工以及部门信息

  select * from emp,demp;

  【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

   我们可以看到,由于没有限定条件,该结果就是两张表记录条数的乘积,这就是笛卡尔积现象。

 2、内连接

    顾名思义,就是指两张表中有交集的部分是需要的查询数据。

    【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

   内连接又细化分为等值连接、非等值连接以及自连接。

   2.1 等值连接

  等值连接的最大特点就是:条件是等量关系的

  等值连接的语法格式:select 字段名 from 表1 inner join 表2 on 消除笛卡尔积的连接条件A=B;

  案例:根据部门id查询员工所对应的部门名称

  select name,dname from demp inner join emp where demp.dpmp = emp.dpmp;

  【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

   2.2 非等值连接

  顾名思义,非等值连接的最大特点就是:条件不是等量关系的

  非等值连接的语法格式:select 字段名 from 表1 inner join 表2 on 消除笛卡尔积的连接条件;

  案例:查询部门编号在10-20之间的员工信息以及对用的部门信息

  select * from emp inner join demp where emp.dpmp=demp.dpmp and demp.dpmp between 10 and 20;

  【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

   2.3 自连接

  自连接就是把一张表看成两张表,自己连接自己。通过起别名的方式, 将 1 张表变为 2 张表, 通过对应字段的对应关系, 进行条件比对, 实现连接查询。

  案例:略过。

  3、外连接

  外连接分为左连接和右链接。

  3.1 左连接:

  查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null填充 。

  左边是主表,内容全显示,右边是从表。

  【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

   案例:查询员工以及部门的全部信息

  select * from emp left join demp on emp.dpmp = demp.dpmp;

  【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

   3.2 右连接:

  查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null 填充 

  右连接右边的表是主表,左边的是从表。

   【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

   案例:查询各个部门对应的员工信息

  select * from demp left join emp on emp.dpmp = demp.dpmp;

  【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结-LMLPHP

 三、总结 

  1,本质上来说,连接就是把各个表中的记录都取出来依次进行匹配,并把匹配后的组合发送给客户端。如果不加任何过滤条件,产生的结果集就是笛卡尔积。

  2,连接查询分为内连接和外连接以及交叉连接,其中外连接又可以分为左外连接和右外连接。

  3,内连接和外连接的根本区别是:在驱动表中的记录不符合on子句中的连接条件时,内连接不会把该记录加入到最后的结果集中,而外连接会

  拓展:连接查询的优化,下期分享。

10-09 16:36