Skip to content

SQL Select Into

SQL SELECT INTO 与 CREATE TABLE AS SELECT

Section titled “SQL SELECT INTO 与 CREATE TABLE AS SELECT”

SQL 提供了将一个或多个表中的数据复制到新表中的机制。具体语法可能因数据库系统而异。

SELECT INTO 语句主要用于 SQL Server 和 MS Access,而 CREATE TABLE AS SELECT (CTAS) 语句是标准的 SQL 方法,用于 PostgreSQL、MySQL 和 Oracle 等系统。

SQL SELECT INTO 语句 (SQL Server / MS Access)

Section titled “SQL SELECT INTO 语句 (SQL Server / MS Access)”

在 SQL Server 和 MS Access 中,SELECT INTO 语句将数据从一个表复制并插入到新表中。新表由该语句自动创建。

将所有列复制到新表:

SELECT * INTO NewTable FROM OldTable WHERE condition;

将特定列复制到新表:

SELECT column1, column2, column_name(s) INTO NewTable FROM OldTable WHERE condition;

将根据 SELECT 语句中定义的列名和数据类型创建新表。您可以使用 AS 子句为列分配新名称。

注意:IN externaldb 子句用于将数据复制到另一个数据库中的表,它特定于某些系统,如 MS Access 或 SQL Server(用于链接服务器)。其用法和语法可能有所不同。

SQL CREATE TABLE AS SELECT (CTAS) 语句(标准 SQL,PostgreSQL,MySQL,Oracle)

Section titled “SQL CREATE TABLE AS SELECT (CTAS) 语句(标准 SQL,PostgreSQL,MySQL,Oracle)”

从查询结果创建表的更标准、更广泛支持的方式是使用 CREATE TABLE AS SELECT (CTAS) 语句。

将所有列复制到新表:

CREATE TABLE NewTable AS SELECT * FROM OldTable WHERE condition;

将特定列复制到新表:

CREATE TABLE NewTable AS SELECT column1, column2, column_name(s) FROM OldTable WHERE condition;

与 SELECT INTO 类似,新表的结构源自 SELECT 查询的结果集。

假设我们有一个 Customers 表。我们想创建备份表或派生表。

  1. 创建 Customers 的备份副本:

SQL Server / MS Access:

SELECT * INTO CustomersBackup2024 FROM Customers;

标准 SQL (PostgreSQL, MySQL, Oracle):

CREATE TABLE CustomersBackup2024 AS SELECT * FROM Customers;

  1. 只将少量列复制到新表:

SQL Server / MS Access:

SELECT CustomerName, ContactName INTO CustomerContactsBackup FROM Customers;

标准 SQL (PostgreSQL, MySQL, Oracle):

CREATE TABLE CustomerContactsBackup AS SELECT CustomerName, ContactName FROM Customers;

  1. 只将特定国家/地区(例如“Germany”)的客户复制到新表:

SQL Server / MS Access:

SELECT * INTO GermanCustomers FROM Customers WHERE Country = ‘Germany’;

标准 SQL (PostgreSQL, MySQL, Oracle):

CREATE TABLE GermanCustomers AS SELECT * FROM Customers WHERE Country = ‘Germany’;

  1. 将来自多个表的数据复制到新表(例如 Customers 和 Orders):

SQL Server / MS Access:

SELECT c.CustomerName, o.OrderID, o.OrderDate INTO CustomerOrderSummary FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;

标准 SQL (PostgreSQL, MySQL, Oracle):

CREATE TABLE CustomerOrderSummary AS SELECT c.CustomerName, o.OrderID, o.OrderDate FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;

提示:创建具有另一个表结构的空表。

Section titled “提示:创建具有另一个表结构的空表。”

您可以通过添加返回空数据的 WHERE 子句(例如 WHERE 1=0)来创建具有现有表相同结构的新空表。

SQL Server / MS Access:

SELECT * INTO NewEmptyCustomersTable FROM Customers WHERE 1=0; — This condition is always false

标准 SQL (PostgreSQL, MySQL, Oracle):

CREATE TABLE NewEmptyCustomersTable AS SELECT * FROM Customers WHERE 1=0; — This condition is always false

某些系统还提供 CREATE TABLE ... LIKE ... 语法(例如 MySQL、PostgreSQL)来复制表结构而不复制数据,这可能更直接:CREATE TABLE NewEmptyCustomersTable LIKE Customers;