码迷,mamicode.com
首页 > 其他好文 > 详细

多表查询

时间:2019-10-08 00:54:55      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:cloud   技术交流   cdt   width   ie7   数据   结果   strong   img   


微信公众号:菜鸟永恒



第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 多表查询



  1. 交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]
    ? 语法:select from A,B;

  2. 内连接查询(使用的关键字 inner join – inner可以省略)
    ? 隐式内连接:select from A,B where 条件;
    ? 显示内连接:select from A inner join B on 条件;

  3. 外连接查询(使用的关键字 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技术知识,,不妨来扫描二维码关注一下!

技术图片

欢迎加小编微信 拉你进新建的技术交流群
技术图片

听说关注的人都变美变帅了


觉得我的文章写得不错,不妨点一下好看并分享给朋友!

原文:大专栏  多表查询


多表查询

标签:cloud   技术交流   cdt   width   ie7   数据   结果   strong   img   

原文地址:https://www.cnblogs.com/sanxiandoupi/p/11633161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!