mysql笔记15:联结表

15.1.1 关系表

为什么要把表分开:
以产品表和供应商表为例,将产品和供应商弄成两个表的好处是:

  1. 同一个供应商的产品的供应商信息是相同的,如果每个产品都重复该信息浪费时间,浪费空间
  2. 如果供应商信息改变,只需要改变一次

外键:外键为某个表中的某一列,它包含另一个表示的主键值,定义了两个表之间的关系。

使用做的好处表示:

  • 供应商信息不重复,从而不浪费时间和空间
  • 如果供应商信息变动了,只更新vendors表的单个记录,相关表中的数据不用改动
  • 由于数据无重复,显示数据是一致的,这使得处理数据比较简单

可伸缩性:能够适应不断增加的工作量而不失败

15.1.2 为什么要使用联结
维护引用完整性:指示mysql只允许在products表的供应商ID列中出现合法值(通过在表的定义中指定主键和外键)

15.2 创建联结
select vend_name, prod_name, prod_price
from vendors, products
where vendors.vend_id = products.vend_id
order by vend_name, prod_name;

两个表用where子句正确联结,where子句指示mysql匹配vendors表中的vend_id和products表中的vend_id.

15.2.1 where子句的重要性
利用where子句建立联结关系似乎奇怪,实际上,这是充分的理由。因为,select联结表,相应的关系是在运行时构造的。在联结两个表时,实际上是把第一个表的每一行和第二个表的每一行作匹配。where子句作为过滤条件,只包含那些匹配给定条件

不要忘了where子句,如果联结的时候不使用where子句,否则mysql将会返回比你所需要的更多的数据。

15.2.2 内部联结
上面的连接是等值连接,基于相等测试,也叫内部联结。下面的语法也可以用于明确指定内部联结:
select vend_name, product_name, product_price
from vendors inner join products
on vendors.vend_id = products.vendor_id;
与where语句两处不同,一处是inner join明确指定,第二处是使用on而非是where。

ANSI SQL推荐使用inner join语法,因为比较明确。

15.2.3 联结多张表

我们可以联结多张表,和联结两张表类似。

有时候,子查询和联结表都能够完成工作,需要我们进行实验判断效率。

上一篇:开篇 2022-2-15


下一篇:Mysql练习