MySQL习题1 一对多实例 产品和分类
2024-09-27 15:38:55
/*
需求:建立产品和分类表
1.查询每种分类的产品数量,没有产品的分类也要统计。(cname,quantity)
2.根据分类名称查询分类中的所有产品
*/ -- -------------------
-- 当表存在外键关系时,先删从表,再删主表
-- -------------------
drop table if exists product;
drop table if exists category; -- -------------------
-- 先建立主表,再建立从表,可以在从表创建时添加外键
-- -------------------
-- -------------------
-- category
-- -------------------
create table category(
cid int unsigned key auto_increment,
cname varchar(255)
);
-- show create table category;查看外键 -- -------------------
-- product
-- -------------------
create table product(
pid int unsigned key auto_increment,
pname varchar(255),
price decimal(10, 2),
cid int unsigned,
constraint category_fk foreign key (cid) references category(cid)
);
-- show create table product;查看外键 -- -------------------
-- 插入测试数据
-- -------------------
insert into category(cname) values('蔬菜');
insert into category(cname) values('水果');
insert into category(cname) values('饮料'); insert into product (pname, price, cid)
values('豆角', 2.35, (select cid from category where cname='蔬菜'));
insert into product (pname, price, cid)
values('萝卜', 1.5, (select cid from category where cname='蔬菜'));
insert into product (pname, price, cid)
values('香蕉', 3.6, (select cid from category where cname='水果'));
insert into product (pname, price, cid)
values('苹果', 3.6, null); -- -------------------
-- 1.查询每种分类的产品数量,没有产品的分类也要统计。(cname,quantity)
-- -------------------
-- 错误的写法,count(*)返回的是结果的行数,跟值是否为空无关
select cname, count(*) quantity
from product p right join category c
on p.cid=c.cid
group by cname; -- 正确的写法,count(p.pid)返回的是expr非空的值的个数
select cname, count(p.pid) quantity
from product p right join category c
on p.cid=c.cid
group by cname; -- -------------------
-- 2.根据分类名称查询分类中的所有产品
-- -------------------
-- 方法1 内连接
select p.pname, p.price
from product p join category c
on p.cid=c.cid and c.cname='蔬菜'; -- 方法2 子查询
select p.pname, p.price
from product p
where p.cid=(select c.cid from category c where cname='蔬菜'); -- -------------------
-- 3.使用union实现全外连接
-- -------------------
select * from product p left join category c
on p.cid=c.cid
union
select * from product p right join category c
on p.cid=c.cid;
最新文章
- XPath注入跟SQL注入差不多,只不过这里的数据库走的xml格式
- Xshell与securecrt之间不同
- Python定时任务框架APScheduler 3.0.3 Cron示例
- 【ionic】Mac IOS下真机调试
- SDUT 2411:Pixel density
- 如何增加swap 大小
- Count the Colors(线段树染色)
- Spark的部署方式
- C++标准:C++不允许修改任何基本型别(包括指针)的暂时值
- 修改android应用包名
- Docker系列(二)镜像下载、操作容器、镜像导入导出等操作
- bitbucket迁移
- nodejs -- event 模块, 事件模块.
- UncaughtExceptionHandler
- 33.纯 CSS 创作牛奶文字变换效果
- [代码]--c#获取系统时间
- iOS开发-UIRefreshControl下拉刷新
- php基础系列:从用户登录处理程序学习mysql扩展基本操作
- java基础解疑!!!
- JDBC入门(1)—— 入门案例