0
点赞
收藏
分享

微信扫一扫

MySql学习笔记-多表查询2-内外连接

萧让听雪 2022-01-22 阅读 47

内连接与外连接

课件均来源于b站尚硅谷,详细请移步b站
所有笔记链接

内连接:合并有同一列的多个表的行,结果集只包含表中相匹配的行

#下面就是MySQL92内连接:结果集就是相匹配的行
SELECT employee_id, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id


#MySQL99的内连接,JOIN连接表,ON实现连接的关系
SELECT employee_id, department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id		#连接关系

外连接:合并具有同一列的两个以上的表的行,结果集中除了相匹配的行之外,还查询到了左、右表中不匹配WHERE中条件的行

外连接分类:左外连接、右外连接、满外连接(左右都有)


实验中表的关系:

img

例题:

#SQL92的语法(MySQL不支持)
SELECT employee_id, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+)
#SQL99的语法
#左外连接
SELECT last_name, department_name
FROM employees e LEFT OUTER JOIN departments d	#OUTER 和 INNER都是可以省略的
ON e.department_id = d.department_id;


UNION的使用

使用UNION,顾名思义就是将集合联合起来,但是还是区分UNION和UNION ALL

其中UNION是对于两个集合取交集并且去除掉重复的记录

UNION ALL就是纯粹的取交集,不会去除掉重复的部分

UNION:

在这里插入图片描述

UNION ALL

在这里插入图片描述

7种SQL JOINS的实现

在这里插入图片描述

SELECT employee_id, department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id		#连接关系
SELECT employee_id, department_name
FROM employees e LEFT OUTER JOIN departments d	#OUTER 和 INNER都是可以省略的
ON e.department_id = d.department_id;

SELECT employee_id, department_name
FROM employees e RIGHT OUTER JOIN departments d	#OUTER 和 INNER都是可以省略的
ON e.department_id = d.department_id;

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
SELECT employee_id, last_name, department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL

UNION ALL  #两表分开写,中间UNION ALL

SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL
举报

相关推荐

0 条评论