前面,我们在谈INSERT语句时,使用两种语句:INSERT…SELECT  和  INSERT…VALUES。

INSERT…SELECT可以使用子查询。因为在写SELECT时。  ***  =    ***,这就是子查询。

  我们还以tdb_goods这张表为例,这张表目前一共有22条数据,但是这22条数据中有很多重复的信息,下面我们简单来查看一下。

select  *   from   tdb_goods\G;

  比如这21、22条记录,他们的商品类别都是笔记本配件,他们的品牌都是索尼。这些都是重复的信息,我们都知道汉字占的字节数肯定要比数字要多,如果这种记录越来越多,那么你的数据表就越来越庞大,那么查找的时候速度就会越来越慢,那最好的办法就是使用外键来实现,如果使用外键,那么至少要有两张数据表,所以我们需要再做一张数据表来存储我们的产品分类和品牌。

  下面我们就来创建商品的分类表,操作命令及结果如下:

CREATE  TABLE  IF  NOT   EXISTS   tdb_goods_cates(
cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREENT,
cate_name VARCHAR(40) NOT NULL
);

  OK,我们的数据表创建成功。

  那么我们该如何插入数据呢,难道我们要一条一条去查找吗,当然不用,一定会有其他的方法,我们可以对查找的分类进行分组来实现,下面我们来看一看我们该怎么写?操作命令及结果如下:

SELECT  goods_cate  FROM  tdb_goods   GROUP  BY   goods_cate; 

  我们发现一共分了这么几类,那么下面我们就要把这几类写到我们刚创建的那张数据表中。理论上有两种方法,一种我们可以用INSERT语句逐条的去插入。这种比较麻烦,那么有没有更简单的方法吗,当然有,我们可以使用之前我们提到过的INSERT…SELECT语句来实现,意思就是将查询的结果写入到我们指定的数据表中。

  下面我们就来尝试一下这种方法,操作命令及结果如下:

INSERT   tdb_goods_cates(cate_name)    SELECT  goods_cate  FROM  tdb_goods  GROUP    BY     goods_cate;

  我们发现记录插入成功,但是这里面还有一个问题,记录现在我们已经插入成功了,但是我们根本就没有使用过外键来实现。

  我们来查看一下,我们输入SELECT * FROM tdb_goods\G;结果如下:

  我们发现在这张表中仍然存储的是笔记本配件这些商品类别,而应该存储的是商品类别名所对应的那个数字编号,所以我们现在就需要根据我们的分类表去更新我们的商品表,就是参照tdb_goods_cates去更新tdb_goods这张表。以前我们学的是单表更新,那么现在我们要参照一个表去更新另一个表,那么这里就涉及到多表更新。

使用INSERT…SELECT语法插入记录(三十二)的更多相关文章

  1. “全栈2019”Java第三十二章:增强for循环Foreach语法

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. 《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)

    1.简介 在实际自动化测试过程中,我们也避免不了会遇到下拉选择的测试,因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助. 2.select 下拉框 2.1Select ...

  3. FreeSql (三十二)Aop

    FreeSql AOP 已有的功能介绍,未来为会根据用户需求不断增强. 审计 CRUD 马云说过,996是修福报.对于多数程序员来说,加班是好事...起码不是闲人,不会下岗. 当如果因为某个 sql ...

  4. COJ968 WZJ的数据结构(负三十二)

    WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...

  5. NeHe OpenGL教程 第三十二课:拾取游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. thinkPHP 模板中的语法知识 详细介绍(十二)

    原文:thinkPHP 模板中的语法知识 详细介绍(十二) 本章节:介绍模板中的语法,详细的语法介绍 一.导入CSS和JS文件    ==>记住常量的是大写 1.css link .js  sc ...

  7. SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)

    开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...

  8. ASP 三十二条精华代码 (1)

    ASP 三十二条精华代码 (1) 2009-08-10 09:53:03  www.hackbase.com  来源:互联网 1. oncontextmenu="window.event.r ...

  9. [COJ0968]WZJ的数据结构(负三十二)

    [COJ0968]WZJ的数据结构(负三十二) 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有一盏灯,初始均亮着.请你设计一个数据结构,回答M次操作. 1 x:将节点x上的灯拉一次,即亮变 ...

随机推荐

  1. 基础命令:chown

    chown:改变文件或目录的用户和用户组 [语法格式] chown [option] [OWNER][:[GROUP]] [file] chown  [选项]  [用户 : 用户组 ]  [<文 ...

  2. react添加右键点击事件

    1.在HTML里面支持contextmenu事件(右键事件).所以需要在组建加载完时添加此事件,销毁组建时移除此事件. 2. 需要增加一个state,名称为visible,用来控制菜单是否显示.在_h ...

  3. ztree实现根节点单击事件,显示节点信息

    这段时间在维护公司的项目,去年做的项目里面有ztree树的例子,想起之前还没有开始写博客,一些知识点也无从找起,要新加一个右击节点事件,折腾了半天,其中也包含了一些知识点,稍稍做了一些demo. zT ...

  4. Java 二进制,八进制,十进制,十六进制转换

    A.十进制转换其他 十进制转成二进制  Integer.toBinaryString(int i) 十进制转成八进制  Integer.toOctalString(int i) 十进制转成十六进制:  ...

  5. POJ——T 3687 Labeling Balls

    http://poj.org/problem?id=3687 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14842   ...

  6. hadoop-04-mysql安装

    hadoop-04-mysql安装 su root 1,rpm -qa|grep mysql 2, rpm -e --nodeps `rpm -qa|grep mysql` 3,rpm -ivh co ...

  7. nyoj--767--因子和(模拟)

    因子和 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 题目很简单明了,给你一个数n,判断它是不是素数,如果是素数就输出"Yes",如果不是素数则输出 ...

  8. SpringMVC后台使用对象接受参数字符串转日期

    在springMVC配置文件中加入: <bean id="dateConvert" class="com.iomp.util.DateConvert"/& ...

  9. MPP的进化 - 深入理解Batch和MPP优缺点

    https://mp.weixin.qq.com/s/scXNfkpjktCZxBg3pYEUUA?utm_medium=hao.caibaojian.com&utm_source=hao.c ...

  10. vcenter server appliance 5.5 管理中心 linux 版本的部署

    本文选自通过ovf模板部署: 需要下面两个文件即可: 打开vsphere client 登录到你安装了exsi5.5的物理机上面: 点击文件---> 部署ovf模板  ---->选择你的模 ...