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 语句将数据从一个表复制并插入到新表中。新表由该语句自动创建。
SQL SELECT INTO 语法:
Section titled “SQL 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) 语句。
SQL CTAS 语法:
Section titled “SQL 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 查询的结果集。
SQL SELECT INTO / CTAS 示例
Section titled “SQL SELECT INTO / CTAS 示例”假设我们有一个 Customers 表。我们想创建备份表或派生表。
- 创建
Customers的备份副本:
SQL Server / MS Access:
SELECT * INTO CustomersBackup2024 FROM Customers;
标准 SQL (PostgreSQL, MySQL, Oracle):
CREATE TABLE CustomersBackup2024 AS SELECT * FROM Customers;
- 只将少量列复制到新表:
SQL Server / MS Access:
SELECT CustomerName, ContactName INTO CustomerContactsBackup FROM Customers;
标准 SQL (PostgreSQL, MySQL, Oracle):
CREATE TABLE CustomerContactsBackup AS SELECT CustomerName, ContactName FROM Customers;
- 只将特定国家/地区(例如“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’;
- 将来自多个表的数据复制到新表(例如
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;