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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 市建设工程安全生产标准化管理优良工地申报表.docx
- 特殊建设工程消防验收现场评定(其他建设工程消防验收备案现场检查)监督记录表.docx
- 提前报废老旧营运柴油货车补贴标准、新购营运货车补贴标准表.docx
- 基于鸟鸣声识别的鸟类分类系统项目源代码全套技术资料.zip
- 解析XML文件,使用ElementTree模块,并根据流程图设计合适的数据结构保存解析结果-使用Python ElementTree模块解析XML文件并设计数据结构-含源代码及解释
- 膝关节功能丧失程度评定表.docx
- 外出务工就业交通补助申报表.docx
- 腕关节功能丧失程度评定表.docx
- 现场评定检查表—— 防爆.docx
- 现场评定检查表—— 防火分隔、固定窗.docx
- 现场评定检查表——安全疏散.docx
- 现场评定检查表——建筑类别与耐火等级表.docx
- 现场评定检查表——建筑灭火器.docx
- 现场评定检查表--泡沫灭火系统.docx
- 现场评定检查表——平面布置.docx
- 现场评定检查表——建筑内部装修防火.docx