有時候會出現(xiàn)數(shù)據(jù)冗余鬓催,比如下面情況
- 首先叁执,我們需要建一個類型表款违,把goods表中cate字段中的所有類型存到類型表中伍纫,有兩種方法:
- 第一種方法:
#建一個新表類型表
create table goods_cates(
id int unsigned primary key auto_increment,
brand_name varchar(10)
)
#把一個表查詢出來的數(shù)據(jù)插入到另一個表里
insert into goods_cates(cate_name) select distinct cate from goods
- 第二種方法:
#建表,同時把篩選的數(shù)據(jù)存入表中
create table goods_cates(
id int unsigned primary key auto_increment,
brand_name varchar(10)
)
select disctinct brand_name from goods
- 把goods表中的cate部分換成類型表中對應(yīng)的id
先把兩個表連接起來钳恕,查詢一下
select * from goods
inner join goods_cates on goods.cate=goods_cates.cate_name
把一個表中一列更新到另一列
update goods
inner join goods_cates on goods.cate=goods_cates.cate_name
set goods.cate=goods_cates.id
最后在設(shè)計表處改改goods的相關(guān)字段名cate_id
好處:節(jié)省空間别伏,修改goods_cates表就行,不用動goods表可能有的cates沒有商品忧额,我們就可以查查看看那些類型沒有商品
select *from goods
right join goods_cates on goods.cate=goods_cates.cate_name
where goods.name is null
select * from goods_cates not in (select cate_id from goods)
分表完成后可以利用連接查詢厘肮,子查詢等查詢你想要的數(shù)據(jù),要自己分析睦番,連接查詢类茂,子查詢利用比較多
@知識點小結(jié):
1. 把一個表查詢出來的數(shù)據(jù)插入到另一個表里
insert into 表.... select......
insert into 表1(字段1,字段2) select distinct 字段3,字段4 from 表2
- 兩個表中字段個數(shù)對應(yīng)起來
- 表2中字段3查出來的結(jié)果插入表1中字段1的位置
- 表2中字段4查出來的結(jié)果插入表1中字段2的位置,這樣對應(yīng)的
2.創(chuàng)建表同時把另一表中數(shù)據(jù)插入新表中
create table ...... select......
#create 和select兩個語句之間沒有分號托嚣,所以是一個語句
#1
create table 表2 select * from 表1
#把表1的數(shù)據(jù)復(fù)制到了創(chuàng)建的表2中
#2
create table 表2(
id int 約束巩检,
字段名1 類型 約束
)
#查詢出來的列必須對應(yīng)新表2中的字段名,如果在新表2中找不到同名字段示启,會在表2新建一個同名字段
select 字段名2 from 表1
#把表1查詢出來的結(jié)果插入到創(chuàng)建的表2中
#3 as
create table 表2(
id int 約束兢哭,
字段名1 類型 約束
)
select 字段名2 as 字段名1 from 表1
#想把查詢出來的結(jié)果放在表2中字段名1中,需要在select語句起別名為字段名1丑搔,對應(yīng)關(guān)聯(lián)起來
3. 把表1的一列更新成表2對應(yīng)的一列數(shù)據(jù)
update 表1
#根據(jù)相關(guān)聯(lián)的列厦瓢,連接兩個表
inner join 表2 on 表1.cate=表2.cate_name
#需要修改的列提揍,賦值
set 表1.cate=表2.id