pg数据库联合查询
时间: 2025-06-01 08:13:09 浏览: 23
### PostgreSQL 聑合查询的使用方法与示例
在 PostgreSQL 中,联合查询通常通过 `UNION` 或 `UNION ALL` 操作符实现。这些操作符用于合并两个或多个 `SELECT` 语句的结果集。以下是联合查询的基本语法和用法:
#### 基本语法
```sql
SELECT column_name(s) FROM table1
UNION [ALL]
SELECT column_name(s) FROM table2;
```
- `UNION`:默认情况下会去除重复的行。
- `UNION ALL`:保留所有行,包括重复的行。
#### 示例 1:基本联合查询
假设我们有两个表 `employees` 和 `contractors`,它们都包含 `name` 和 `salary` 列。我们希望将这两个表的数据合并在一起,并且只显示唯一的名字和薪水。
```sql
SELECT name, salary FROM employees
UNION
SELECT name, salary FROM contractors;
```
此查询将返回两个表中唯一的 `name` 和 `salary` 组合[^3]。
#### 示例 2:带有条件的联合查询
如果我们只想显示薪水大于 5000 的员工和承包商,则可以添加 `WHERE` 子句。
```sql
SELECT name, salary FROM employees WHERE salary > 5000
UNION
SELECT name, salary FROM contractors WHERE salary > 5000;
```
此查询将返回两个表中薪水大于 5000 的唯一记录[^4]。
#### 示例 3:使用 `UNION ALL`
如果我们希望保留所有行,包括重复的行,则可以使用 `UNION ALL`。
```sql
SELECT name, salary FROM employees
UNION ALL
SELECT name, salary FROM contractors;
```
此查询将返回两个表中所有的 `name` 和 `salary` 记录,包括重复的记录[^5]。
#### 注意事项
- 使用 `UNION` 时,PostgreSQL 会自动对结果进行排序并去重,这可能会增加查询的执行时间。
- 如果不需要去重并且关注性能,建议使用 `UNION ALL`。
- 所有参与联合查询的 `SELECT` 语句必须具有相同数量的列,并且对应列的数据类型应兼容。
#### 性能优化
对于复杂的联合查询,可以通过以下方式优化性能:
- 确保每个子查询中的列都具有适当的索引。
- 避免不必要的列计算或转换。
- 使用 `EXPLAIN ANALYZE` 分析查询计划,以识别潜在的性能瓶颈[^6]。
阅读全文
相关推荐
















