↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.0 / 6.5 / 6.4 / 6.3
历史版本。 PostgreSQL 6.4 已结束支持。 请参阅 当前版本手册.

4.7. 类之间的连接

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

注意

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

我们可以用下面的查询做到:

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

+--------------+-----+------+---------------+-----+------+
|city          | low | high | city          | low | high |
+--------------+-----+------+---------------+-----+------+
|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 中某个实例的替身,二者都遍历该类的所有实例。(用大多数数据库系统的术语说,W1 和 W2 被称为范围变量。)查询可以包含任意数量的类名和替身。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.