一、UNION连接
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
语法:
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: 可选,返回所有结果集,包含重复数据。
示例:
SELECT name FROM man
UNION ALL
SELECT name FROM woman
ORDER BY name;
下面的 SQL 语句使用 UNION ALL 从 "man" 和 "woman" 表中选取所有的name。
二、JOIN内连接
JOIN(INNER JOIN)称作内连接,或等值连接:获取两个表中字段匹配关系的记录。
示例:
SELECT a.name, b.city FROM student a JOIN people b ON a.name= b.name;
内连接相当于数学里面的交集。
三、LEFT JOIN左连接
left join 与 join 有所不同。
LEFT JOIN称作左连接:获取左表所有记录,即使右表没有对应匹配的记录。
示例:
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
以上实例中使用了 LEFT JOIN,该语句会读取左边的数据表 runoob_tbl 的所有选取的字段数据,即便在右侧表 tcount_tbl中 没有对应的 runoob_author 字段值。
四、RIGHT JOIN右连接
RIGHT JOIN称作右连接: 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
示例:
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
以上实例中使用了 RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即便在左侧表 runoob_tbl 中没有对应的runoob_author 字段值。
注意:左连接和右连接只是主表不同,要明确主表是谁,在什么位置。若主表在左侧则使用左连接,反之则使用右连接。