当前位置:首页 > 问答 > 正文

树叶云教你用MSSQL的INSERT INTO SELECT语句,数据插入其实没那么难嘛

树叶云教你用MSSQL的INSERT INTO SELECT语句,数据插入其实没那么难嘛 来源:根据树叶云技术社区一篇名为《告别手动录入!MSSQL INSERT INTO SELECT 极简教程》的教程文章整理)

嘿,朋友们!是不是经常遇到需要把一张表的数据搬到另一张表的情况?难道要一条一条手动敲进去吗?当然不用!今天树叶云就来带你玩转MSSQL里的一个神器——INSERT INTO SELECT语句,放心,我们不用那些让人头疼的专业术语,就用大白话把它讲明白。

它到底是什么?为啥要用它?

INSERT INTO SELECT抄作业”,想象一下,你有一张写满了答案的旧试卷(源表),现在老师发了一张新试卷(目标表),题目类型差不多,你不需要重新计算,只需要把旧试卷上的答案抄到新试卷上就行了,这个“抄”的过程,就是INSERT INTO SELECT干的事情。

根据树叶云的文章指出,它的主要好处有三个:一是省时省力,不用手动输入海量数据;二是准确,避免了手动输入可能带来的错误;三是灵活,可以只选择你需要的部分数据“抄”过去。

最基本的“抄作业”姿势

最直接的用法就是把一张表的所有数据,原封不动地复制到另一张表里,它的写法长这样:

树叶云教你用MSSQL的INSERT INTO SELECT语句,数据插入其实没那么难嘛

INSERT INTO 目标表名 (字段1, 字段2, 字段3, ...)
SELECT 字段1, 字段2, 字段3, ...
FROM 源表名

这里有个关键点,树叶云特别强调:INSERT INTO后面跟着的字段顺序和数量,必须和SELECT后面跟着的字段顺序和数量完全一致,就好像抄作业时,第一题的答案必须抄到新试卷的第一题,不能乱套。

举个例子,假设我们有一张“老员工表”,里面有ID、姓名、部门三个字段,现在要创建一张“新员工表”,结构一模一样,并且要把所有老员工的数据都搬过去,SQL语句就可以这么写:

INSERT INTO 新员工表 (ID, 姓名, 部门)
SELECT ID, 姓名, 部门
FROM 老员工表

执行这一句,嗖的一下,数据就全部过去了,是不是很简单?

高级玩法:不是全抄,而是“选择性抄写”

我们并不总是需要全盘照搬,树叶云的教程里介绍了更聪明的用法:只复制我们需要的数据,这就要请出我们的老朋友WHERE子句了。

树叶云教你用MSSQL的INSERT INTO SELECT语句,数据插入其实没那么难嘛

老板说:“我只要销售部的员工名单,单独给我弄一张表。” 这时候,我们就可以在“抄作业”的时候加个条件:

INSERT INTO 销售部员工表 (ID, 姓名, 部门)
SELECT ID, 姓名, 部门
FROM 老员工表
WHERE 部门 = ‘销售部’

这样,只有部门是“销售部”的员工记录才会被插入到新表里。WHERE子句就像是一个过滤器,帮我们筛选出想要的数据。

更高级的玩法:抄作业还能“加工一下”

我们在抄写的过程中,还可以对数据进行一些简单的修改或计算,树叶云的文章里举了一个很生活的例子:给所有员工统一涨薪。

假设我们要根据“老工资表”生成一张“新工资表”,并且希望给每个人的薪水都增加500元,可以这么做:

树叶云教你用MSSQL的INSERT INTO SELECT语句,数据插入其实没那么难嘛

INSERT INTO 新工资表 (员工ID, 员工姓名, 基本工资)
SELECT 员工ID, 员工姓名, 基本工资 + 500
FROM 老工资表

看见了吗?在SELECT语句里,我们直接对“基本工资”这个字段进行了加法运算,这样插入到新表里的数据,工资就已经是涨过之后的了。

抄作业前的准备工作:检查桌椅和文具

在兴高采烈地开始“抄作业”之前,树叶云提醒我们一定要做好两件事,不然可能会“抄”不进去:

  1. 目标表必须存在:你得先有一张新试卷(目标表),才能往上抄答案啊,如果表不存在,需要先用CREATE TABLE语句创建好。
  2. 数据类型要对得上:这是最容易出错的地方,源表里的“生日”字段是日期类型,那你目标表里对应的字段也必须是日期类型,你不能把日期抄到一个是数字类型的格子里,数据库会“看不懂”而报错。

万一“抄重了”怎么办?

如果我们不小心多次执行了同一条INSERT INTO SELECT语句,会发生什么?数据会被重复插入!这就像一道题你抄了两遍一样。

树叶云提供了两个思路来避免这种情况:

  • 在执行插入前,先清空目标表:使用TRUNCATE TABLE 目标表名DELETE FROM 目标表名语句,但要注意,这会删除表里所有的现有数据,要谨慎操作。
  • 给表设置主键或唯一约束:这是更推荐的做法,比如给员工ID设置为主键,如果你试图插入一个已经存在的ID,数据库就会自动阻止你,从而避免重复。

好了,以上就是树叶云带你学习的INSERT INTO SELECT语句,它就像是一个智能的数据搬运工,能帮你高效、准确地完成数据迁移和备份的工作,多练习几次,你就会发现,批量插入数据真的没那么难!希望这篇来自树叶云的分享对你有帮助!