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 语句的可读性。