微信公众号:菜鸟永恒
第 1 章 多表关系实战
1.1 实战 1:省和市 方案 1:多张表,一对多
方案 2:一张表,自关联一对多
1.2 实战 2:用户和角色 (比如演员和扮演人物)
多对多关系 1.3 实战 3:角色和权限 (比如公司职位和开除等权限)
多对多关系
1.4 实战 4:客户和联系人 (可选)
一对多:一个客户服务于多个联系人
第 2 章 多表查询
CREATE TABLE category (cid int PRIMARY KEY , cname VARCHAR(50));CREATE TABLE products(pid int PRIMARY KEY , pname VARCHAR(50), price INT, flag VARCHAR(2), #是否上架标记为:1 表示上架、0 表示下架 category_id int, CONSTRAINT products_fk FOREIGN KEY (category_id) REFERENCES category (cid));
2.1 初始化数据
分类
INSERT INTO category(cid,cname) VALUES(‘1′,’ 家电 ’);INSERT INTO category(cid,cname) VALUES(‘2′,’ 服饰 ’);INSERT INTO category(cid,cname) VALUES(‘3′,’ 化妆品 ’);
商品
INSERT INTO products(pid, pname,price,flag,category_id) VALUES(‘1′,’ 联想 ’,5000,’1′,1);INSERT INTO products(pid, pname,price,flag,category_id) VALUES(‘2′,’ 海尔 ’,3000,’1′,1);INSERT INTO products(pid, pname,price,flag,category_id) VALUES(‘3′,’ 雷神 ’,5000,’1′,1);
INSERT INTO products (pid, pname,price,flag,category_id) VALUES(‘4′,’JACK JONES’,800,’1′,2);INSERT INTO products (pid, pname,price,flag,category_id) VALUES(‘5′,’ 真维斯 ’,200,’1′,2);INSERT INTO products (pid, pname,price,flag,category_id) VALUES(‘6′,’ 花花公子 ’,440,’1′,2);INSERT INTO products (pid, pname,price,flag,category_id) VALUES(‘7′,’ 劲霸 ’,2000,’1′,2);
INSERT INTO products (pid, pname,price,flag,category_id) VALUES(‘8′,’ 香奈儿 ’,800,’1′,3);INSERT INTO products (pid, pname,price,flag,category_id) VALUES(‘9′,’ 相宜本草 ’,200,’1′,3);
2.2 多表查询
交叉连接查询 (基本不会使用 - 得到的是两个表的乘积) [了解]
语法:select * from A,B;
内连接查询 (使用的关键字 inner join — inner 可以省略)
隐式内连接:select * from A,B where 条件; 显示内连接:select * from A inner join B on 条件;
外连接查询 (使用的关键字 outer join — outer 可以省略)
左外连接:left outer join select * from A left outer join B on 条件; 右外连接:right outer join select * from A right outer join B on 条件;
1. 查询哪些分类的商品已经上架
隐式内连接
SELECT * FROM category c , products p
WHERE c.cid = p.category_id and p.flag = ‘1’;
内连接
SELECT * FROM category c
INNER JOIN products p ON c.cid = p.category_id
WHERE p.flag = ‘1’;
2. 查询所有分类的商品个数
左外连接
INSERT INTO category(cid,cname) VALUES(4,’ 奢侈品 ’);SELECT cname,COUNT(category_id) FROM category c
LEFT OUTER JOIN products p
ON c.cid = p.category_id
GROUP BY cname;
2.3 子查询
子查询:一条 select 语句结果作为另一条 select 语法一部分(查询条件,查询结果,表等)。select …. 查询字段 … from … 表.. where … 查询条件
3 子查询, 查询“化妆品”分类商品详情
隐式内连接
SELECT * FROM products p , category c
WHERE p.category_id=c.cid AND c.cname = ‘ 化妆品 ’;
子查询
作为查询条件
SELECT * FROM products p
WHERE p.category_id =
(
SELECT c.cid FROM category c
WHERE c.cname=’ 化妆品 ’
);
## 作为另一张表
SELECT * FROM products p ,
(SELECT * FROM category WHERE cname=’ 化妆品 ’) c
WHERE p.category_id = c.cid;
查询“化妆品”和“家电”两个分类商品详情
SELECT * FROM products p
WHERE p.category_id in
(
SELECT c.cid FROM category c
WHERE c.cname=’ 化妆品 ’ or c.name=’ 家电 ’
);
欢迎关注公众号:菜鸟永恒 点滴记录,共同进步。
立志想成为大牛的菜鸟一枚,将会记录 Java 技术知识,,不妨来扫描二维码关注一下!
欢迎加小编微信 拉你进新建的技术交流群
听说关注的人都变美变帅了
觉得我的文章写得不错,不妨点一下好看并分享给朋友!