SQL基础第二弹

版权声明:本文为博主原创文章,转载请声明出处。 https://blog.csdn.net/qq_28311921/article/details/79952628

准备数据:

– 创建 “shop” 数据库

CREATE DATABASE shop CHARSET=utf8;

– 使用 “商店” 数据库
use shop;

– 创建一个商品goods数据表

插入数据(如果不明白每个字段名是什么意思,看下面的插入数据就懂了,还不懂的…留言)

CREATE TABLE goods(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    name VARCHAR(150) NOT NULL,
    cate_name VARCHAR(40) NOT NULL,
    brand_name VARCHAR(40) NOT NULL,
    price DECIMAL(10,3) NOT NULL DEFAULT 0,
    is_show BIT NOT NULL DEFAULT 1,
    is_seleoff BIT NOT NULL DEFAULT 0
    );

– 向goods表中插入数据(直接copy,一个个敲太浪费时间)

insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); 
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default); 
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default); 
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default); 
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default); 
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default); 
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default); 
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default); 
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default); 
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default); 
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default); 
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default); 
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default); 
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default); 
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default); 
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);

补充:(不感兴趣的可以直接略过)

select group_concat(name) as '名称', brand_name,group_concat(cate_name) as '种类', group_concat(price) as '价格'from (select n.id, n.name, n.cate_name, n.brand_name, n.price  from goods as n inner join (select avg(price) as avg_price, cate_name from goods group by cate_name)as new_goods on n.price > new_goods.avg_price and n.cate_name=new_goods.cate_name) as goods_infos group by goods_infos.brand_name;

写着写着突然犯贱,想要写一句长一点的sql语句(Fei Hua),感兴趣的可以试着读读这句话,把上一篇的基础语法用的好大一部分。


开始学习

– 创建 “商品分类”” 表

 CREATE IF NOT EXISTS goods_cates(
     id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     name VARCHAR(40) NOT NULL
     );

IF NOT EXISTS: 如果不存在则创建goods_cates表
– 将goods表中的cate字段数据插入进goods_cates表内,并命名为name

INSERT INTO goods_cates(name) SELECT cate_name FROM goods GROUP BY cate_name;

– (重点*)同步表数据:通过goods_cates数据表来更新goods表

UPDATE goods AS g INNER JOIN goods_cates AS c ON g.cate_name = c.name SET g.cate_name=c.id;

–创建‘goods_brand’表

 CREATE TABLE goods_brands(
     id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     name VARCHAR(40) NOT NULL) SELECT goods.brand_name AS name FROM goods group BY brand_name;

–同步表数据

UPDATA goods AS g INNER JOIN goods_brands AS b ON g.brand_name=b.name SET g.brand_name=b.id;

–修改表结构

ALTER TABLE goods
    CHANGE cate_name cate_id INT UNSIGNED NOT NULL,
    CHANGER brand_name brand_id INT UNSIGNED NOT NULL;

这样主表只保存一些基本数据,其他的数据分别存在其他表内,进一步符合E-R模型…
点击查看E-R模型介绍(转载)

注:::关键字尽量用大写

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页