PostgreSQL 表别名

本文介绍了在 PostgreSQL 中为一个表指定别名的方法和用途。

在 PostgreSQL 中,除了可以为列指定别名,您也可以为表指定别名。使用表别名一般处于以下的目的:

  • 表别名可以提高 SQL 语句的可读性。
  • 表别名可以为书写 SQL 的带来便利。
  • 表别名可以解决不同表具有相同列名时可能带来的冲突。

PostgreSQL 表别名语法

要为在 PostgreSQL 中为表指定别名,请按照如下语法:

table_name [AS] table_alias;

这里,

  • table_alias 是表 table_name 的别名。
  • 如果表别名中包含空格,使用双引号 " 将别名包围起来。不过大多数情况下,使用表别名是为了简化,不建议使用带有空格的表别名。
  • AS 关键字是可选的,它可以被省略。

表别名实例

我们将使用 Sakila 示例数据库 中的表进行演示,请您先在 PostgreSQL 中安装 Sakila 示例数据库

在 Sakila 示例数据库中, film 表存储了所有的影片, inventory 表中存储影片的库存信息。

要从 film 表中查找没有库存记录的影片,请使用以下语句:

SELECT
    f.film_id,
    f.title
FROM film f
WHERE
    NOT EXISTS (
        SELECT 1
        FROM inventory i
        WHERE i.film_id = f.film_id
    );
 film_id |         title
---------+------------------------
      14 | ALICE FANTASIA
      33 | APOLLO TEEN
      36 | ARGONAUTS TOWN
      38 | ARK RIDGEMONT
      41 | ARSENIC INDEPENDENCE
      87 | BOONDOCK BALLROOM
...
     954 | WAKE JAWS
     955 | WALLS ARTIST
(42 rows)

这里,我们为 film 指定了别名 f,为 inventory 表指定了别名 i。 请注意 EXISTS 表达式使用的子查询中的 WHERE 子句:

WHERE i.film_id = f.film_id

其中,比较来自 film 表中的 film_id 和 来自 inventory 表中 film_id 是否相等。 由于两个表使用了相同的列名 film_id, 因此这里使用了他们别名,以标识是来自哪个表的 film_id

如果不使用别名,您还可以直接使用表名来引用列,如下:

WHERE inventory.film_id = film.film_id

结论

在 PostgreSQL 中,表别名可以简化 SQL 语句书写,增加 SQL 语句的可读性。