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