第十五章-联结表

15.1联结

15.1.1关系表

关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(relational))互相关联。

外键:外键为某个表中的一列,他包含另一个表的主键值

15.1.2为什么要使用联结

使用联结,当数据存储在多个表中时,可以用单条SELECT语句检索出数据。注意:联结由MySQL根据需要建立,它存在于查询的执行当中,而并没有实际的数据库表存在。

15.2创建联结

输入

SELECT vend_name,prod_name,prod_price
FROM vendors,products
WHERE vendors.vend_id=products.vend_id
ORDER BY vend_name,prod_name;

分析

最大的差别是在于所指定的两个列(prod_name和prod_price)在一个表中,而另一个列(vend_name)在另一个表中

现在来看FROM子句。与以前的SELECT语句不一样,这条语句的FROM子句列出了两个表,分别是vendors表和products表。他们就是这条SELECT语句联结的两个表的名字。这两个表用WHERE子句正确联结,WHER子句指示MySQL匹配vendors表中的vend_id和products表中的vend_id

15.2.1 WHERE子句的重要性

笛卡尔积:由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

但是笛卡尔积返回的查询结果太多,往往不是想要的结果,因此不要忘了Where子句

15.2.2内部联结

目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。

下面看另外一种联结方式:

输入

SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id=products.vend_id;

分析 此语句中的SELECT域前面的SELECT语句相同,但FROM子句不同,这里,两个表之间的关系是FROM子句的组成部分,以INNER JOIN指定,在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句给出。

该种语法和WHERE子句定义的联结效果相同。

15.2.3联结多个表

SQL对一条SELECT语句中可以联结的表的数目没有限制。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。

注意:MySQL在运行时关联指定的每个表以处理联结。这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害。

15.3小结

联结是SQL中最重要最强大的特性,有效地使用联结需要对关系数据 库设计有基本的了解。本章随着对联结的介绍讲述了关系数据库设计的 一些基本知识,包括等值联结(也称为内部联结)这种最经常使用的联结形式。

你可能感兴趣的:(#,《Mysql必知必会》读书笔记)