- 内连接 inner join
- 示例
- 外连接 outer join
- left outer join 左外连接
- 示例
- right outer join 右外连接
- 示例
- full outer join 全外连接
- 示例
- 外连接总结
内连接又称为等值连接,语法结构:
表1 inner join 表2 on 条件 -- inner可以省略
- 表 1 叫做驱动表(参照表/匹配表) , 表 2 叫做被匹配表(被参照表)
- 等值连接方式下 , 驱动表和被匹配表位置可以互换 , 不影响结果集
- 执行方式:无论谁做驱动表 , 都会遍历驱动表 , 在被匹配表中查找匹配数据,不匹配的数据舍弃
PS.外键所在的表叫子表或者从表,主键所在的表叫父表或者主表,所谓驱动表,就是必须遍历的表
示例select ename , dname , location
from emp_xxx t1 join dept_xxx t2 --t1 驱动表 , t2 被匹配表
on t1.deptno = t2.deptno ;
上述连接的方式可以称之为“显式内连接”,下面这种方式称之为“隐式内连接”:
select ename, dname, location
from emp_xxx t1,dept_xxx t2
where t1.deptno = t2.deptno;
外连接 outer join
left outer join 左外连接
左外连接的语法结构:
表 1 left outer join 表 2 on 条件 -- outer可以省略
1.左外连接以左边的表为驱动表,并且左边的表的记录必须全部保留,所以左边的表亦称之为保留表。 2.驱动表和被匹配表不能互换
示例下面的例子中,驱动表:emp_xxx;被匹配表:dept_xxx,结果集中包括有部门的员工和没有部门的员工:
select e.empno , ename , d.deptno , d.dname , d.location
from emp_xxx e left outer join dept_xxx d on e.deptno = d.deptno ;
right outer join 右外连接
右外连接语法结构:
表 1 right outer join 表 2 on 条件 -- outer可以省略
1.右外连接以右边的表为驱动表,并且右边的表的记录必须全部保留,所以右边的表又称之为保留表 2.驱动表和被匹配表不能互换
示例下面的语句中,驱动表:emp_xxx;被匹配表:dept_xxx,结果集中包括有部门的员工和没有部门的员工:
select e.empno , ename , d.deptno , d.dname , d.location from dept_xxx d right outer join emp_xxx e
on e.deptno = d.deptno ;
full outer join 全外连接
全外连接语法结构:
表 1 full outer join 表 2 on 条件
1.全外连接左右两张表互为驱动表和被匹配表,即两张表都会遍历一遍 2.全外连接可以把两个表中的记录全部查出来。左右两张表的记录全部都保留,即两张表都是保留表 3.全外连接的结果集 = 内连接的结果集 + 两张表找不到匹配数据的记录(对应的被匹配表的字段为空值)
示例select e.empno , e.ename , d.deptno , d.dname
from emp_xxx e full outer join dept_xxx d on e.deptno = d.deptno ;
外连接总结
1.如果驱动表在被匹配表中找不到匹配记录 , 则匹配一行空行 2.外连接的结果集 = 内连接的结果集 + 驱动表在被匹配表中匹配不上的记录(对应被匹配表的字段都是空值) 3.外连接的本质是驱动表中的数据一个都不能少 4.写外连接的习惯:
a.先写内连接
from 表1 join 表2 on 条件
b.再确定谁做驱动表,从而决定写 left、right、full 关键是确定谁做驱动表