↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 6.4
历史版本PostgreSQL 6.4 已于 2003 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

15.6. 类之间的连接

到目前为止,我们的查询一次只访问一个类。 查询可以一次访问多个类,或者 以某种方式访问同一个类,使得该类的多个 实例同时被处理。 一次访问同一个或不同类的多个实例的查询 称为连接 查询。 例如,假设我们希望找出所有 处于其他记录温度范围内的记录。 实际上,我们需要把每个 EMP 实例的 temp_lo 和 temp_hi 属性与 所有其他 EMP 实例的 temp_lo 和 temp_hi 属性进行比较。

注意

这只是一种概念模型。实际的连接可能 以更高效的方式执行,但这对用户是不可见的。

我们可以用以下查询做到这一点:

SELECT W1.city, W1.temp_lo, W1.temp_hi,
    W2.city, W2.temp_lo, W2.temp_hi
    FROM weather W1, weather W2
    WHERE W1.temp_lo < W2.temp_lo
    AND W1.temp_hi > W2.temp_hi;

+--------------+---------+---------+---------------+---------+---------+
|city          | temp_lo | temp_hi | city          | temp_lo | temp_hi |
+--------------+---------+---------+---------------+---------+---------+
|San Francisco | 43      | 57      | San Francisco | 46      | 50      |
+--------------+---------+---------+---------------+---------+---------+
|San Francisco | 37      | 54      | San Francisco | 46      | 50      |
+--------------+---------+---------+---------------+---------+---------+

注意

这种连接的语义是: 限定条件 是为查询中指定的各类的笛卡尔积定义的 真值表达式。对于笛卡尔积中限定条件 为真的那些实例, Postgres 计算并返回 选择列表中指定的值。Postgres SQL 不为 此类表达式中的重复值赋予 任何意义。这意味着 Postgres 有时会重复计算同一选择列表 多次;当布尔表达式用 "or" 连接时经常发生这种情况。要去除此类重复,必须 使用 select distinct 语句。

在本例中,W1 和 W2 都是类 weather 一个实例的 代理(surrogate),二者都取遍 该类的所有实例。(用大多数 数据库系统的术语来说,W1 和 W2 被称为范围变量。) 查询可以包含任意数量的 类名和代理。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。