【MySQL必知必会】第15章 联结表(学习笔记)

SQL的联结功能允许在查询中结合多个表,通过外键和内连接实现数据的关联。关系数据库设计强调避免数据冗余,提高可伸缩性和性能。联结并非物理实体,而是在查询执行时动态建立。有效的联结使用需注意避免笛卡尔积,确保where子句的正确性,并且谨慎处理联结的表数量以优化性能。

联结

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

关系表

  1. 重复信息既浪费时间又浪费存储空间
  2. 信息改变只需改动一次即可
  3. 关键是,相同的数据出现多次决不是一件好事,此因素是关系数据库设计的基础
  4. 关系表的设计就是要保证把信息分解成多个表,一类数据一个表,各表通过某些常用的值(即关系设计中的关系(relational))互相关联
  5. 外键(foreign key)为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
  6. 可伸缩性(scale)能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好(scale wella)
  7. 简单地说,联结是一种机制,用来在一条select语句中关联表,因此称之为联结
  8. 重要的是,要理解联结不是物理实体,换句话说,它在实际的数据库表中不存在。联结由MySQL根据需要建立,它存在于查询的执行当中

创建联结

  1. 完全限定列名,在引用的列可能出现二义性时,必须使用完全限定列名,用一个点分隔的表名和列名
  2. 笛卡儿积(cartesian product)由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数
  3. 不要忘了where子句,应该保证所有联结都有where子句,否则MySQL将返回比想要的数据多得多的数据,同理,应该保证where子句的正确性
  4. 叉联结,有时我们会听到返回称为叉联结(cross join)的笛卡儿积的联结类型
  5. 等值联结(equijoin) ,它基于两个表之间的相等测试,这种联结也称为内部联结
  6. select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;
  7. 两个表之间的关系是from子句的组成部分,以inner join指定,联结条件用特定的on子句而不是where子句
  8. ANSI SQL规范首选inner join语法,此外 尽管使用where子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件
  9. 性能考虑,MySQL在运行时关联指定的每个表以处理联结,这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害
  10. 有效地使用联结需要对关系数据库设计有基本的了解,等值联结(也称为内部联结)是最常用的联结形式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值