PostgreSQL – SELECT INTO
在 PostgreSQL 中,SELECT INTO 语句允许用户创建新表并插入查询返回的数据。新表列的名称和数据类型与 SELECT 子句的输出列相关联。与 SELECT 语句不同,SELECT INTO 语句不向客户端返回数据。
Syntax:
SELECT
column_list
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table_name
FROM
table_name
WHERE
condition;
在使用从查询结果集派生的结构和数据创建新表的过程中,必须在 INTO 子句中指定新表名。 TEMP 或 TEMPORARY 关键字是可选的;它允许用户创建临时表。
WHERE 子句允许用户指定应插入新表的原始表中的数据。除了 WHERE 子句,在 SELECT INTO 语句中还可以使用 SELECT 语句中的其他子句,例如 INNER JOIN、LEFT JOIN、GROUP BY 和 HAVING。
现在让我们看一些例子。例如,我们将使用示例数据库(即 dvdrental)。
示例 1:
在此示例中,我们将使用dvdrental
film
表创建一个名为film_r
的新表,该表包含所有评级为R
且租期为 5 天的电影,使用以下语句:
SELECT
film_id,
title,
rental_rate
INTO TABLE film_r
FROM
film
WHERE
rating = 'R'
AND rental_duration = 5
ORDER BY
title;
现在我们可以使用以下语句验证创建的表:
SELECT
*
FROM
film_r;
输出:
示例 2:
在此示例中,我们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;
输出:
注意:不能在 PL/pgSQL 或 ECPG 中使用 SELECT INTO 语句,因为它们对 INTO 子句的解释不同。在这种情况下,您可以使用 CREATE TABLE AS 语句,它提供比 SELECT INTO 语句更多的功能。