
1 /*
2 需求:建立产品和分类表
3 1.查询每种分类的产品数量,没有产品的分类也要统计。(cname,quantity)
4 2.根据分类名称查询分类中的所有产品
5 */
6
7 -- -------------------
8 -- category
9 -- 先建立主表,再建立从表,可以在从表创建时添加外键。
10 -- -------------------
11 drop table if exists category;
12 create table category(
13 cid int unsigned key auto_increment,
14 cname varchar(255)
15 );
16 -- show create table category;
17
18 -- -------------------
19 -- product
20 -- -------------------
21 drop table if exists product;
22 create table product(
23 pid int unsigned key auto_increment,
24 pname varchar(255),
25 price decimal(10, 2),
26 cid int unsigned,
27 constraint category_fk foreign key (cid) references category(cid)
28 );
29 -- show create table product;
30
31
32 -- -------------------
33 -- 插入测试数据
34 -- -------------------
35 insert into category(cname) values('蔬菜');
36 insert into category(cname) values('水果');
37 insert into category(cname) values('饮料');
38
39 insert into product (pname, price, cid)
40 values('豆角', 2.35, (select cid from category where cname='蔬菜'));
41 insert into product (pname, price, cid)
42 values('萝卜', 1.5, (select cid from category where cname='蔬菜'));
43 insert into product (pname, price, cid)
44 values('香蕉', 3.6, (select cid from category where cname='水果'));
45 insert into product (pname, price, cid)
46 values('苹果', 3.6, null);
47
48 -- -------------------
49 -- 1.查询每种分类的产品数量,没有产品的分类也要统计。(cname,quantity)
50 -- -------------------
51 select cname, count(*) quantity
52 from product p right join category c
53 on p.cid=c.cid
54 group by cname;
55
56 -- -------------------
57 -- 2.根据分类名称查询分类中的所有产品
58 -- -------------------
59 -- 方法1 内连接
60 select p.pname, p.price
61 from product p join category c
62 on p.cid=c.cid and c.cname='蔬菜';
63
64 -- 方法2 子查询
65 select p.pname, p.price
66 from product p
67 where p.cid=(select c.cid from category c where cname='蔬菜');
68
69 -- -------------------
70 -- 3.使用union实现全外连接
71 -- -------------------
72 select * from product p left join category c
73 on p.cid=c.cid
74 union
75 select * from product p right join category c
76 on p.cid=c.cid;