14.1 外连接之左连接
所谓左连接,就是指新关系中执行匹配条件时,以关键字left join左边的表为参考表。
例如:执行SQL语句“left join on”,在数据库company中,查询每个员工的姓名、工种、领导姓名。由于名为Jones的员工已经是manager,所以没有领导信息,本例中要显示名为Jones员工的信息。
【实例分析】
(1) 确定需要查询的表和所查询字段的来源
根据需求需要查询两张表:员工表和领导表,前者需要查询出员工的姓名和工种,后者需要查询出领导的姓名。
(2) 确定关联匹配条件
eployee.mgno(员工表的领导工号)=employee.empno(领导表的领导工号)
【实现步骤】
第一步:查询每一位员工的姓名和工种
mysql> select e.ename employeename,e.job from employee e;
第二步:引入领导表,同时添加一条消除笛卡尔积的匹配条件
mysql> select e.ename employeename,e.job,l.ename loadername from employee e left join employee l on e.mgno=l.empno;
14.2 外连接之右连接
所谓右连接,就是指新关系中执行匹配条件时,以关键字right join右边的表为参考表。
在这里我们先在employee表中添加一条记录,如下:
mysql> insert into employee(empno,ename,job,mgno,Hiredate,salary,bonus,depno)values(1009,”Kuli”,”Research”,1004,2013-07-20,6000,4000,16);
我们注意到,新添加的这个员工所在部门16不在department当中。
例如:执行SQL语句 “right join on”,在数据库company中,查询每个员工的工号、姓名、工种、部门名称、位置。由于名为Kuli的员工所在部门编号16在部门表department中不存在,所以该员工信息没有部门信息,本例中要显示出名为Kuli员工的信息。
【实例分析】
(1) 确定需要查询的表和所查询字段的来源
根据要求需要查询两张表,员工表和部门表,前者需要查询出员工的工号、姓名、工种,后者需要查询出部门名称和位置。
(2) 确定关联匹配条件
department.depno=employee.depno;
【实现步骤】
第一步:查询每一位员工的工号、姓名、工种
mysql> select e.empno,e.ename,e.job from employee e;
第二步:引入部门表,同时添加一条消除笛卡尔积的匹配条件
mysql> select e.empno,e.ename,e.job,d.dname,d.location from department d right join employee e on d.depno=e.depno;
执行结果显示了所有员工的工号、姓名、工种、部门名称、部门位置,同时还显示出了Kuli员工的相应信息。