UNION 操作符
描述
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
语法
MySQL UNION 操作符语法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
参数
-
expression1, expression2, ... expression_n: 要检索的列。
-
tables: 要检索的数据表。
-
WHERE conditions: 可选, 检索条件。
-
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
-
ALL: 可选,返回所有结果集,包含重复数据。
UNION 实例
# 下面的 SQL 语句从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值):
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
注释:UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。使用 UNION ALL 来选取重复的值!
UNION ALL 实例
# 使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(包含重复的值):
SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
# 带有 WHERE 的 SQL UNION ALL
使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(包含重复的值):
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
JOIN操作符
使用 MySQL 的 JOIN 可以在两个或多个表中查询数据。
可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询、更新和删除
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
示例
在数据库中有两张表hanscal_tb 和 hanke_tb:
INNER JOIN
# INNER JOIN 示例
SELECT a.hanscal_id, a.hanscal_author, b.hanscal_count FROM hanscal_tb a \
INNER JOIN hanke_tb b ON a.hanscal_author = b.hanscal_author;
# 以上 SQL 语句等价于,带有where子句的INNER_JOIN示例
SELECT a.hanscal_id, a.hanscal_author, b.hanscal_count FROM hanscal_tb a hanke_tb b \
WHERE a.hanscal_author = b.hanscal_author;
LEFT JOIN
MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
实例
# 以 hanscal_tb 为左表,hanke_tb 为右表:
SELECT a.hanscal_id, a.hanscal_author, b.hanscal_count FROM hanscal a \
LEFT JOIN hanke_tb b ON a.hanscal_author = b.hanscal_author;
以上实例中使用了 LEFT JOIN,该语句会读取左边的数据表 hanscal_tb 的所有选取的字段数据,即便在右侧表 hanke_tb中 没有对应的 hanscal_author 字段值。
RIGHT JOIN
MySQL RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。
实例
# 以 hanscal_tb 为左表,hanke_tb 为右表:
SELECT a.hanscal_id, a.hanscal_author, b.hanscal_count FROM hanscal a \
RIGHT JOIN hanke_tb b ON a.hanscal_author = b.hanscal_author;
以上实例中使用了 RIGHT JOIN,该语句会读取右边的数据表 hanke_tb 的所有选取的字段数据,即便在左侧表 hanscal_tb 中没有对应的hanscal_author 字段值。