关系数据库中最重要的两个概念,当属表连接和聚合。表连接将一条数据分开成多条,表聚合将多条合成一条。这一分一合,形成了关系数据库强大的逻辑表达能力,这篇文章讲表连接,关于聚合请移步:深入理解SQL分组聚合
1、理解各种表连接的思维捷径
“内连接、外连接、左外连接、右外连接、全连接、交叉连接、自然连接”,这么多种连接方式,你是不是已经晕了?一般的教科书都是从集合论及关系代数入手,搬出一大堆晦涩难懂的名词,读时好像懂了,但是过一段时间还是分不清楚。
其实要理解这些连接方式,你只需要记住一种连接“笛卡尔积”就可以了。也就是说,所有的其它连接方式,无非是在笛卡尔积的基础上,要么筛选掉一些记录、要么增加一些记录。
笛卡尔积是什么?想必大家都知道,它往往以负面形象出现,因为大家无时无刻被告知,在操作数据库时要避开它。虽然熟视无睹,但还是解释一下:它是指两个表连接时,左表的每行记录与右表的每行记录均连接,那么返回的记录数是两表记录数的乘积。
其实笛卡尔积又称交叉连接、直积,一般叫它笛卡尔积呢,为什么呢?因为这样叫显得更高大上嘛!
言归正传,下面我们用笛卡尔积,稍做“加减法”,得出其它连接方式:
【笛卡尔积】
SELECT * FROM a, b