MySQL数据库进阶系统学习4(MySQL模拟操作京东商品数据库)

news/2024/11/23 10:10:49/

第四部分:MySQL模拟操作京东商品数据库

7. MySQL模拟操作京东商品数据库

7.1. 准备数据

  • 详细案例参考html文件16.1
    – 创建 “京东” 数据库
    create database jing_dong charset=utf8;

    – 使用 “京东” 数据库
    use jing_dong;

    – 创建一个商品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_saleoff bit not null default 0
    );

    查看数据库 数据表 常用命令:
    show databases; 显示所有数据库
    select database(); 显示当前数据库信息
    show tables; 显示所有数据表
    desc goods; 显示当前数据表的字段信息
    select * from goods; 显示当前数据表

  • 查看数据库
    mysql> select * from goods;
    ±—±--------------------------------±--------------±-----------±----------±--------±-----------+
    | id | name | cate_name | brand_name | price | is_show | is_saleoff |
    ±—±--------------------------------±--------------±-----------±----------±--------±-----------+
    | 1 | r510vc 15.6英寸笔记本 | 笔记本 | 华硕 | 3399.000 | | |
    | 2 | y400n 14.0英寸笔记本电脑 | 笔记本 | 联想 | 4999.000 | | |
    | 3 | g150th 15.6英寸游戏本 | 游戏本 | 雷神 | 8499.000 | | |
    | 4 | x550cc 15.6英寸笔记本 | 笔记本 | 华硕 | 2799.000 | | |
    | 5 | x240 超极本 | 超级本 | 联想 | 4880.000 | | |
    | 6 | u330p 13.3英寸超极本 | 超级本 | 联想 | 4299.000 | | |
    | 7 | svp13226scb 触控超极本 | 超级本 | 索尼 | 7999.000 | | |
    | 8 | ipad mini 7.9英寸平板电脑 | 平板电脑 | 苹果 | 1998.000 | | |
    | 9 | ipad air 9.7英寸平板电脑 | 平板电脑 | 苹果 | 3388.000 | | |
    | 10 | ipad mini 配备 retina 显示屏 | 平板电脑 | 苹果 | 2788.000 | | |
    | 11 | ideacentre c340 20英寸一体电脑 | 台式机 | 联想 | 3499.000 | | |
    | 12 | vostro 3800-r1206 台式电脑 | 台式机 | 戴尔 | 2899.000 | | |
    | 13 | imac me086ch/a 21.5英寸一体电脑 | 台式机 | 苹果 | 9188.000 | | |
    | 14 | at7-7414lp 台式电脑 linux ) | 台式机 | 宏碁 | 3699.000 | | |
    | 15 | z220sff f4f06pa工作站 | 服务器/工作站 | 惠普 | 4288.000 | | |
    | 16 | poweredge ii服务器 | 服务器/工作站 | 戴尔 | 5388.000 | | |
    | 17 | mac pro专业级台式电脑 | 服务器/工作站 | 苹果 | 28888.000 | | |
    | 18 | hmz-t3w 头戴显示设备 | 笔记本配件 | 索尼 | 6999.000 | | |
    | 19 | 商务双肩背包 | 笔记本配件 | 索尼 | 99.000 | | |
    | 20 | x3250 m4机架式服务器 | 服务器/工作站 | ibm | 6888.000 | | |
    | 21 | 商务双肩背包 | 笔记本配件 | 索尼 | 99.000 | | |
    ±—±--------------------------------±--------------±-----------±----------±--------±-----------+
    21 rows in set (0.00 sec)

7.2 SQL演练

  • 详细案例参考html文件16.2

  • 所有商品的平均价格
    mysql> select round(avg(price),2) from goods;
    ±--------------------+
    | round(avg(price),2) |
    ±--------------------+
    | 5570.57 |
    ±--------------------+
    1 row in set (0.00 sec)

  • 商品进行分类,显示分类后的平均价格
    mysql> select cate_name,round(avg(price),1) from goods group by cate_name;
    ±--------------±--------------------+
    | cate_name | round(avg(price),1) |
    ±--------------±--------------------+
    | 笔记本 | 3732.3 |
    | 游戏本 | 8499.0 |
    | 超级本 | 5726.0 |
    | 平板电脑 | 2724.7 |
    | 台式机 | 4821.3 |
    | 服务器/工作站 | 11363.0 |
    | 笔记本配件 | 2399.0 |
    ±--------------±--------------------+
    7 rows in set (0.00 sec)

  • 查询每种类型的商品中 最贵、最便宜、平均价、数量
    select cate_name,max(price),min(price),avg(price),count(*) from goods group by cate_name;

  • 查询所有价格大于平均价格的商品,并且按价格降序排序
    select id,name,price from goods
    where price > (select round(avg(price),2) as avg_price from goods)
    order by price desc;

    ±—±--------------------------------±----------+
    | id | name | price |
    ±—±--------------------------------±----------+
    | 17 | mac pro专业级台式电脑 | 28888.000 |
    | 13 | imac me086ch/a 21.5英寸一体电脑 | 9188.000 |
    | 3 | g150th 15.6英寸游戏本 | 8499.000 |
    | 7 | svp13226scb 触控超极本 | 7999.000 |
    | 18 | hmz-t3w 头戴显示设备 | 6999.000 |
    | 20 | x3250 m4机架式服务器 | 6888.000 |
    ±—±--------------------------------±----------+
    6 rows in set (0.00 sec)

连接查询

  • 查询出每个分类中最贵商品的价格
    mysql> select cate_name,max(price) from goods group by cate_name;
    ±--------------±-----------+
    | cate_name | max(price) |
    ±--------------±-----------+
    | 笔记本 | 4999.000 |
    | 游戏本 | 8499.000 |
    | 超级本 | 7999.000 |
    | 平板电脑 | 3388.000 |
    | 台式机 | 9188.000 |
    | 服务器/工作站 | 28888.000 |
    | 笔记本配件 | 6999.000 |
    ±--------------±-----------+

  • 上面查出了每个分类中最贵的价格,现在要查询每种类型中最贵的电脑信息

  • 我们可以使用连接查询,可以将上面的表as作为一个表,然后和原始商品表进行连接查询

  • 使用子查询创建一个新表
    mysql> select * from (select cate_name,max(price) as max_price from goods group by cate_name) as g_new;
    ±--------------±----------+
    | cate_name | max_price |
    ±--------------±----------+
    | 笔记本 | 4999.000 |
    | 游戏本 | 8499.000 |
    | 超级本 | 7999.000 |
    | 平板电脑 | 3388.000 |
    | 台式机 | 9188.000 |
    | 服务器/工作站 | 28888.000 |
    | 笔记本配件 | 6999.000 |
    ±--------------±----------+

  • 先创建一个新表,包含类别名称和最高价,并以此新表为基准,得到一个新表
    mysql>
    select * from (select cate_name,max(price) as max_price from goods group by cate_name) as g_new
    left join goods as g
    on g_new.cate_name=g.cate_name and g_new.max_price=g.price;
    ±--------------±----------±-----±--------------------------------±--------------±-----------±----------±--------±-----------+
    | cate_name | max_price | id | name | cate_name | brand_name | price | is_show | is_saleoff |
    ±--------------±----------±-----±--------------------------------±--------------±-----------±----------±--------±-----------+
    | 笔记本 | 4999.000 | 2 | y400n 14.0英寸笔记本电脑 | 笔记本 | 联想 | 4999.000 | | |
    | 游戏本 | 8499.000 | 3 | g150th 15.6英寸游戏本 | 游戏本 | 雷神 | 8499.000 | | |
    | 超级本 | 7999.000 | 7 | svp13226scb 触控超极本 | 超级本 | 索尼 | 7999.000 | | |
    | 平板电脑 | 3388.000 | 9 | ipad air 9.7英寸平板电脑 | 平板电脑 | 苹果 | 3388.000 | | |
    | 台式机 | 9188.000 | 13 | imac me086ch/a 21.5英寸一体电脑 | 台式机 | 苹果 | 9188.000 | | |
    | 服务器/工作站 | 28888.000 | 17 | mac pro专业级台式电脑 | 服务器/工作站 | 苹果 | 28888.000 | | |
    | 笔记本配件 | 6999.000 | 18 | hmz-t3w 头戴显示设备 | 笔记本配件 | 索尼 | 6999.000 | | |
    ±--------------±----------±-----±--------------------------------±--------------±-----------±----------±--------±-----------+
    7 rows in set (0.00 sec)

7.2.1 拆表创建表

  • 详细案例参考html文件16.2

  • 将查询结果写入一个新表

  • 创建商品分类表
    create table if not exists goods_cates(
    id int unsigned primary key auto_increment,
    name varchar(40) not null
    );

  • 查询goods表中商品的种类
    select cate_name from goods group by cate_name;

  • 将分组结果写入到goods_cates数据表
    insert into goods_cates (name) select cate_name from goods group by cate_name;

  • 同步表数据
    通过goods_cates数据表来更新goods表,将goods表类别名设置为分类表的id(cate_name外键是分类表的主键id)
    update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;

  • 通过create…select来创建数据表并且同时写入记录,一步到位
    – select brand_name from goods group by brand_name;
    – 在创建数据表的时候一起插入数据
    – 注意: 需要对brand_name 用as起别名,否则name字段就没有值
    create table goods_brands (
    id int unsigned primary key auto_increment,
    name varchar(40) not null) select brand_name as name from goods group by brand_name;

  • 同步数据
    通过goods_brands数据表来更新goods数据表
    update goods as g inner join goods_brands as b on g.brand_name=b.name set g.brand_name=b.id;

  • 修改表结构
    将goods标注的分类和品牌字符类型修改和分类表和品牌表中id的数据类型一致
    查看 goods 的数据表结构,会发现 cate_name 和 brand_name对应的类型为 varchar 但是存储的都是数字
    通过alter table语句修改表结构
    alter table goods
    change cate_name cate_id int unsigned not null,
    change brand_name brand_id int unsigned not null;

    mysql> desc goods;
    ±-----------±-----------------±-----±----±--------±---------------+
    | Field | Type | Null | Key | Default | Extra |
    ±-----------±-----------------±-----±----±--------±---------------+
    | id | int(10) unsigned | NO | PRI | NULL | auto_increment |
    | name | varchar(150) | NO | | NULL | |
    | cate_id | int(10) unsigned | NO | | NULL | |
    | brand_id | int(10) unsigned | NO | | NULL | |
    | price | decimal(10,3) | NO | | 0.000 | |
    | is_show | bit(1) | NO | | b’1’ | |
    | is_saleoff | bit(1) | NO | | b’0’ | |
    ±-----------±-----------------±-----±----±--------±---------------+
    7 rows in set (0.01 sec)


http://www.ppmy.cn/news/259152.html

相关文章

MYSQL数据库(十二)- 添加表关系join、insert...select、create ...select多表更新

目录 数据准备 一、单表写入,insert…select 案例:获取goods的分类,写入到新的数据表 二、多表更新、表关系join 案例一:我们使用内链接,链接goods数据表和goods_two数据表,然后修改goods_cate 三、案…

基于fpga的图像处理之图像灰度化处理(Vivado+Modelsim+Matlab联合仿真验证)

** 基于fpga的图像处理之图像灰度化处理 ** 本文的思路框架: ①本文采用两种算法进行灰度处理,平均法和加权均值法;加权均值法采用了直接公式求解和查找表两种方式验证 ②FPGA设计中三个设计技巧,可用于工程项目借鉴&#xff…

【python MySQL 笔记】python和MySQL交互、操作

【python MySQL 笔记】python和MySQL交互、操作 目录 1. 数据准备 2. SQL演练 2.1 SQL语句强化练习 2.2. 将一个表拆为多个表 3. python操作MySQL 3.1. python操作MySQL的流程 3.2. 查询基本操作 3.3. 增删改基本操作 3.4. 参数化 思考 1. 数据准备 创建一个jing_…

【转】《与MySQL的零距离接触》第五章:子查询与连接 (5-10:外连接OUTER JOIN)

转载出处: 慕课网:《与MySQL的零距离接触》笔记目录https://zhangjia.tv/682.html 5-10:外连接OUTER JOIN 一. 左外连接 LEFT [OUTER] JOIN,左外连接,作用是: 显示左表的全部记录及右表符合连接条件的记…

黑马程序员---数据库拆表操作

一:问题:目前只有一个goods表,我们想要增加一个商品分类信息,比如:移动设备这个分类信息,只通过goods表无法完成商品分类的添加,那么如何实现添加商品分类信息的操作? 答案:创建一个…

分组与聚合函数的演练

一:数据准备: -- 创建 "京东" 数据库 create database jing_dong charsetutf8;-- 使用 "京东" 数据库 use jing_dong;-- 创建一个商品goods数据表 create table goods(id int unsigned primary key auto_increment not null,name v…

mysql数据库知识点总结_mysql数据库知识点总结

一.数据库的基本操作 --------------------------------------------------------------数据库的安装以后更新---------------------------------------------------------------------------------- 在Linux系统下: 1.启动数据库服务:sudo service mysq…

sql笔记,面试

排名函数 rank() dense_rank() row_number() limit 3,2 从第四条数据开始,取两条数据 mysql 关系型数据库 MySQL 基本使用 数据库是特殊文件,用特殊软件操作 主键:能够唯一标记某个字段 字段:列 记录:行 mysql 网站…