联结表
什么是链接,为什么要使用,如何使用。
关系表
例子: 一个包含目录的数据库,其中每种类型物品占用一行,每种物品要存储的信息包括产品描述和价格,以及生产该产品的供应商信息。
有一个供应商生产多种物品,何处存储供应商的信息(地址,电话等),如何分开存储。
同一个供应商存储的信息都是相同的,每种产品重复信息,浪费空间
如果供应商信息改变,执行改一次。
重复数据,难保证每次储存信息一致,不一致信息难管理,利用。
关系数据库设计:
避免相同数据出现多次
信息被分解成一种数据,一个表
各表通过某些常用值相互关联
上面的例子,设计两个表,一个存储供应商信息,一个存储产品信息。
Vendors 表包含所有供应商信息,供应商的primary key 唯一的标识值vend_id。
Products表只存储产品信息,与供应商的primary key vend_id 表关联,利用供应商的ID从Vendors表中找出相应的供应商详细信息。
这样的设计刚好符合上面3点。
关系数据库优点可伸缩性 (scale),能够适应不断增加的工作量。
使用联结的好处
分解多个表方便存储,方便处理,可伸缩性强。
使用链接可以用一条SELECT中关联多个表返回一组输出。
注意:在设计关系数据库,避免在另一个关系表中插入非法的ID,可以设置关系表中值,只出现合法的值
创建联结
链接多个表
解释:
SELECT vend_name, prod_name, prod_price 指定检索的列,prod_name, prod_price 在同一个表。vend_name 在另外一个表
From 指定联结两个表Vendors, Products
WHERE子句限定 Vendors.vend_id = Products.vend_id 完全限定名。
WHERE子句的重要
笛卡儿积(cartesian product) 由没有联结的条件表关系返回的结果,
保证所有联结都有WHERE子句,否则返回比的数据会比想要的数据多很多。
上面的例子包含很多,不正确的数据。
内部联结
基于两边直接的相对测试,称为等值联结(euqijoin)
联结多个表
先列出所有列,再定义表之间的关系。
返回订购产品RGAN01的客户列表
下面使用联结查询
解释:返回的数据需要使用3个表,三个WHERE子句,最后过滤出RGAN01产品的数据。
原作者:MySQL基础笔记
|