15. 联结表
1. 联结
1.1. 关系表
- 外键(foreign key)外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
- 可伸缩性(scale)能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好(scale well)。
- 如果数据存储在多个表中,怎样用单条SELECT语句检索出数据?答案是使用联结。
- 联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。
2. 创建联结
- 与以前的SELECT语句不一样,这条语句的FROM子句列出了两个表,分别是vendors和products。它们就是这条SELECT语句联结的两个表的名字。这两个表用WHERE子句正确联结,WHERE子句指示MySQL匹配vendors表中的vend_id和products表中的vend_id。
2.1. WHERE子句的重要性
笛卡儿积(cartesian product)由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
2.2. 内部联结
- 目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。
- 此语句中的SELECT与前面的SELECT语句相同,但FROM子句不同。这里,两个表之间的关系是FROM子句的组成部分,以INNER JOIN指定。在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句给出。传递给ON的实际条件与传递给WHERE的相同。
2.3. 联结多个表
- SQL对一条SELECT语句中可以联结的表的数目没有限制。
- MySQL在运行时关联指定的每个表以处理联结。这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害。
- 子查询并不总是执行复杂SELECT操作的最有效的方法,下面是使用联结的相同查询:
15. 联结表
http://binbo-zappy.github.io/2024/11/27/mysql_bzbh/15-联结表/