MySQL--外连接查询

外连接查询

特点:查询结果至少是一个表的所有记录

 语法:select f1,f2,f3,....
        from table1 left/right outer join table2
        on 条件;

(1)左外连接

from table1 left outer join table2

驱动表 table1
匹配表 table2

查询结果是table1驱动表的所有记录

回顾:查询每个员工的姓名,职位和领导的姓名
使用内连接(自连接)的连接方式
分析:
表 t_employee e 员工表
t_employee m 领导表
关联条件 员工表.领导编号=领导表.员工编号
e.MGR=m.empno

select e.ename,e.job,m.ename
      from t_employee e inner join t_employee m
      on e.MGR=m.empno;

查询结果是13条数据,少了一条king的数据,king没有
上级领导,所以king这条数据没有显出出来。

内连接查询的特点:符合条件查询出来,不符合条件过滤掉。

使用左外连接查询

分析:
驱动表 t_employee e 员工表
匹配表 t_employee m 领导表
关联条件 e.MGR=m.empno

select e.ename,e.job,m.ename
      from t_employee e left outer join t_employee m 
      on e.MGR=m.empno;

查询结果为14条数据,t_employee e员工表为驱动表,
查询结果显示驱动表中所有的数据。

t_employee员工表插入一条在50部门的员工信息。
在t_dept表中只有10,20,30,40部门,没有50部门。

 insert into t_employee values
 (7999,'xiaohong','clerk',7782,19811016,5200,null,50);

说明:
t_employee 员工表
15条数据,员工分别在10,20,30,50部门
t_dept 部门表
4条数据,有10,20,30,40部门
例子:查询每个员工的编号、姓名、职位、部门名称和位置

方式1:使用内连接查询的方式

分析:表 t_employee e 员工表
t_dept d 部门表
关联关系 员工表的部门编号=部门表的部门编号
e.deptno=d.deptno

select e.empno,e.ename,e.job,d.dname,d.loc
     from t_employee e inner join t_dept d
     on  e.deptno=d.deptno;

查询结果是14条数据,内连接查询的特点是符合条件的
会查询出结果,不符合条件的会过滤掉。

xiaohong是50部门,在部门表中未匹配到50部门,过滤掉
operations是40部门,未匹配到有员工在40部门,过滤掉

方式2:使用左外连接查询的方式

分析:驱动表 t_employee e 员工表
匹配表 t_dept d 部门表
关联关系 e.deptno=d.deptno
查询的结果是驱动表中的所有数据

select e.empno,e.ename,e.job,d.dname,d.loc
     from  t_employee e left outer join t_dept d
     on e.deptno=d.deptno;

查询结果是15条数据,查询结果是驱动表t_employee表中的全部数据,外连接查询的特点是符合关联条件的正常显示数据,如果不符合关联条件,查询不到数据,会使用null代替。

(2)右外连接

  from table1 right outer join table2

驱动表 table2
匹配表 table1

查询结果是table2驱动表的所有记录

使用右外连接的方式

分析:
驱动表 t_dept d 部门表
匹配表 t_employee e 员工表
关联关系 d.deptno=e.deptno

select e.empno,e.ename,d.deptno,d.dname,d.loc
     from t_employee e right outer join t_dept d
     on e.deptno=d.deptno;

显示结果是15条数据,显示的结果是部门表的全部数据,部门表是4条数据,显示结果是15条,因为有的部门匹配到了多名员工的数据。

10部门20部门30部门都匹配到了多名员工的信息,40部门没有匹配到员工的信息,用null代替。

上一篇:Oracle笔记17——Oracle视图


下一篇:Oracle多表关联