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

  

MySQL习题1 一对多实例 产品和分类的更多相关文章

  1. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  2. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...

  3. 阿里云弹性容器实例产品 ECI ——云原生时代的基础设施

    阿里云弹性容器实例产品 ECI ——云原生时代的基础设施 1. 什么是 ECI 弹性容器实例 ECI (Elastic Container Instance) 是阿里云在云原生时代为用户提供的基础计算 ...

  4. mysql数据库分区功能及实例详解

    分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解   一,什么是数据库分区 前段时间写过一篇 ...

  5. MySQL之体系结构与存储实例

    定义数据库和实例 在数据库领域中有两个词很容易混淆,这就是“数据库”(database)和“实例”(instance).作为常见的数据库术语,这两个词的定义如下: 数据库:物理操作系统文件或其他形式文 ...

  6. MySQL 5.7安装(多实例)最佳实践

    MySQL 5.7安装(多实例)最佳实践,接上一篇<MySQL 5.7安装最佳实践>在已有的实例上面新增一个实例,主要是为了资源合理利用:下面是具体的步骤: 1.新实例目录规划,my.cn ...

  7. 基于mysqld_multi实现MySQL 5.7.24多实例多进程配置

    学习环境: 操作系统 IP地址 主机名 软件包 备注 CentOS7.5 192.168.200.111 localhost       实验初始配置:所有主机关闭防火墙与selinux [root@ ...

  8. Hibernate一对多实例

    本文向大家介绍Hibernate实例一对多的情况,可能好多人还不了解Hibernate实例一对多,没有关系,下面通过一个实例来帮助您理解Hibernate实例一对多,希望本文能教会你更多东西. 先看由 ...

  9. Hibernate的一对多实例

    一对多在现实生活中很常见,今天做了个Hibernate的一对多的实例,也是个入门过程,写下来跟大家分享. 最重要的是xml配置文件,之前因为把英文"(引号)错误的复制成中文的“”(引号),导 ...

随机推荐

  1. 代码空间项目 -- cookie的基本使用

    cookie在日常开发b/s架构时候经常使用,可以在记住用户,方便自动登录,也可以记住用户的偏好并对应推送广告 下面说说开发时候的基本用法: 1.创建cookie//设置cookie,键值对形式Coo ...

  2. angularjs ng-repeat倒叙

    <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng ...

  3. .net2.0 C# Json反序列化

    http://cjl20082002.blog.163.com/blog/static/120827332009511103457637/ 去:http://json.codeplex.com/下载  ...

  4. awk 根据外部变量匹配某一域值

    shell>> i='a' awk '$1 ~ /'$i'/ {print $0}' test.txt awk中,变量 增加单引号即可

  5. Java版本更新历史(ing)

    历史版本特性 JDK Version 1.0 开发代号为Oak(橡树),于1996-01-23发行. JDK Version 1.1 于1997-02-19发行. 引入的新特性包括: 引入JDBC(J ...

  6. 避免复杂的layout

    layout是浏览器计算元素的几何信息:元素在页面上的的大小和位置. 每个元素都有明确的亦或含蓄的大小信息,这些信息基于我们使用的css以及元素的内容被高和父亲元素. 这个过程在 Chrome, Op ...

  7. PS基本操作

    1 安装 赢政天下2015大师版 安装失败, 删除一下文件夹再重新安装 2 工作界面 2.1 界面 菜单栏; 标题栏; 工具箱; 工具箱选项栏; 面板; 状态栏; 文档窗口; 选项卡 2.2 文档窗口 ...

  8. CodeForces - 597C:Subsequences (主席树+DP)

    For the given sequence with n different elements find the number of increasing subsequences with k + ...

  9. starUML安装与破解

    安装包百度云: 链接:https://pan.baidu.com/s/1oF_DH7Xh6yun6fFUDB2H3w 密码:1z7e 破解步骤:1. 首先打开你的starUML安装目录,并找到Lice ...

  10. mysql 入门 1

    连接mysql服务器 mysql -h localhost -u username -ppasswd 1.查看服务器存在的库 show databases; 2.创建数据库 create databa ...