联结多个表
直接上去撸
SELECT prod_name,vend_name,prod_price,quantity
FROM OrderItems,Products,Vendors
WHERE Products.vend_id = Vendors.vend_id
AND OrderItems.prod_id = Products.prod_id
AND order_num = 2007
1 SELECT表示查询四个信息:商品名称 供应商的名称 商品价格 商品数量
2 FROM表示这四个信息从三个表中获取:商品表,供应商表和订单详情表
3 分析三个表:
商品表中的每一条记录代表一个商品包含了一个商品的基本信息:商品编号,商品名称,商品价格,供应商编号
供应商标每一条记录代表一个供应商,包含了一个供应商的基本信息:供应商编号,供应商名称
订单详情表每一记录代表:
一个订单的对其中一种商品的详情:订单详情编号(实际不用),订单编号(实际要用),商品编号,顾客编号,该商品购买数量
三张表中处于主要地位的是订单表
两张表的联结中处于主要地位的又是谁呢?
当我们看到订单表时,一条一条的看,发现每条只有商品编号(不表达实际的信息)
我们想知道买的究竟是什么商品,就得拿着这个编号去查阅商品表,
在商品表里,根据编号查阅到对应的信息
以此类推直到最后一行
注意:订单中的商品记录集合一定是包含在商品表记录集合的(因为能买就说明有,否则就是一个实践逻辑错误)
这说明,在订单表和产品表的联结中,存在一种包含在的关系
笔记让人可以专注一些,记笔记看似笨拙,但对于一个笨蛋来说,确实是最好的办法!
那么,在查阅商品表的时候,又发现了供应商编号(同样不能表达实际意义的信息),我想知道是谁生产了这种商品
于是,要拿着商品编号去查询供应商表,
在供应商表中,查到生产该产品的供应商名字还有其他信息
注意,在这里,产品表中的记录集合一定是包含在生产表中的(因为能上架的产品一定有人生产出来的,不是天上掉下来的,否则就是实践逻辑错误)
不难发现,这种按编号等值连接表做的其实就是一个翻译和介绍的事情而已
这里一定要关注,表间的包含在关系
订单表包含在产品表,产品表包含在生产商表
4 能够等值连接上的那些记录是有实际意义的
所以联结就是信息的整合而已
整合后的信息的才是最有价值的
5 对于人类而言,三张表放在一起简单地用眼睛看看就能实现信息的整合了
但计算机不行,计算机做不到
6 所以当不理解电脑的做法时,想想人类是怎么做的,把这两种方式放在一起比较一下,会更清楚:
计算机的做法无非是用自己方式实现人类的做法
7 计算机的做法是什么呢? 简而言之,遍历!!
这是计算机轻松做到,而我们人类永远不能企及的事情!
先是对这三个表求笛卡尔积(先是订单详情表和产品表求,此结果然后再和生产商表求)
然后,按给定的三个条件逐个删选!!!
在这里FROM做了笛卡尔
WHERE做了筛选
8 WHERE的筛选条件有三个
先看前两个:
Products.vend_id = Vendors.vend_id和OrderItems.prod_id = Products.prod_id
Products.vend_id = Vendors.vend_id
首先,这里肯定是有先后顺序的,不赘述了
其次,该句的作用对应于对Products表中的vend_id进行了翻译和介绍的那种的人类认知
OrderItems.prod_id = Products.prod_id
该筛选的作用同样是对OrderItems表中的prod_id进行了翻译和介绍的那种人类认知
要知道笛卡尔积很多是没有意义的
联结的意义在于筛选而筛选的意义在于筛选出有意义的数据!!
实际上,到这里才真正的将三张表的信息整合了起来!!
不过整合的结果很琐碎,每一条记录是三张表每条记录的联结
在整合之后我们要做两件事情:
①再筛选!!(这才是真正的筛选的开始)
这里对应order_num="20007"
②选择我们想知道的信息字段进行查询(每个字段表示某一方面的信息)方有多面,方中的一面就叫一方面!
最后整合其中的逻辑:
1.先求笛卡尔积
2.把表进行整合(对应等值筛选)
3.按条件查询需要的信息字段
联结就是通过等值筛选实现的表与表的信息整合!!
最后的最后:生活不是高考需要语数外理化生样样精通才能成功,而是把一件事做精就够够的了!!一招鲜足够吃遍天!