mysql 练习
数据准备、基本查询
1 -- 创建数据库 2 create databse jing_dong charset=utf8; 3 4 -- 创建数据表 5 create table goods( 6 id int unsigned primary key auto_increment not null, 7 name varchar(150) not null, 8 cate_name varchar(40) not null, 9 brand_name varchar(40) not null, 10 price decimal(10,3) not null default 0, 11 is_show bit not null default 1, 12 is_saleoff bit not null default 0 13 ); 14 15 -- 插入数据 16 insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); 17 insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default); 18 insert into goods values(0,'g150th 15.6英寸游戏本','笔记本','雷神','8499',default,default); 19 insert into goods values(0,'x550th 15.6寸笔记本','笔记本','华硕','2799',default,default); 20 insert into goods values(0,'x240超级本','超级本','联想','4880',default,default); 21 insert into goods values(0,'u330p 13.3英寸超极本','超极本','联想','4299',default,default); 22 insert into goods values(0,'','','','',default,default); 23 insert into goods values(0,'svp13226scb 触控超极本','超极本','索尼','7999',default,default); 24 insert into goods values(0,'iPad mini 7.9英寸平板电脑','平板电脑','苹果','1988',default,default); 25 insert into goods values(0,'iPad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default); 26 insert into goods values(0,'iPad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default); 27 insert into goods values(0,'ideacentre c340 20英寸一体电脑','台式机','联想','3499',default,default); 28 insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default); 29 insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default); 30 insert into goods values(0,'at7-7414p 台式电脑 liunx','台式机','宏基','3699',default,default); 31 insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default); 32 insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default); 33 insert into goods values(0,'Mac pro 专业台式电脑','服务器/工作站','苹果','28888',default,default); 34 insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default); 35 insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 36 insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','IBM','6888',default,default); 37 insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 38 39 -- 显示商品种类 40 select cate_name from goods group by cate_name; 41 select distinct cate_name from goods; 42 43 -- 显示每个种类的平均价格 44 select avg(price) from goods group by cate_name; 45 46 -- 查询每个分类中最高价格、最低价格、平均价格、数量: 47 select cate_name,max(price),min(price),avg(price),count(*) from goods group by cate_name; 48 49 -- 查询价格大于平均价格的商品id,名字、价格,并排序 50 select id,name,price from goods where price>(select round(avg(price),2)from goods)order by price desc; 51 52 --查询每个种类中最高的价格: 53 select group_concat(name),max(price) from goods group by cate_name; 54 55 --查询每个种类中价格最贵的电脑信息: 56 select * from goods inner join 57 ( 58 select cate_name, 59 max(price) as maxprice from goods group by cate_name 60 ) as newgoods 61 on maxprice=goods.price and newgoods.cate_name=goods.cate_name; 62 63 select * from (select cate_name,max(price) as mx from goods group by cate_name) as new_g left join goods on new_g.mx=goods.price and new_g.cate_name=goods.cate_name;
1 -- 拆为多个表 2 3 create table if not exists goods_cates( 4 id int unsigned primary key auto_increment, 5 name varchar(40) not null 6 ); 7 8 -- 查询goods表中的分类: 9 select cate_name from goods group by cate_name; 10 11 -- 将分组结果写入到goods_cates表中: 12 insert into goods_cates (name) select cate_name from goods group by cate_name; 13 14 --上面三个步骤可以合为一个,注意brand_name后面必须跟一个别名,且别名需要跟新表中要添加到的字段名相同: 15 create table if not exists goods_cates( 16 id int unsigned primary key auto_increment, 17 name varchar(40) not null 18 ) select brand_name as name from goods group by barnd_name; 19 20 -- 同步数据表 21 -- 通过goods_cates表数据更新goods表 22 update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id; 23 24 -- 修改表结构 25 -- 查看goods表结构发现cate_name、brand_name对应的类型是varchar,但是存储的都是数字: 26 desc goods; 27 28 -- 通过alter table修改表结构,alter table table_name 语句1,语句2,语句3....; 29 alter table goods 30 change cate_name cate_id int unsigned not null, 31 32 -- 外键 foreign key 外键会非常影响数据库效率,一般尽量不用,可以在应用程序层面约束数据,代替外键 33 -- 一个字段添加外键后,插入数据就受到约束,以下cate_id添加了外键goods_cate(id) 34 -- 如果向cate_id中添加goods_cates(id)中不存在的数字,会报错 35 alter table goods add foreign key (cate_id) references goods_cates(id); 36 37 --如何取消外键约束 38 -- 1、查看外键名称,其有系统自动生成的 39 show caeate table goods; 40 -- 以下看到的‘goods_ibfk_4’就是外键名 41 CONSTRAINT `goods_ibfk_4` FOREIGN KEY (`brand_id`) REFERENCES `goods_brands` (`id`), 42 -- 2、删除外键 43 alter table goods drop foreign key 外键名

浙公网安备 33010602011771号