关系表
关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(relational))互相关联。
现在有两张表,第一张表products,存储着商品的产品描述,每个商品都有供应商的ID,价格和供应商的是谁;第二张表vendors,存储着供应商的详细信息,每个供应商占一行,每个供应商具有唯一的标识ID,即主键;
vendors表的主键又叫做products表的外键,它将vendors表和products表相关联。
外键:外键为某张表中的一列,它包含了另外一张表的主键值,定义了两张表之间的关系;
可伸缩性:能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好;
为什么要用联结
如果数据存储在多个表中,怎样用单条SELECT语句检索出数据?那就用联结;
联结是一种机制,用来在一条SELECT语句中关联多张表,因此称之为联结。可以联结多个表返回一组输出,联结用来关联表中正确的行。
联结不是物理实体,它在实际的数据库表中不存在。联结由MySQL根据需要建立,它存在于查询的执行当中。
products表中的外键的取值范围只能是vendors表中的主键,不是是其他的值;
创建联结
输入:SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id //联结,vendors表的vend_id和products表的vend_id联结
ORDER BY vend_name, prod_name;
内部联结
目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。其实,对于这种联结可以使用稍微不同的语法来明确指定联结的类型。
输入:SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors_vend_id = products.vend_id;
分析:是以INNER JOIN指定两个表之间的关系,联结条件用特定的ON子句而不是WHERE子句给出。传递给ON的实际条件与传递给WHERE的相同。
这种做法与前面的做法,效果完全相同。前面的做法比较简单,后面的这种做法能够明确联结;

联结多张表
SQL对一条SELECT语句中可以联结的表的数目没有限制。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系
输入:SELECT prodf_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 = 2005; //过滤条件
联结的表越多,性能下降的越厉害;

211

被折叠的 条评论
为什么被折叠?



