文档章节

多表查询

stars永恒
 stars永恒
发布于 01/22 00:08
字数 927
阅读 14
收藏 0

第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技术知识,,不妨来扫描二维码关注一下!


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

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

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

© 著作权归作者所有

共有 人打赏支持
上一篇: 面向对象继承
下一篇: SQL语句查询
stars永恒
粉丝 10
博文 168
码字总数 221677
作品 0
大兴
后端工程师
私信 提问
关于php的mvc模型的疑惑

在php中,mvc里的模型部分是一个模型操作一个表?那如果要多表查询,是在模型里就把多表查询实现啦,还是几个表的模型已经写好,然后在控制器里实现多表的查询。是在模型的时候就实现多表的查...

欣儿
2013/04/02
563
4
Linux-MySQL基本命令-SQL语句

服务端命令SQL 在数据库系统中,SQL语句不区分大小写(建议用大写) SQL语句可单行或多行书写,以“;”结尾 关键词不能跨多行或简写 用空格和缩进来提高语句的可读性 子句通常位于独立...

一入IT深似海·
2018/07/29
0
0
MySQL 查询优化器(总结)

通过以上对单表查询、复合查询不同情况下的查询分析和测试,对查询优化器有了更深入的理解。同时,通过以上测试,也发现很多在查询中应该优化或者规避的策略,这些策略可以有效的优化SQL语句...

tara_qri
2015/09/29
95
0
ylb:SQL 表的高级查询-多表连接和子查询

ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询。 1,ylb:表的高级查询-多表连接和子查询返回顶部 --========================...

吞吞吐吐的
2017/10/14
0
0
MyDAL - .ListAsync() 使用

索引: 商业开发实战总结 一.API 列表   .ListAsync()   .ListAsync()     如: .ListAsync() , 用于 单表/多表连接 查询.   .ListAsync()     如: .ListAsync() , 用于 单表 ...

Meng.NET
2018/12/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式之路

https://java-design-patterns.com/patterns/ https://www.oodesign.com/ https://www.programering.com/a/MTNxAzMwATY.html https://design-patterns.readthedocs.io/zh_CN/latest/ https:/......

晨猫
今天
1
0
JDK1.8 jar包说明

JDK 1.8 lib:access-bridge-64.jarcharsets.jarcldrdata.jardeploy.jardnsns.jarjaccess.jarjavawa.jarjce.jarjfr.jarjfxrt.jarjfxswt.jarjsse.jarlocaledata.jar......

冷基
今天
1
0
判断用户的icloud是否开启【Swift4.2】

使用icloudkit存储用户私人数据时,必须判断用户的icloud是否开启【Swift4.2】 func isICloudContainerAvailable()-> Bool { if FileManager.default.ubiquityIdentityToken != ni......

叶落花开
今天
2
0
今天的学习

1、执行git add *命令就把改动提交到了暂存区,执行git pull命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]切换分支 2、执行git commit -m '说明' 命令就把改动提...

墨冥
昨天
0
0
Android4.4 及以下TextView,Button等控件使用矢量图报错

1 问题描述 最近项目开发中,图标资源我尽量使用了矢量图,然而配置了基本的兼容设置,程序在低版本中运行还是出现了问题。 xml布局文件中,在TextView中使用矢量图,比如android:drawableS...

newtrek
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部