MySQL必知必会——第15章 联结表 读书笔记

1 what is 联结?
SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。
先行知识:关系表:保证把信息分解成多个表,一类数据一个表,各表通过某些常用的值互相关联。
举例:使用两个表分别存储供应商信息和产品信息。
why:为什么要使用两个表而不是一个表来存储供应商信息和产品信息?
①因为同一个供应商生产的每个产品的供应商信息都是相同的, 对每个产品重复此信息既浪费时间又浪费存储空间。
②如果供应商信息改变,只需要改动一次即可。
③如果有重复数据(即每种产品都存储供应商信息),很难保证每次输入该数据的方式相同,不一致的数据在报表中很难利用。
关键:相同数据出现多次绝不是一件好事。
因此,使用vendors供应商表存储供应商信息,所有供应商占一行,每个供应商具有唯一的标识(即主键)。使用products表存储产品信息,除了存储供应商ID外不存储其他供应商信息,vendors的主键也是products表的外键,它将vendors表和products表关联,利用供应商ID能从vendors表中找出相应供应商的详细信息。
总结:关系数据可以有效地存储和方便地处理。因此,关系数据库的可伸缩性(能够适应不断增加的工作量而不失败)比非关系数据库要好。
2 why use 联结?
分解数据为多个表能更有效地存储,更方便地处理,并且具有更大的可伸缩性,但这些好处是有代价的,如果数据存储在多个表中,怎样用单条select语句检索出数据?答案是使用联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时联结表中正确的行。
联结不是物理实体,联结在实际的数据库表中不存在。
联结根据需要建立,存在于查询的执行当中。
维护引用完整性:使用关系表时,仅在关系列中插入合法的数据非常重要。(例如上述例子中,如果products表中插入了拥有非法供应商ID(没有在vendors表中出现))的供应商生产的产品,则这些产品是不可访问的,因为它们没有关联到某个供应商。为了防止这种情况发生,可指示MySQL只允许在products表的供应商ID列中出现合法值,这就是维护引用完整性,通过在表的定义中指定主键和外键来实现的。
3 how to create and use联结?
举例:前提是一个供应商表,一个产品表
①vendors表:
在这里插入图片描述
②products表:
在这里插入图片描述
目的:列举供应商名和其对应的产品名

select vend_name,prod_name
from vendors,products 
where vendors.vend_id = products.vend_id 
order by vend_name,prod_name;

利用where子句建立联结关系。
在一条select语句中联结几个表,相应的关系是在运行中构造的。在数据库表的定义中不存在能指示MySQL如何对表进行联结的东西。
在联结表时,你实际上做的是将第一个表的每一行和第二个表的每一行配对。where子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的行。没有where子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配在一起。如果没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二表中的行数。因此,应该保证所有联结都有where子句,否则MySQL将返回比想要的数据多得多的数据

4 内部联结
内部联结的两种等价形式:
形式一:
from 表1,表2 where 联结条件
形式二:
from 表1 inner join 表2 on 联结条件
首选形式二,明确使用联结语法能够确保不会忘记联结条件, 有时候这样做也能影响性能。
5 联结多个表
SQL对一条select语句可以联结的表的数目没有限制。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。

select prod_name,vend_name,prod_price,quantity 
from products,vendors,orderitems
where products.vend_id = vendors.vend_id
AND orderitems.prod_id=products.prod_id
AND order_num=20005;

上述例子显示编号为20005的订单中的物品。订单物品存储在orderitems表中。每个产品按照其产品ID存储,它引用products表中的产品。这些产品通过供应商ID联结到vendors表中相应的供应商,供应商ID存储在每个产品的记录中。
不要联结不必要的表。联结的表越多,性能下降越厉害。

发布了90 篇原创文章 · 获赞 8 · 访问量 8235

猜你喜欢

转载自blog.csdn.net/weixin_43854189/article/details/103938650