04、MySQL连接查询之外连接

外连接

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

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

#进阶七、连接查询、多表查询
/*
连接查询的分类:
1、按年代分
	SQL92标准:在MySQL中仅仅支持内连接
	SQL99标准(推荐):支持所有内连接、外连接(左外连接、右外连接)、交叉连接
2、按功能分
	内连接
		等值连接
		非等值连接
		自连接
	外连接
		左外连接
		右外连接
		全外连接
	交叉连接
*/
/*
应用场景:一般用于查找主表有,而从表没有的记录。
特点:
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;
-- 全外连接 = 左连接 + 右连接
#两张表都做主表和从表
#没有效果

#查询编号>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;

猜你喜欢

转载自www.cnblogs.com/shawnyue-08/p/13367974.html
今日推荐