MySQL学习-多表查询(六)

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情

前言

上篇我们又学习了一部分多表查询。有兴趣的小伙伴可以阅读(# MySQL学习-多表查询(五))。
下面继续学习MySQL中的多表查询。

7种JOIN的实现

内连接

示例一

SELECT e.employee_id, d.department_name
FROM employees e JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

上面的示例实现了内连接,使用了JOIN实现。

左外连接

示例二

SELECT e.employee_id, d.department_name
FROM employees e LEFT JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

上面的示例实现了左外连接,使用了LEFT JOIN实现。

右外连接

示例二

SELECT e.employee_id, d.department_name
FROM employees e RIGHT JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

上面的示例实现了右外连接,使用了RIGHT JOIN实现。

左外连接不包含内连接

示例三

首先实现左外连接,然后去掉内连接的部分。怎么去掉内连接,内连接是两个表相等的部分,也就是不为NULL的部分。去掉不是NULL的,也就是要是NULL的。我们可以使用WHERE语句,获取是NULL的数据。

SELECT e.employee_id, d.department_name
FROM employees e LEFT JOIN departments d
ON e.'department_id' = d.'department_id'
WHERE d.'department_id' IS NULL
复制代码

上面的示例实现了左外连接不包含内连接,使用了LEFT JOIN配合WHERE语句实现。

右外连接不包含内连接

示例四

首先实现右外连接,然后去掉内连接的部分。怎么去掉内连接,内连接是两个表相等的部分,也就是不为NULL的部分。去掉不是NULL的,也就是要是NULL的。我们可以使用WHERE语句,获取是NULL的数据。

SELECT e.employee_id, d.department_name
FROM employees e RIGHT JOIN departments d
ON e.'department_id' = d.'department_id'
WHERE e.'department_id' IS NULL
复制代码

上面的示例实现了右外连接不包含内连接,使用了RIGHT JOIN配合WHERE语句实现。

满外连接

示例五

方式1:

使用左外连接与右外连接不包含内连接合并(UNION ALL)

SELECT e.employee_id, d.department_name
FROM employees e LEFT JOIN departments d
ON e.'department_id' = d.'department_id'
UNION ALL
SELECT e.employee_id, d.department_name
FROM employees e RIGHT JOIN departments d
ON e.'department_id' = d.'department_id'
WHERE e.'department_id' IS NULL
复制代码

上面的示例实现了满外连接,使用了LEFT JOIN和RIGHT JOIN配合WHERE语句实现。

方式2:

使用右外连接与右外连接不包含内连接合并(UNION ALL)

SELECT e.employee_id, d.department_name
FROM employees e RIGHT JOIN departments d
ON e.'department_id' = d.'department_id'
UNION ALL
SELECT e.employee_id, d.department_name
FROM employees e LEFT JOIN departments d
ON e.'department_id' = d.'department_id'
WHERE d.'department_id' IS NULL
复制代码

上面的示例也实现了满外连接,使用了RIGHT JOIN和LEFT JOIN配合WHERE语句实现。

满外连接不包含内连接

示例六

使用左外连接不包含内连接与右外连接不包含内连接合并(UNION ALL)

SELECT e.employee_id, d.department_name
FROM employees e RIGHT JOIN departments d
ON e.'department_id' = d.'department_id'
WHERE e.'department_id' IS NULL
UNION ALL
SELECT e.employee_id, d.department_name
FROM employees e LEFT JOIN departments d
ON e.'department_id' = d.'department_id'
WHERE d.'department_id' IS NULL
复制代码

上面的示例实现了满外连接不包含内连接,使用了LEFT JOIN配合WHERE语句和RIGHT JOIN配合WHERE语句实现。

以上示例总结了7种JOIN的实现,同时也学习了MySQL中满外连接的两种实现方式。

今天先学习到这里,明天继续。

猜你喜欢

转载自juejin.im/post/7087942699973607438
今日推荐