一起养成写作习惯!这是我参与「掘金日新计划 · 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中满外连接的两种实现方式。
今天先学习到这里,明天继续。