union 并联select 查询的结果集 并去重
union all 并联select 查询的结果集 不去重
例子:
-- 假设有两个表 t1 和 t2,它们结构相同,包含 id 和 name 两列
-- 要查询这两个表中的所有记录,并将结果按照 id 升序排列
-- 使用 UNION 去重
SELECT id, name FROM t1
UNION
SELECT id, name FROM t2
ORDER BY id ASC;
-- 使用 UNION ALL 不去重
SELECT id, name FROM t1
UNION ALL
SELECT id, name FROM t2
ORDER BY id ASC;
使用 UNION
合并两个或多个表的结果集时,需要注意以下几点:
UNION
要求每个 SELECT 语句返回的列数必须相等,并且对应位置的列数据类型必须兼容,否则会导致合并失败。UNION
会自动去重,即每个结果集只会出现一次。如果需要保留重复的记录,可以选择使用UNION ALL
。UNION
的执行效率较低,因为它需要对每个 SELECT 语句的结果集进行去重和排序操作。如果数据量较大,建议使用其他方式来代替 UNION 操作。
SELECT DISTINCT * FROM t
这条 SQL 语句的含义为从表 t
中选取所有不同的行。其中的 DISTINCT
关键字用于去除重复的记录行,而 *
表示返回所有列。
举个例子,假设有一张名为 students
的表,包含以下记录:
id | name | age | gender |
---|---|---|---|
1 | Tom | 18 | Male |
2 | Mary | 20 | Female |
3 | Tom | 18 | Male |
如果我们执行以下 SQL 语句:
SELECT DISTINCT * FROM students;
则查询结果将会是:
id | name | age | gender |
---|---|---|---|
1 | Tom | 18 | Male |
2 | Mary | 20 | Female |
在这里,DISTINCT
关键字去掉了重复的记录行(即第一行和第三行),返回了不同的记录行。