15.2 从一个表复制到另一个表

有一种数据插入不使用INSERT语句。要将一个表的内容复制到一个全新的表(运行中创建的表),可以使用SELECT INTO语句。

说明:DB2不支持
DB2不支持这里描述的SELECT INTO

INSERT SELECT将数据添加到一个已经存在的表不同,SELECT INTO将数据复制到一个新表(有的DBMS可以覆盖已经存在的表,这依赖于所使用的具体DBMS)。

说明:INSERT SELECTSELECT INTO
它们之间的一个重要差别是前者导出数据,而后者导入数据。

下面的例子说明如何使用SELECT INTO

输入▼

  1. SELECT *
  2. INTO CustCopy
  3. FROM Customers;

分析▼

这条SELECT语句创建一个名为CustCopy的新表,并把Customers表的整个内容复制到新表中。因为这里使用的是SELECT *,所以将在CustCopy表中创建(并填充)与Customers表的每一列相同的列。要想只复制部分的列,可以明确给出列名,而不是使用*通配符。

MariaDB、MySQL、Oracle、PostgreSQL和SQLite使用的语法稍有不同:

输入▼

  1. CREATE TABLE CustCopy AS
  2. SELECT * FROM Customers;

在使用SELECT INTO时,需要知道一些事情:

  • 任何SELECT选项和子句都可以使用,包括WHEREGROUP BY
  • 可利用联结从多个表插入数据;
  • 不管从多少个表中检索数据,数据都只能插入到一个表中。

提示:进行表的复制
SELECT INTO是试验新SQL语句前进行表复制的很好工具。先进行复制,可在复制的数据上测试SQL代码,而不会影响实际的数据。

说明:更多例子
如果想看INSERT用法的更多例子,请参阅附录A中给出的样例表填充脚本。