PostgreSQL 教程: SELECT INTO

八月 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关键字后指定新表名称。

TEMPTEMPORARY关键字是可选的;它允许您创建一个临时表

UNLOGGED关键字(如果指定)将使新表成为不记录日志的表。

WHERE子句允许您指定应插入到新表中的原始表中的行。除了该WHERE子句之外,您还可以在SELECT语句中使用其他子句作为SELECT INTO语句,例如INNER JOINLEFT JOINGROUP BYHAVING

请注意,您不能在 PL/pgSQL 中使用该SELECT INTO语句,因为它以不同的方式解释INTO子句。在这种情况下,您可以使用提供比该SELECT INTO语句更多功能的CREATE TABLE AS语句。

PostgreSQL SELECT INTO 示例

我们将使用示例数据库中的film表进行演示。

PostgreSQL SELECT INTO sample table

以下语句创建一个名为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;

img

以下语句创建一个名为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;

img

在本教程中,您学习了如何使用 PostgreSQL 的SELECT INTO语句从查询结果集创建新表。