7、连接查询之外连接

外连接

beauty表

boys表

外连接:查询结果为主表的所有记录,如果从表有匹配项,那么显示该匹配项,否则显示NULL。

当beauty表是主表,boys是从表,左外连接,当beauty中的记录在boys中没有匹配的时,boyname字段显示NULL。

#进阶七、连接查询、多表查询
/*
应用场景:一般用于查找主表有,而从表没有的记录。
特点:
1、外连接,分主从表,所以两个表的顺序不能替换;
2、左连接:左边为主表
3、右连接:右边为主表

语法:
select 查询列表
from 表1 别名1
left|right [outer] join 表2 别名2
on 连接条件;
*/
#查询所有女神记录,对应的男神名,如果没有对应的。那么显示为NULL
#左外连接
SELECT beauty.*, boys.`boyName`
FROM beauty
LEFT JOIN boys
ON beauty.`boyfriend_id` = boys.`id`; 
#右外连接
SELECT beauty.*, boys.`boyName`
FROM boys
RIGHT JOIN beauty
ON beauty.`boyfriend_id` = boys.`id`;

#查询没有配对的女神信息
SELECT beauty.`name`
FROM beauty
LEFT JOIN boys 
ON beauty.`boyfriend_id` = boys.`id`
WHERE boys.`boyName` IS NULL;

#查询哪个部门没有员工,并显示其部门编号和部门名
SELECT d.`department_id`, d.`department_name`
FROM departments d
LEFT JOIN employees e
ON d.department_id = e.`department_id`
WHERE e.`department_id` IS NULL;
-- 全外连接 = 左连接 + 右连接
#两张表都做主表和从表
#没有效果


左外连接:A表(主表)所有记录 + B表(从表)匹配的记录;
右外连接:B表(主表)所有记录 + A表(从表)匹配记录。


内连接、外连接之查询未匹配的记录。

#查询编号>3的女神的男朋友信息,如果有则列出详细,如果没有,以null显示
SELECT beauty.`name`, beauty.`id`, boys.*
FROM beauty
LEFT JOIN boys
ON beauty.boyfriend_id = boys.`id`
WHERE beauty.`id` > 3;

#查询哪个城市没有部门
#左外连接,主表城市,从表部门
SELECT l.`city`, d.`department_id`, d.`department_name`
FROM locations l
LEFT JOIN departments d
ON l.`location_id` = d.`location_id`
WHERE d.`department_id` IS NULL;

猜你喜欢

转载自blog.csdn.net/ShawnYue_08/article/details/107809113