SQL基础知识V2——SELECT INTO和INSERT INTO SELECT

简介: SQL数据库开发

SELECT INTO 作用

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


SELECT INTO 语法

我们可以把所有的列都复制到新表中:

SELECT *
INTO newtable [IN externaldb]
FROM table1;

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

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


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


示例数据库

我们使用"Customers"表来作示例

20.jpg

SELECT INTO 实例

创建 Customers 的备份复件:

SELECT *
INTO CustomersBackup2018
FROM Customers;

可以得到一个和Customers表结构及数据一模一样的表CustomersBackup2018

21.jpg


下面我们来复制表到另一个数据库AdventureWorks中,结果与Customers表中的一样。

SELECT *
INTO AdventureWorks.dbo.CustomersBackup2018
FROM Customers;

如下就是AdventureWorks数据库中刚复制过来的表CustomersBackup2018

22.jpg


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

SELECT 姓名, 地址
INTO CustomersBackup2018_1
FROM Customers;

CustomersBackup2018_1表中的结果:

23.jpg

只复制广东省的客户插入到新表中:

SELECT *
INTO CustomersBackup2018_2
FROM Customers
WHERE 省份='广东省';

CustomersBackup2018_2中的数据如下:

24.jpg


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

SELECT c.姓名, o.订单ID
INTO CustomersOrderBackup2018
FROM Customers c
LEFT JOIN Orders o
ON c.客户ID=o.客户ID;

CustomersOrderBackup2018表中的数据如下:

25.jpg


提示:SELECT INTO 语句可以用于在另一种模式下创建一个新的空表,即只有表结构,没有数据。只需添加WHERE子句,使查询返回时没有数据:

SELECT *
INTO newtable
FROM table1
WHERE 1=0;


INSERT INTO SELECT 作用

INSERT INTO SELECT 语句从表中复制数据,并将数据插入现有的表中。目标表中的任何现有行都不会受到影响。


INSERT INTO SELECT 语法

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

INSERT INTO table2
SELECT * FROM table1;

或者我们可以把想要的列复制到另一个现有的表中:

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;


示例数据库

以下是"Customers"表中的数据:

26.jpg

选自 "Suppliers" 表的数据:


27.jpg


INSERT INTO SELECT 实例

把 "Suppliers" 一栏复制到 "Customers" 一栏:

实例

INSERT INTO Customers (姓名, 省份)
SELECT 供应商名称, 省份 FROM Suppliers;

结果如下:

28.jpg


只将上海供应商的副本插入 "Customers" :

实例

INSERT INTO Customers (姓名, 省份)
SELECT 供应商名称, 省份 FROM Suppliers
WHERE 省份='上海市';

结果如下:

29.jpg

批注

SELECT INTO 用来复制表和表结构是非常方便的,特别是在进行表之间计算时,可以将部分数据先插入到一个临时表中,计算完成再删除该临时表。INSERT INTO SELECT则是插入语句的另外的一种写法,可以直接将查询的结果插入到需要的表中,从而省去逐条手工插入数据的过程。


相关文章
|
4月前
|
SQL 数据挖掘 大数据
如何在 SQL Server 中使用 `SELECT TOP`
【8月更文挑战第10天】
192 7
如何在 SQL Server 中使用 `SELECT TOP`
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
67 1
|
4月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
49 5
|
4月前
|
SQL 数据挖掘 关系型数据库
|
4月前
|
SQL
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
|
SQL 存储 缓存
SQL Server基础知识概念要点详细讲解
SQL Server基础知识概念要点详细讲解
SQL Server基础知识概念要点详细讲解
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
134 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
5月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
69 6
下一篇
DataWorks