澳门金沙vip 9

【澳门金沙vip】前端学数据库之多表操作

前面的话

  上一篇博文中介绍了子查询的相关内容,最后我们将查询结果存储到一个新的数据表中。下面我们将接着子查询的案例,详细介绍数据库中的多表操作

 

前端学数据库之多表操作,前端数据库

×

准备工作

  在上一篇博文,我们将详细数据存储到tdb_goods数据表中,将详细数据中的类别信息存储到tdb_goods_cates数据表中

澳门金沙vip 1

  接下来,我们要研究如何通过tdb_goods_cates数据表来更新tdb_goods表

 

目录

[1]准备工作 [2]多表更新 [3]两步更新[4]连接[5]澳门金沙vip,无限级表

多表更新

  多表更新类似于单表更新

UPDATE table_references SET col_name1={expr1|DEFAULT}
[,col_name2={expr2|DEFAULT}]...
[WHERE where_condition]

  表的参照关系如下:

table_reference
{[INNER | CROSS] JOIN |{LEFT|RIGHT} [OUTER] JOIN}
table_reference
ON conditional_expr

  从结果中看出,tdb_goods数据表中goods_cate列中的值已经更新为tdb_goods_cates数据表中对应的cate_id的值。这样一来,用数字替代字符串,极大地节省了存储空间

澳门金沙vip 2

 

前面的话

  上一篇博文中介绍了子查询的相关内容,最后我们将查询结果存储到一个新的数据表中。下面我们将接着子查询的案例,详细介绍数据库中的多表操作

 

两步更新

  在上面的多表更新的操作中,实际上我们经过了两个步骤,先创建了一个空表,将原数据表的查询结果写入空表,再利用写入结果的表反向更新原数据表

  如果使用CREATE
SELECT语句将可以实现两步更新,在创建数据表同时将查询结果写入到数据表(合并了CREATE和INSERT…SELECT两个操作步骤),再利用写入结果的表反向更新原数据表

CREATE TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
select_statement

  下面来处理原数据表tdb_goods中的品牌信息,首先查询tdb_goods表的”品牌”,并分组

SELECT brand_name FROM tdb_goods GROUP BY brand_name;

澳门金沙vip 3

  将品牌信息放入新表tdb_goods_brands中

  CREATE TABLE tdb_goods_brands (
    brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    brand_name VARCHAR(40) NOT NULL
  ) SELECT brand_name FROM tdb_goods GROUP BY brand_name;

澳门金沙vip 4

  再参照品牌表,更新原商品数据表

澳门金沙vip 5

  这里要注意的是,两张表中,同时存在brand_name这个字段。要区分它们,需要给它们起不同的别名或在字段前面加入表名

澳门金沙vip 6

  查看商品数据表的列结构,我们发现,虽然数据被修改为了数字,但数据类型仍然是字符型

澳门金沙vip 7

  下面修改商品数据表中goods_cate和brand_name的列名称和列类型

澳门金沙vip 8

  这样,我们已经将一个大的数据表分为小的数据表进行存储了。现在,分别在tdb_goods_cates和tdb_goods_brands表再插入几条新的记录

INSERT tdb_goods_cates(cate_name) VALUES('路由器'),('交换机'),('网卡');
INSERT tdb_goods_brands(brand_name) VALUES('海尔'),('清华同方'),('神舟');

  在tdb_goods数据表也写入新的记录

 INSERT tdb_goods(goods_name,cate_id,brand_id,goods_price) VALUES(' LaserJet Pro P1606dn 黑白激光打印机','12','4','1849');

澳门金沙vip 9

 

准备工作

  在上一篇博文,我们将详细数据存储到tdb_goods数据表中,将详细数据中的类别信息存储到tdb_goods_cates数据表中

澳门金沙vip 10

  接下来,我们要研究如何通过tdb_goods_cates数据表来更新tdb_goods表