在SQL中,联合查询(Union Query)是一种将两个或多个SELECT语句的结果集合并成一个结果集的操作。联合查询要求各个SELECT语句的列数和数据类型必须相同。以下是使用联合查询的基本步骤:
SELECT column1, column2, ...
FROM table1
WHERE condition
UNION [ALL]
SELECT column1, column2, ...
FROM table2
WHERE condition;
UNION:默认情况下,UNION会去除重复的行。UNION ALL:保留所有行,包括重复的行。假设有两个表 employees_usa 和 employees_europe,它们的结构相同,包含员工的姓名和工资信息。
CREATE TABLE employees_usa (
id INT,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
CREATE TABLE employees_europe (
id INT,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees_usa (id, name, salary) VALUES (1, 'John Doe', 50000.00);
INSERT INTO employees_usa (id, name, salary) VALUES (2, 'Jane Smith', 60000.00);
INSERT INTO employees_europe (id, name, salary) VALUES (3, 'Alice Johnson', 55000.00);
INSERT INTO employees_europe (id, name, salary) VALUES (4, 'Bob Brown', 65000.00);
SELECT name, salary
FROM employees_usa
WHERE salary > 50000
UNION
SELECT name, salary
FROM employees_europe
WHERE salary > 50000;
这个查询会返回所有工资大于50000的员工,无论他们来自哪个地区,并且不会重复显示相同的记录。
UNION 默认会对结果进行排序,而 UNION ALL 不会。如果需要特定的排序,可以在最后添加 ORDER BY 子句。UNION 需要去重,可能会比 UNION ALL 慢一些,特别是在大数据集上。使用别名:可以为每个SELECT语句中的列指定别名,以便在结果集中更容易识别。
SELECT name AS EmployeeName, salary AS Salary
FROM employees_usa
WHERE salary > 50000
UNION
SELECT name AS EmployeeName, salary AS Salary
FROM employees_europe
WHERE salary > 50000;
嵌套查询:可以在联合查询中使用子查询。
SELECT name, salary
FROM (
SELECT name, salary
FROM employees_usa
WHERE salary > 50000
UNION ALL
SELECT name, salary
FROM employees_europe
WHERE salary > 50000
) AS combined_results;
通过这些基本操作和高级用法,你可以灵活地在SQL中使用联合查询来合并多个数据源的结果集。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。