SQL SELECT INTO 语句

SQL SELECT INTO 语句 #

通过 SQL,您可以从一个表复制信息到另一个表。

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

注意: MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT

当然你可以使用以下语句来拷贝表结构及数据:

CREATE TABLE newT
AS
SELECT * FROM oldT 

SQL SELECT INTO 语法 #

假设有一个名为 isps 的表,包含以下数据:

MariaDB [dn]> select * from isps;
+-----+------------+--------------------------------------------------+
| idx | name       | intro                                            |
+-----+------------+--------------------------------------------------+
|   1 | West       | 西部数码老牌互联网基础服务提供商                 |
|   2 | Nameliso   | Namesilo是一家美国的域名注册商                   |
|   3 | eName      | 易名科技为国内知名的域名服务机构                 |
|   4 | CloudFlare | Cloudflare 是一个全球性的云平台                  |
+-----+------------+--------------------------------------------------+
4 rows in set (0.001 sec)

现在创建一个名为 ispsbak 的新表,并将 isps 表中的所有数据插入到新表中,可以使用以下 SQL 语句:

SELECT * INTO ispsbak FROM isps;

以下为带条件的示例:

SELECT name,intro INTO ispsbak FROM isps WHERE idx = 3;

使用注意事项 #

  • 表结构:SELECT INTO 会创建一个新表,并且新表的结构将基于选择的列和数据类型。
  • 如果新表已经存在,SELECT INTO 语句将失败。在这种情况下,可以使用 INSERT INTO ... SELECT 语句。
  • SELECT INTO 语句在 SQL Server 中非常常用,但在 MySQL 和 PostgreSQL 中通常使用 CREATE TABLE ... AS SELECT 语句。

MySQL 和 PostgreSQL中的替代方案 #

在 MySQL 和 PostgreSQL 中,可以使用 CREATE TABLE ... AS SELECT 来实现类似的功能:

MariaDB [dn]> CREATE TABLE ispsbak AS
    -> SELECT *
    -> FROM isps
    -> WHERE idx != 3;
Query OK, 3 rows affected (0.013 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [dn]> show tables;
+--------------+
| Tables_in_dn |
+--------------+
| dnl          |
| isps         |
| ispsbak      |
+--------------+
3 rows in set (0.001 sec)

MariaDB [dn]> select * from ispsbak;
+-----+------------+--------------------------------------------------+
| idx | name       | intro                                            |
+-----+------------+--------------------------------------------------+
|   1 | West       | 西部数码老牌互联网基础服务提供商                 |
|   2 | Nameliso   | Namesilo是一家美国的域名注册商                   |
|   4 | CloudFlare | Cloudflare 是一个全球性的云平台                  |
+-----+------------+--------------------------------------------------+
3 rows in set (0.000 sec)