前言
学习MySQL过程中对连接查询里的外连接查询理解起来比较模糊,故而以此博客总结一下学习心得以便加深印象!与诸君共勉!
一、外连接
外连接查询是以指定表为连接主体,将主体表中不满足连接条件的元组一并输出。接下来分别介绍外连接中的各类:左外连接、右外连接。
1、左外连接
左外连接是指将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括左表中不符合条件的数据,并在右表的相应位置列中添加NULL值。
案例:查询哪个部门没有员工?
SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` IS NULL;;
运行部分结果如下:
?解析:要查询那个部门没有员工,首先连接departemts表和employees表,连接条件为departments表中的部门号与employees表中的部门号相同时的信息,同时通过查询的员工号来确定没有员工的部门,如结果所示所有employee_id为null值的信息即为题中所求。
2、右外连接
右外连接是指将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括右表中不符合条件的数据,并在左表的相应位置列中添加NULL值。
案例:依旧可以使用左外连接的案例 查询哪个部门没有员工?
当我们调换一下左表与右表的位置是可以使右外连接和左外连接的结果相同。
#右外连接
SELECT d.*,e.employee_id
FROM employees e
RIGHT OUTER JOIN departments d
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` IS NULL;
解析:左外和右外交换两个表的顺序,可以实现同样的效果?
3、外连接总结
应用场景:用于查询一个表中有,另一个表没有的记录
特点:?1、外连接的查询结果为主表中的所有记录 ? ? ? ? ? ? ? ? ? ? ? ?如果从表中有和它匹配的,则显示匹配的值 ? ? ? ? ? ? ? ? ? ? ? ?如果从表中没有和它匹配的,则显示null ? ? ? ? ? ? ? ? ? ? ? ?外连接查询结果=内连接结果+主表中有而从表没有的记录 ?2、左外连接,left join左边的是主表 ? ? ? ? ? 右外连接,right join右边的是主表 ?3、左外和右外交换两个表的顺序,可以实现同样的效果?
|