select into和insert into select使用方法
### 使用Select Into与Insert Into Select进行表复制的方法 在数据库管理与操作中,`SELECT INTO`与`INSERT INTO SELECT FROM`是两种常见的用于复制或创建新表的方式。这两种语句虽然相似,但在实际使用场景中有着不同的作用和限制条件。 #### 1. `SELECT INTO` `SELECT INTO`语句用于从一个或多个表中选择数据,并将这些数据存储到一个新的表中。此命令要求目标表不存在,因为在执行时会自动创建这个新表。这种方式特别适用于需要快速复制或转换数据的情况。 ##### 示例代码解析 ```sql USE tempdb; IF OBJECT_ID(N'#Bicycles', N'U') IS NOT NULL DROP TABLE #Bicycles; GO USE AdventureWorks; GO SET NOCOUNT ON; SELECT * INTO #Bicycles FROM Production.Product WHERE ProductNumber LIKE 'BK%'; SET NOCOUNT OFF; SELECT name FROM tempdb..sysobjects WHERE name LIKE '#Bicycles%'; GO ``` - **使用场景**:这里使用`SELECT INTO`从`Production.Product`表中选取所有产品编号以`BK`开头的产品信息,并将其存储到临时表`#Bicycles`中。 - **注意事项**: - `IF OBJECT_ID(N'#Bicycles', N'U') IS NOT NULL` 这一行代码用于检查目标表是否存在。如果存在,则先删除它,确保新表能够被正确创建。 - `SET NOCOUNT ON` 和 `SET NOCOUNT OFF` 是为了控制是否返回行计数信息,这在实际应用中可以提高效率。 #### 2. `INSERT INTO SELECT FROM` `INSERT INTO SELECT FROM`语句则是在已存在的表中插入数据。这种方法不仅可以从一个表复制数据到另一个表,还可以在插入数据的同时进行某些计算或转换。与`SELECT INTO`不同的是,目标表必须事先存在。 ##### 示例代码解析 ```sql USE AdventureWorks; GO IF OBJECT_ID('dbo.EmployeeSales', 'U') IS NOT NULL DROP TABLE dbo.EmployeeSales; GO CREATE TABLE dbo.EmployeeSales ( DataSource varchar(20) NOT NULL, EmployeeID varchar(11) NOT NULL, LastName varchar(40) NOT NULL, SalesDollars money NOT NULL ); GO INSERT INTO dbo.EmployeeSales SELECT 'SELECT', e.EmployeeID, c.LastName, sp.SalesYTD FROM HumanResources.Employee AS e INNER JOIN Sales.SalesPerson AS sp ON e.EmployeeID = sp.SalesPersonID INNER JOIN Person.Contact AS c ON e.ContactID = c.ContactID WHERE e.EmployeeID LIKE '2%' ORDER BY e.EmployeeID, c.LastName; GO ``` - **使用场景**:这段示例代码首先定义了一个名为`EmployeeSales`的新表,然后使用`INSERT INTO SELECT FROM`从多个表中选择符合条件的数据,并将其插入到`EmployeeSales`表中。 - **注意事项**: - 在实际应用中,可以通过`INNER JOIN`、`LEFT JOIN`等联合查询来组合多个表中的数据。 - `WHERE`子句用于过滤不需要的数据。 - `ORDER BY`子句可以对结果集进行排序,使结果更加清晰有序。 ### 总结 - `SELECT INTO`主要用于从现有表中提取数据并创建新表,适合于需要创建新表并填充数据的场景。 - `INSERT INTO SELECT FROM`则更多用于已有表之间的数据复制或转换,可以在插入数据的同时进行额外的处理。 - 选择哪种方式取决于具体的业务需求以及目标表的状态。
第一句(select into from)要求目标表(destTbl)不存在,因为在插入时会自动创建
第二句(insert into select from)要求目标表(destTbl)存在,由于目标表已经存在,所以我们除了插入源表(srcTbl)的字段外,还可以插入常量
1.使用 SELECT INTO 创建表
以下第一个示例将在 tempdb 中创建一个名为 #Bicycles 的临时表。若要使用该表,则必须使用与下面显示的名称完全相同的名称进行引用。这包括数字符号 (#)。
USE tempdb ;
IF OBJECT_ID (N'#Bicycles',N'U') IS NOT NULL
DROP TABLE #Bicycles ;
GO
USE AdventureWorks;
GO
SET NOCOUNT ON
SELECT *
INTO #Bicycles
FROM Production.Product
WHERE ProductNumber LIKE 'BK%'
SET NOCOUNT OFF
SELECT name
FROM tempdb..sysobjects
WHERE name LIKE '#Bicycles%' ;
GO
2.第一个 INSERT 语句使用 SELECT 语句直接从源表(Employee、SalesPerson 和 Contact)中检索数据,并将结果集存储在 EmployeeSales 表中
USE AdventureWorks;
GO
- 粉丝: 14
- 资源: 118
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据中台(大数据平台)数据共享标准规范.pdf
- StratoVirt 基于Rust 编程语言 StratoVirt 轻量级、高效且安全 它还具有 Full Sence Support 和 Modules Flexible Splitting 等功能
- 微信小程序开发游戏2048
- Salvo 是一个极其简单易用却又功能强大的 Rust Web 后端框架
- 分支与循环(简单的语句)
- 智能车竞赛专题培训从设计理念到实际操作应用
- 数据中台(大数据平台)数据采集标准规范.pdf
- 数据中台(大数据平台)资源目录编制标准规范.pdf
- Charles 网络封包截取工具纯净版
- PHP语言基础知识详解及常见功能应用.docx