/*
需求:建立产品和分类表
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;

  

最新文章

  1. XPath注入跟SQL注入差不多,只不过这里的数据库走的xml格式
  2. Xshell与securecrt之间不同
  3. Python定时任务框架APScheduler 3.0.3 Cron示例
  4. 【ionic】Mac IOS下真机调试
  5. SDUT 2411:Pixel density
  6. 如何增加swap 大小
  7. Count the Colors(线段树染色)
  8. Spark的部署方式
  9. C++标准:C++不允许修改任何基本型别(包括指针)的暂时值
  10. 修改android应用包名
  11. Docker系列(二)镜像下载、操作容器、镜像导入导出等操作
  12. bitbucket迁移
  13. nodejs -- event 模块, 事件模块.
  14. UncaughtExceptionHandler
  15. 33.纯 CSS 创作牛奶文字变换效果
  16. [代码]--c#获取系统时间
  17. iOS开发-UIRefreshControl下拉刷新
  18. php基础系列:从用户登录处理程序学习mysql扩展基本操作
  19. java基础解疑!!!
  20. JDBC入门(1)—— 入门案例

热门文章

  1. JSOI2004 平衡点 / 吊打XXX
  2. 6 Maven聚合与集成
  3. HBase开发
  4. 操作系统:使用AT&T实现引导扇区
  5. js里=、== 和===有什么区别?
  6. 网站流量统计之PV和UV
  7. FFmpeg滤镜代码级分析
  8. windbg调试堆破坏
  9. SQL SERVER2008 打开脚本总是报“未能完成操作,存储空间不足”
  10. vue-cli创建项目 一直downloading解决办法