Sql 之SELECT INTO 与 INSERT INTO SELECT

本文详细介绍了SQL中的SELECT INTO语句用法,包括如何从一个表复制数据到另一个新表,以及如何通过SELECT INTO语句创建新的空表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL SELECT INTO 语句


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

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


SQL SELECT INTO 语句

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

SQL SELECT INTO 语法

我们可以复制所有的列插入到新表中:

SELECT *
INTO newtable [IN externaldb]
FROM table1;

或者只复制希望的列插入到新表中:

SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;

lamp

提示:新表将会使用 SELECT 语句中定义的列名称和类型进行创建。您可以使用 AS 子句来应用新名称。



SQL SELECT INTO 实例

创建 Customers 的备份复件:

SELECT *
INTO WebsitesBackup2016
FROM Websites;

请使用 IN 子句来复制表到另一个数据库中:

SELECT *
INTO WebsitesBackup2016 IN 'Backup.mdb'
FROM Websites;

只复制一些列插入到新表中:

SELECT name, url
INTO WebsitesBackup2016
FROM Websites;

只复制中国的网站插入到新表中:

SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country='CN';

复制多个表中的数据插入到新表中:

SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;

提示:SELECT INTO 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 WHERE 子句即可:

SELECT *
INTO newtable
FROM table1
WHERE 1=0;


SQL INSERT INTO SELECT 语法

我们可以从一个表中复制所有的列插入到另一个已存在的表中:

INSERT INTO table2
SELECT * FROM table1;

或者我们可以只复制希望的列插入到另一个已存在的表中:

INSERT INTO table2
(column_name(s))

SELECT column_name(s)
FROM table1;

### SQL Server 中 `INSERT INTO SELECT` 用法及示例 在 SQL Server 中,`INSERT INTO SELECT` 语句用于从一个表中选择数据并将其插入到另一个表中。目标表中的现有记录不会受到影响,除非使用了额外的条件或操作[^1]。 #### 基本语法 将一个表中的所有列复制到另一个表中: ```sql INSERT INTO table2 SELECT * FROM table1 WHERE condition; ``` 仅将一个表中的某些列复制到另一个表中: ```sql INSERT INTO table2 (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM table1 WHERE condition; ``` #### 示例 1:复制所有列 假设有一个名为 `SourceTable` 的表,包含以下列:`ID`, `Name`, `Age`。现在需要将这些数据插入到名为 `TargetTable` 的表中。 ```sql INSERT INTO TargetTable SELECT * FROM SourceTable WHERE Age > 30; ``` 此语句将 `SourceTable` 中所有年龄大于 30 的记录复制到 `TargetTable` 中[^1]。 #### 示例 2:复制特定列 如果只需要复制部分列(例如 `Name` 和 `Age`),可以指定目标表和源表的列名: ```sql INSERT INTO TargetTable (Name, Age) SELECT Name, Age FROM SourceTable WHERE Age > 30; ``` 此语句仅将 `Name` 和 `Age` 列的数据从 `SourceTable` 插入到 `TargetTable` 中[^1]。 #### 示例 3:跨数据库复制数据 在 SQL Server 中,还可以通过 `INSERT INTO SELECT` 实现跨数据库的数据复制。假设 `SourceDatabase.dbo.SourceTable` 是源表,`TargetDatabase.dbo.TargetTable` 是目标表: ```sql INSERT INTO TargetDatabase.dbo.TargetTable (Name, Age) SELECT Name, Age FROM SourceDatabase.dbo.SourceTable WHERE Age > 30; ``` 此语句将 `SourceDatabase` 中符合条件的数据插入到 `TargetDatabase` 的目标表中[^4]。 #### 注意事项 - 确保目标表的列数和数据类型 `SELECT` 语句返回的结果匹配[^2]。 - 如果目标表中存在主键或唯一约束,插入时需确保不会违反这些约束[^3]。 ```sql -- 示例:处理唯一约束冲突 INSERT INTO TargetTable (ID, Name, Age) SELECT ID, Name, Age FROM SourceTable WHERE ID NOT IN (SELECT ID FROM TargetTable); ``` 此语句避免了因重复 `ID` 而引发的唯一性冲突问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值