SQL SELECT INTO(复制表)

在 SQL 中,SELECT INTO 语句用于将数据从一个表复制到另一个表。

示例

-- copy all the contents of a table to a new table
SELECT *
INTO CustomersCopy
FROM Customers;

在这里,SQL 命令将 Customers 表中的所有数据复制到新的 CustomersCopy 表中。


SELECT INTO 语法

SQL SELECT INTO 语句的语法是

SELECT column1, column2, column3, ...
INTO destination_table
FROM source_table;

这里,

  • column1, column2, column3, ... 是要复制的列
  • destination_table 是要将数据复制到的新表
  • source_table 是要从中复制数据的表

注意: SELECT INTO 语句会创建一个新表。如果数据库中已经存在同名表,SELECT INTO 会报错。

如果要将数据复制到现有表(而不是创建新表),应该使用 INSERT INTO SELECT 语句。


仅复制选定列

我们还可以从旧表中复制选定列到新表。例如,

-- copy selected columns only
SELECT customer_id, country
INTO CustomersCountry
FROM Customers;

在这里,SQL 命令仅将 customer_idcountry 列复制到 CustomersCountry 表中。


复制符合条件的记录

我们可以使用带有 WHERE 子句的 SELECT INTO 来复制符合指定条件的行。例如,

-- copy rows where country is USA
SELECT customer_id, age
INTO USACustomersAge
FROM Customers
WHERE country = 'USA';

这里,SQL 命令

  • 创建包含 customer_idage 列的 USACustomersAge
  • 如果 country 列的值为 USA,则从 Customers 表中复制行

复制到另一个数据库

默认情况下,SELECT INTO 在当前数据库中创建一个新表。如果我们要将数据复制到不同数据库中的表,可以使用 IN 子句来完成。例如,

-- copy contents of a table to another database
SELECT *
INTO CustomersCopy
IN another_db.mdb
FROM Customers;

在这里,SQL 命令将 Customers 表复制到 another_db.mdb 数据库中的 CustomersCopy 表。

注意: 用户必须拥有 WRITE 权限才能将数据复制到不同数据库中的表。


从两个表复制到一个表

我们还可以使用带有 JOIN 子句的 SELECT INTO 将来自两个不同表的记录复制到新表。例如,

-- copy rows from Customers and Orders tables
SELECT Customers.customer_id, Customers.first_name, Orders.amount
INTO CustomerOrders
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer_id;

在这里,SQL 命令将 Customers 表中的 customer_idfirst_name 以及 Orders 表中的 amount 复制到新表 CustomerOrders

要了解更多信息,请访问 SQL JOIN


仅复制表结构

我们还可以使用 SELECT INTO 语句创建具有给定结构的新表(不复制数据)。为此,我们使用带有返回 false 条件的 WHERE 子句。

-- copy table structure only
SELECT *
INTO NewCustomers
FROM Customers
WHERE false;

在这里,SQL 命令创建一个名为 NewCustomers 的空表,其结构与 Customers 表相同。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战