📜  PostgreSQL – 创建表作为

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

PostgreSQL – 创建表作为

在 PostgreSQL 中,CREATE TABLE AS 语句用于创建一个新表并用查询返回的数据填充它。

Syntax:
CREATE TABLE new_table_name
AS query;

我们来分析一下上面的语法:

  • 首先,在 CREATE TABLE 子句之后指定新表名。
  • 最后,提供一个查询,其结果集添加到新表中的 AS 关键字之后。

TEMPORARY 或 TEMP 关键字允许您创建临时表:

Syntax:
CREATE TEMP TABLE new_table_name 
AS query;

UNLOGGED 关键字允许将新表创建为未unlogged表:

Syntax:
CREATE UNLOGGED TABLE new_table_name
AS query;

新表的列将具有与 SELECT 子句的输出列相关联的名称和数据类型。 如果您希望表列具有不同的名称,可以在新表名称后指定新表列,如下所示:



Syntax:
CREATE TABLE new_table_name ( column_name_list)
AS query;

如果您想通过创建一个已经存在的新表来避免错误,您可以使用 IF NOT EXISTS 选项,如下所示:

Syntax:
CREATE TABLE IF NOT EXISTS new_table_name
AS query;

例如,我们将使用示例数据库(即 dvdrental)。
示例 1:
在此示例中,我们将使用film_category表,使用以下语句创建属于类别 1 的动作电影表:

CREATE TABLE action_film AS
SELECT
    film_id,
    title,
    release_year,
    length,
    rating
FROM
    film
INNER JOIN film_category USING (film_id)
WHERE
    category_id = 1 ;

现在我们可以使用以下语句验证新表:

SELECT * FROM action_film ORDER BY title;

输出:

示例 2:
在本例中,我们将创建一个新表film_rating并使用以下语句使用film表中的摘要数据填充它:

CREATE TABLE IF NOT EXISTS film_rating (rating, film_count) 
AS 
SELECT
    rating,
    COUNT (film_id)
FROM
    film
GROUP BY
    rating;

现在要验证新表,请使用以下语句:

SELECT * FROM film_rating;

输出: