建设 网站工作汇报,杭州网站建设公司导航,中国无法访问wordpress,广告拍摄制作公司【重学 MySQL】二十七、七种 join 连接 union 的使用UNION 的基本用法示例UNION ALL 的用法 七种 join 连接代码实现语法格式小结 union 的使用
UNION 在 SQL 中用于合并两个或多个 SELECT 语句的结果集#xff0c;并默认去除重复的行。如果希望包含重复行#xff0c;可以使… 【重学 MySQL】二十七、七种 join 连接 union 的使用UNION 的基本用法示例UNION ALL 的用法 七种 join 连接代码实现语法格式小结 union 的使用
UNION 在 SQL 中用于合并两个或多个 SELECT 语句的结果集并默认去除重复的行。如果希望包含重复行可以使用 UNION ALL。
UNION 的基本用法
当你想要将两个或多个 SELECT 语句的结果合并成一个结果集时可以使用 UNION。每个 SELECT 语句必须拥有相同数量的列并且对应列的数据类型也需要兼容。
语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;默认情况下UNION 会从结果集中删除重复的行。如果要包含所有重复行请使用 UNION ALL。
示例
假设我们有两个表employees_usa 和 employees_europe它们都有 employee_id 和 employee_name 这两列。
employees_usa 表
employee_idemployee_name1John Doe2Jane Smith
employees_europe 表
employee_idemployee_name3Peter Brown2Jane Smith
如果我们想要合并这两个表的结果但不包含重复的行我们可以这样做
SELECT employee_id, employee_name FROM employees_usa
UNION
SELECT employee_id, employee_name FROM employees_europe;这将返回
employee_idemployee_name1John Doe2Jane Smith3Peter Brown
注意尽管 Jane Smith 在两个表中都出现但在结果集中只出现了一次因为 UNION 默认去除了重复的行。
UNION ALL 的用法
如果你想要包含所有重复的行可以使用 UNION ALL。
语法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;使用 UNION ALL 重复上面的例子
SELECT employee_id, employee_name FROM employees_usa
UNION ALL
SELECT employee_id, employee_name FROM employees_europe;这将返回
employee_idemployee_name1John Doe2Jane Smith3Peter Brown2Jane Smith
现在Jane Smith 出现了两次因为 UNION ALL 保留了所有行包括重复的行。
七种 join 连接 代码实现
#中图内连接 A∩B
SELECT employee_id,last_name,department_name
FROM employees e 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;#右上图右外连接
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id d.department_id;#左中图A - A∩B
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#右中图B-A∩B
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#左下图满外连接
# 左中图 右上图 A∪B
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;#右下图
#左中图 右中图 A ∪B- A∩B 或者 (A - A∩B) ∪ B - A∩B
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语法格式小结
左中图
#实现A - A∩B
select 字段列表
from A表 left join B表
on 关联条件
where 从表关联字段 is null and 等其他子句;右中图
#实现B - A∩B
select 字段列表
from A表 right join B表
on 关联条件
where 从表关联字段 is null and 等其他子句;左下图
#实现查询结果是A∪B
#用左外的Aunion 右外的B
select 字段列表
from A表 left join B表
on 关联条件
where 等其他子句union select 字段列表
from A表 right join B表
on 关联条件
where 等其他子句;右下图
#实现A∪B - A∩B 或 (A - A∩B) ∪ B - A∩B
#使用左外的 (A - A∩B) union 右外的B - A∩B
select 字段列表
from A表 left join B表
on 关联条件
where 从表关联字段 is null and 等其他子句unionselect 字段列表
from A表 right join B表
on 关联条件
where 从表关联字段 is null and 等其他子句