八月 29, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的SELECT INTO
语句从查询结果集创建新表。
目录
如果您正在寻找将数据查询赋值到变量中的方法,请查看 PL/pgSQL SELECT INTO 语句。
PostgreSQL SELECT INTO 语句简介
PostgreSQL 的SELECT INTO
语句创建一个新表,并将查询返回的数据插入到表中。
新表将包含与查询结果集的列名称相同的列。与常规 SELECT 语句不同,SELECT INTO
语句不会将结果返回给客户端。
下面说明了 PostgreSQL 的SELECT INTO
语句的语法:
SELECT
select_list
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table_name
FROM
table_name
WHERE
search_condition;
要使用从结果集派生的结构和数据创建新表,请在INTO
关键字后指定新表名称。
TEMP
或TEMPORARY
关键字是可选的;它允许您创建一个临时表。
UNLOGGED
关键字(如果指定)将使新表成为不记录日志的表。
WHERE
子句允许您指定应插入到新表中的原始表中的行。除了该WHERE
子句之外,您还可以在SELECT
语句中使用其他子句作为SELECT INTO
语句,例如INNER JOIN
、LEFT JOIN
、GROUP BY
和HAVING
。
请注意,您不能在 PL/pgSQL 中使用该SELECT INTO
语句,因为它以不同的方式解释INTO
子句。在这种情况下,您可以使用提供比该SELECT INTO
语句更多功能的CREATE TABLE AS
语句。
PostgreSQL SELECT INTO 示例
我们将使用示例数据库中的film
表进行演示。
以下语句创建一个名为film_r
的新表,其中包含film
表中评级R
和租赁持续时间为 5 天的电影。
SELECT
film_id,
title,
rental_rate
INTO TABLE film_r
FROM
film
WHERE
rating = 'R'
AND rental_duration = 5
ORDER BY
title;
为了验证表的创建,可以从film_r
表中查询数据:
SELECT * FROM film_r;
以下语句创建一个名为short_film
的临时表,其中包含长度低于 60 分钟的电影。
SELECT
film_id,
title,
length
INTO TEMP TABLE short_film
FROM
film
WHERE
length < 60
ORDER BY
title;
short_film
表中数据如下所示:
SELECT * FROM short_film;
在本教程中,您学习了如何使用 PostgreSQL 的SELECT INTO
语句从查询结果集创建新表。