一步一步学MySQL----14 夺标数据记录查询之外连接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013003827/article/details/68936803

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员工的相应信息。

猜你喜欢

转载自blog.csdn.net/u013003827/article/details/68936803