数据的准备和基本查询
create database jingdong char set = utf8;

use jingdong;

商品表

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(50) not null, #品牌名
price decimal(10,3) not null default 0,
is_show bit not null default 1, #是否显示
is_saleoff bit not null default 0 #是否售馨
);

订单表

create table orders(
id int unsigned primary key auto_increment not null ,
order_data_time datetime not null ,
customers_id int unsigned not null
);

设置外键

alter table orders add foreign key (customers_id) references customers(id);

顾客表

create table customers(
id int unsigned primary key auto_increment not null ,
name varchar(150) not null ,
address varchar(150) not null ,
tel varchar(20) not null ,
passwd varchar(30) not null
);

订单详情表

create table order_detail(
id int unsigned auto_increment primary key not null ,
quality int unsigned not null ,
order_id int unsigned not null ,
good_id int unsigned not null
);
alter table order_detail add foreign key (order_id) references orders(id);
alter table order_detail add foreign key (good_id) references goods(id);

desc orders;

desc goods;

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

select * from goods;

select * from goods where cate_name=“超级本”;

select * from goods where price < 3000;

显示种类

select distinct cate_name from goods;

select distinct cate_id from goods;

select cate_name from goods group by cate_name;

select cate_name, group_concat(name) from goods group by cate_name;

select round(avg(price), 4) from goods;

select cate_name, avg(price) from jingdong.goods group by cate_name;
select cate_name, avg(price), min(price), max(price), count(*), group_concat(name) from jingdong.goods group by cate_name;

查询所有价格大于平均价格的商品,并且按照降序排列

思路

select round(avg(price), 4) from goods;
select id, name, price from goods where price > 5570.5741;
select id, name, price from goods where price > (select round(avg(price), 4) from goods) order by price desc;

查询每种类型电脑中最贵的电脑信息

select cate_name, max(price), group_concat(cate_name, " ", name), count(*) from goods group by cate_name; #说明:进行分组的时候使用group by,前面的select查询的信息必须要有进行分组的字段依据.
select * from goods group by cate_name; #错误

#思路
select * from goods
inner join
(select cate_name, min(price) as min_price, max(price) as max_price, avg(price) as avg_price, count(*) from goods group by cate_name) as goods_new_info
on goods.cate_name = goods_new_info.cate_name and goods.price = goods_new_info.max_price;

#左连接查询
select * from (select cate_name, max(price) as max_price from goods group by cate_name) as new_goods_info
left join goods on new_goods_info.cate_name = goods.cate_name and new_goods_info.max_price = goods.price;

select * from (select cate_name, max(price) as max_price from goods group by cate_name) as new_goods_info
right join goods on new_goods_info.cate_name = goods.cate_name and new_goods_info.max_price = goods.price;
#一个表不方便管理

十分注意:通过另一个表的字段来存储一个表的主键的时候,两个字段的数据类型必须相同

创建goods_cates表并直接插入值

create table if not exists goods_cates(
id int unsigned primary key auto_increment not null,
name varchar(50) not null
);
select cate_name as name from goods group by cate_name;

#间接插入值
insert into goods_cates (name) select cate_name from goods group by cate_name; #为指定字段插入值。注:当把查看的一堆数据插入到一个字段中时,省略value

select * from goods_cates;

同步表数据 通过goods_cate表来更新goods表

十分注意:通过另一个表的字段来存储一个表的主键的时候,两个字段的数据类型必须相同

select * from goods as g inner join goods_cates as c on g.cate_name = c.name;
update goods as g inner join goods_cates as c on g.cate_name = c.name set g.cate_name = c.id;

#增加产品类型
insert into goods_cates (name) values (‘路由器’),(‘交换机’),(‘网卡’);

select * from goods;
select * from goods_cates;

desc goods;
desc goods_cates;

alter table goods change cate_name cate_id int unsigned not null; #change表示重命名改动

给goods表cate_id 字段添加外键进行约束

alter table goods add foreign key (cate_id) references goods_cates(id);

insert into goods (name, cate_id, brand_name, price) values (‘LasterJet Pro P1606dn 黑白激光打印机’, 12, 4, ‘1489’);

创建商品品牌数据表 先查询紧接着插入 注意name值要一样

create table goods_brand(
id int unsigned primary key not null auto_increment,
name varchar(40) not null)select brand_name as name from goods group by brand_name;

select * from goods_brand;

同步数据

update goods as g inner join goods_brand as b on g.brand_name = b.name set g.brand_name = b.id;

desc goods;

修改表结构 g.brand_name与b.id字段的数据类型要一致

alter table goods change brand_name brand_id int unsigned not null;

可以同时修改多个字段

alter table goods

change brand_name brand_id int unsigned not null,

change cate_name cate_id int unsigned not null;

设置外键

alter table goods add foreign key (brand_id) references goods_brand(id);

show create table goods;

在实际开发中很少使用外键 外键的使用会极大降低数据库的更新的效率 可以禁止使用外键 真正开发过程中约束可以通过语法逻辑进行控制

取消外健 首先获取外键约束的名称 通过show create table goods;来获取 然后通过获取的名称来删除外健 外健名称在show create table goods;生成的语句里面

alter table goods drop foreign key goods_ibfk_2;

select * from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brand as b on g.brand_id=b.id;
select g.*, c.name as cate_name, b.name as brand_name from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brand as b on g.brand_id=b.id order by price;

select * from goods;

Ubuntu MySQL8.0 SQL语句操作(三)相关推荐

  1. MySQL数据库https接口_第三章 mysql 数据库接口程序以及SQL语句操作

    mysql  数据库接口程序以及SQL语句操作 用于管理数据库: 命令接口自带命令 DDL:数据定义语言(create drop ) DCL: 数据控制语言(grant revoke) DML: 数据 ...

  2. SQL语句操作大全(本文系转载)

    SQL语句操作大全(本文系转载) SQL语句操作大全(本文系转载) --通过知识共享树立个人品牌. 本文分为以下六个部分: 基础部分 提升部分 技巧部分 数据开发-经典部分 SQL Server基本函 ...

  3. django使用mysql原始语句,Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...

  4. django mysql sql语句_Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...

  5. pdo_fetch执行mysql_PDO中执行SQL语句的三种方法

    在PDO中,我们可以使用三种方式来执行SQL语句,分别是 exec()方法,query方法,以及预处理语句prepare()和execute()方法~大理石构件来图加工 在上一篇文章<使用PDO ...

  6. JAVA中用 SQL语句操作小结

    1.添加记录(INSERT) 使用SQL语句的INSERT命令可以向数据库中插入记录,INSERT命令的基本形式为: INSERT INTO 表名 [(字段名1,字段名2-)] VALUES (值1, ...

  7. java中sql查询语句_JAVA中用 SQL语句操作小结

    1.添加记录(INSERT) 使用SQL语句的INSERT命令可以向数据库中插入记录,INSERT命令的基本形式为: INSERT INTO 表名 [(字段名1,字段名2-)] VALUES (值1, ...

  8. 用SQL语句操作Oracle数据库——数据更新

    数据更新 数据库中的数据更新操作有3种:1)向表中添加若干行数据(增):2)删除表中的若干行数据(删):3)修改表中的数据(改).对于这3种操作,SQL语言中有3种相应的语句与之对应.接下来让我们逐一 ...

  9. SQL语句整理三--hive

    文章目录 字符串拼接: split函数(分割字符串): Hive中的replace方法: 行列转换: 创建数据库: 创建表: 添加或删除字段: insert into 和 insert overwri ...

最新文章

  1. PAT(甲级)2018年冬季考试 7-2 Decode Registration Card of PAT
  2. Nginx配置实例-动静分离实例:搭建静态资源服务器
  3. 使用 ABAP 读取每个月的月份名称和编号
  4. pupload 文件分块 php,基于Plupload实现Base64分割的文件上传方案
  5. 一张图学会python 3_一张图学会Python?想啥呢?!
  6. Maven工作笔记003---公司只允许代理上网_给maven配置代理下载jar包
  7. 小程序报错:Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail req..
  8. C语言中错误c213是什么意思,DS1302的错误:error c213
  9. 【Gym-101775 J】Straight Master【差分、贪心】
  10. ElementUI 日期组件在IE下数据无法正常显示
  11. 小滴课堂-独孤求败-架构大课十八式-xiaoecf
  12. [转载]Geronimo 叛逆者,第 8 部分: 未来的 Apache Geronimo
  13. 读《我喜欢生命本来的样子》记(二)
  14. networkx igraph相互转换+效率比较
  15. 又双叒叕夺冠!5年厚积薄发,汇佳学校绿龙冰球队今夏“京城双冠王”!
  16. 15、Access数据库偏移注入
  17. To install it ,you can run npm i -- save vuetypesumd
  18. pc station v15 博图_PC STATION下载报错-工业支持中心-西门子中国
  19. 云效一站式DevOps平台
  20. QT pro文件和pri文件的区别

热门文章

  1. 基于交易模块创建多个 EA 交易
  2. MakefileCMake
  3. 关于Vue引用组件时地址报错Already included file name ‘xxx‘ differs from file name ‘xxx‘ only in casing的原因
  4. C语言狐狸与兔子编程,狐狸找兔子(VB程序设计)
  5. Security——Okta
  6. git客户端连接github
  7. 小程序如何与智能电视相结合?
  8. 打破企业管理边界,数字化供应链管理系统助力企业建设数字化韧性供应链
  9. 一加连续点Android版本号,一加5T Android8.0全国首刷/附加教程和ROM
  10. 学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )