数据库入门:MySQL必知必会(十五)联结表

01. 联结

SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表,联结是利用SQL的SELECT能执行的最重要的操作

  1. 关系表:
    理解关系表的最好方法是来看一个现实世界中的例子:
    假如有一个包含产品目录的数据库表,其中每种类别的物品占一行。对于每种物品要存储的信息包括产品描述、价格以及生产该产品的供应商信息。现在,假如有由同一供应商生产的多种物品,那么在何处存储供应商信息呢?
    1.1 因为同一供应商生产的每个产品的供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间;
    1.2 如果供应商信息改变,只需改动一次即可
    1.3 如果有重复数据,很难保证每次输入该数据的方式都相同,不一致的数据在报表中很难利用。
    在这个例子中,可建立两个表,一个存储供应商信息另一个存储产品信息。vendors表包含所有供应商信息,每个供应商占一行,每个供应商具有唯一的标识,此标识称为主键(primary key)
    products表只存储产品信息,它除了存储供应商ID(vendors表的主键)外不存储其他供应商信息。vendors表的主键又叫作products的外键,它将vendors表与products表关联,利用供应商ID能从vendors表中找出相应供应商的详细信息。
    外键(foreign key): 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系;这样做的好处:
    1.4 供应商信息不重复,从而不浪费时间和空间;
    1.5 如果供应商信息变动,可以只更新vendors表中的单个记录,相关表中的数据不用改动;
    1.6 由于数据无重复,显然数据是一致的,这使得处理数据更简单;
  2. 为什么要使用联结?
    分解数据为多个表能更有效地存储、更方便地处理,并且具有更大的可伸缩性,怎样用单条SELECT语句检索出数据?
    2.1 联结: 一种机制,用来在一条SELECT语句中关联表
    2.2 联结不是物理实体,它在实际的数据库表中不存在
    2.3 由MySQL 根据需要建立,它存在于查询的执行当中

02. 创建联结

联结的创建非常简单,规定要联结的所有表以及它们如何关联即可:
创建联结
创建联结

  1. SELECT语句与前面所有语句一样指定要检索的列,最大的差别是所指定的两个列(prod_name和prod_price)在一个表中,而另一个列(vend_name)在另一个表中
  2. FROM子句列出了两个表,就是这SELECT语句联结的两个表的名字,用WHERE子句正确联结:指示MySQL 匹配vendors表中的vend_id和products表中的vend_id
  3. WHERE子句的重要性:
    在联结两个表时,你实际上做的是将第一个表中的每一行与第二个表中的每一行配对;WHERE子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的行;
  4. 笛卡儿积(cartesian product):没有联结条件的表关系返回的结果,检索出的行的数目将是第一个表中的行数乘以第二个表中的行数;
  5. 应该保证所有联结都有WHERE子句,否则MySQL将返回比想要的数据多得多的数据;
  6. 目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试,这种联结也称为内部联结
    内部联结
  7. 两个表之间的关系是FROM子句的组成部分,以 INNER JOIN 指定,联结条件用特定的ON子句给出;
  8. 联结多个表:
    SQL对一条SELECT语句中可以联结的表的数目没有限制:
    联结多个表
    8.1 性能考虑: MySQL在运行时关联指定的每个表以处理联结,这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表
    8.2 上一篇的例子:返回订购产品TNT2的客户列表
    子查询
    下面使用联结的相同查询:
    联结

03.下一篇:创建高级联结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值