📜  PostgreSQL – SELECT INTO

📅  最后修改于: 2022-05-13 01:57:15.064000             🧑  作者: Mango

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 语句更多的功能。