佛山新网站建设效果,收不到wordpress的邮件,广告联盟平台自动赚钱,百度推广最简单方法三点#xff1a;什么是联结#xff1f;为什么使用联结#xff1f;如何编写使用联结的select语句
12.1 联结
SQL最强大的功能之一就是能在数据查询的执行中联结#xff08;join)表。联结是利用SQL的select能执行的最重要的操作。
在使用联结前#xff0c;需要了解关系表…三点什么是联结为什么使用联结如何编写使用联结的select语句
12.1 联结
SQL最强大的功能之一就是能在数据查询的执行中联结join)表。联结是利用SQL的select能执行的最重要的操作。
在使用联结前需要了解关系表和关系数据库设计的一些基础知识。
12.1.1 关系表
例子
一个产品目录的数据库表一类物品占一行每一行对物品的介绍包含产品描述价格以及生产该产品的供应商。
现在有同一供应商生产的多种物品那么在何处存储供应商名地址联系方式等供应商信息
产品信息与供应商信息分开存储的理由
1. 同一供应商生产的每个产品其供应商信息都是相同的对每个产品重复此信息既浪费时间又浪费存储空间
2. 当供应商信息发生变化例如供应商迁址或电话号码变动只需要修改一次就行
3. 当有重复数据很难保证每次输入该数据的方式都相同。不一致的数据在报表中就很难利用。
关系数据库设计的基础相同的数据出现多次决不是一件好事。
关系表的设计把信息分解成多个表一类数据一个表各个表通过某些共同的值互相关联。
此例中可以建立两个表一个存储供应商信息另一个存储产品信息。
Vendors表包含所有供应商信息每个供应商占一行具有唯一的标识此标识称为主键primary key).可以是供应商ID或任何其他唯一值。
Products表只存储产品信息除了存储供应商ID(Vendors表的主键外不存储其他有关供应商的信息。
Vendors表的主键将Vendors表和Products表关联。
好处
1. 供应商信息不重复不会浪费时间和空间
2. 当供应商信息变动时只需要更新Vendors表中的单个记录相关表中的数据不用改动。
3. 由于数据不重复数据显然是一致的使得处理数据和生成报表更简单。
关系数据可以有效地存储方便地处理。关系数据库的可伸缩性更好。
可伸缩scale):
能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称为可伸缩性好。
12.1.2 为什么使用联结
将数据分解为多个表能更有效地存储更方便的处理并且可伸缩性更好。
使用联结联结是一种机制用来在一条select语句中关联表。使用特殊的语法可以联结多个表返回一组输出联结在运行时关联表中正确的行。
12.2 创建联结
指定要联结的所有表并关联它们的方式。 vend_name来自一个表prod_name, prod_price来自一个表。
要匹配的两列指定为venders.vend_id和products.vend_id。
这里需要这种完全限定列名一条select语句返回了两个不同表中的数据。
12.2.1 where子句的重要性
where子句作为过滤条件只包含那些匹配给定条件这里是联结条件的行。没有where子句第一个表中的每一行将与第二个表中的每一行配对而不管它们逻辑上是否能配在一起。
笛卡儿积cartesian product)没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。返回笛卡儿积的联结也称叉联结cross join) 从上面的输出可以看出来相应的笛卡儿积不是我们想要的返回的数据用每个供应商匹配了每个产品包括了供应商不正确的产品即使供应商根本就没有产品。
所有联结都必须有where子句
12.2.2 内联结
目前为止使用的联结成为等值联结equijoin)基于两个表之间的相等测试也称为内联结inner join). 联结条件用特定的on子句而不是where子句给出。传递给on的实际条件与传递给where的相同。
12.2.3 联结多个表
SQL不限制一条select语句中可以联结的表的数目。
创建联结的基本规则也相同。首先列出所有表然后定义表之间的关系。 where子句定义两个联结条件第三个联结条件用来过滤出订单20007中的物品。
不要联结不必要的表联结的表越多性能下降越厉害。
执行复杂的select操作的两种方法第11课中的子查询和第12课中的联结
子查询返回订购产品rgan01的顾客列表 联结 联结的列名在上述的例子中名字都是一样的但是列名相同并不是必需的。