之前我们只在一张表上进行查询,但是现实情况是整个数据库被分成了很多个表来进行数据的存储,这个过程叫做规范化(normalization).
数据库规范化
数据库正则化非常有用因为它使得数据在每个表中的重复降到了最低,并且也让他们之间相互独立(例如汽车引擎可以和每一种汽车类型相互独立)。代价就是这个查询会变得更加复杂,并且查询的性能问题也会变得明显,尤其是当有很多很大的表的时候。
为了回答一个关于跨越很多表的实体的问题的时候,我们需要知道如何组合这些数并且从中提取我们想要要的。
使用JOINs来进行多表查询
在多个表中的一个单独的实体需要一个主键(primary key)来唯一的定位这个实体,最为常见的主键类型是自增的整数(Integer),也可也是字符串,哈希值,只要他是唯一的。
使用 JOIN 子句,我们可以使用两个不同表中唯一的键来组合行数据,我们首先要介绍的是 INNER JOIN.
1 | SELECT column, another_table_column, … |
INNER JOIN 匹配第一个和第二个表格拥有相同键值(通过 ON 来进行限制) 在两个表 JOIN 之后,我们之前说的那些子句才开始执行
注意: INNER JOIN 可以被简写成 JOIN 这两个是等价的。