13.基础-联结表

关系表

     关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(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;  //过滤条件

联结的表越多,性能下降的越厉害;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值