联结
SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。联结是利用SQL的select能执行的最重要的操作
关系表
- 重复信息既浪费时间又浪费存储空间
- 信息改变只需改动一次即可
- 关键是,相同的数据出现多次决不是一件好事,此因素是关系数据库设计的基础
- 关系表的设计就是要保证把信息分解成多个表,一类数据一个表,各表通过某些常用的值(即关系设计中的关系(relational))互相关联
- 外键(foreign key)为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
- 可伸缩性(scale)能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好(scale wella)
- 简单地说,联结是一种机制,用来在一条select语句中关联表,因此称之为联结
- 重要的是,要理解联结不是物理实体,换句话说,它在实际的数据库表中不存在。联结由MySQL根据需要建立,它存在于查询的执行当中
创建联结
- 完全限定列名,在引用的列可能出现二义性时,必须使用完全限定列名,用一个点分隔的表名和列名
- 笛卡儿积(cartesian product)由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数
- 不要忘了where子句,应该保证所有联结都有where子句,否则MySQL将返回比想要的数据多得多的数据,同理,应该保证where子句的正确性
- 叉联结,有时我们会听到返回称为叉联结(cross join)的笛卡儿积的联结类型
- 等值联结(equijoin) ,它基于两个表之间的相等测试,这种联结也称为内部联结
- select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;
- 两个表之间的关系是from子句的组成部分,以inner join指定,联结条件用特定的on子句而不是where子句
- ANSI SQL规范首选inner join语法,此外 尽管使用where子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件
- 性能考虑,MySQL在运行时关联指定的每个表以处理联结,这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害
- 有效地使用联结需要对关系数据库设计有基本的了解,等值联结(也称为内部联结)是最常用的联结形式
SQL的联结功能允许在查询中结合多个表,通过外键和内连接实现数据的关联。关系数据库设计强调避免数据冗余,提高可伸缩性和性能。联结并非物理实体,而是在查询执行时动态建立。有效的联结使用需注意避免笛卡尔积,确保where子句的正确性,并且谨慎处理联结的表数量以优化性能。
685

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



