关系数据库(七):MySQL中UNION和JOIN操作符

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 字段值。

猜你喜欢

转载自blog.csdn.net/weixin_43145427/article/details/124143567