对于SQL的连接,学习可能会很混乱,我们知道SQL的连接语法有很多内部、外部和左边。有时,它是不明确的选择的结果是什么,有一个恐怖的物品编码(真不清楚为什么编码的恐怖也被墙)通过货车的维恩图解释SQL的加入。我觉得清晰易懂。

假设我们有两个表。

桌子是左边的那张桌子。
表B是右边的桌子。
每个记录中有四条记录,其中两个是相同的,如下所示:
复制代码代码如下所示:
ID名
—
1海盗1大头菜
2猴子2海盗
3忍者3达斯·维德
4意大利面4忍者

让我们看看不同的连接将产生什么。






SELECT * FROM中
内部联接TableB
在tablea.name = tableb.name

ID名
—
1海盗2海盗
3忍者4 ninjainner加入
结果的集中是A和B的交集。




SELECT * FROM中
全外连接TableB
在tablea.name = tableb.name

ID名
—
1海盗2海盗
2猴子空值
3忍者4忍者
4意大利面空零
零1大头菜
零3 Darth VaderFull外,加入A和B,但需要注意的是,零是一个记录,是不匹配的一个重要价值。






SELECT * FROM中
左外连接TableB
在tablea.name = tableb.name

ID名
—
1海盗2海盗
2猴子空值
3忍者4忍者
4意大利面空nullleft外连接产生的表一套完整,而在B表的匹配和非匹配的值,用空值代替。





SELECT * FROM中
左外连接TableB
在tablea.name = tableb.name
在tableb.id是空的

ID名
—
2猴子空值
4个意大利空null产生一个集合,该集合不在表中的B表中。





SELECT * FROM中
全外连接TableB
在tablea.name = tableb.name
在tablea.id是空的
或tableb.id是空的

ID名
—
2猴子空值
4意大利面空零
零1大头菜
空null 3达斯·维德生成一个数据集,该数据集不出现在表和b表中。

我们需要注册的是交叉连接中的一个交叉,这个连接不能使用这种类型的图,因为它是表A和B数据的组合,这是笛卡尔乘积,这是笛卡尔乘积:
复制代码代码如下所示:
SELECT * FROM中
交叉连接TableB

这个笛卡尔积将产生一个4×4=16的记录。一般来说,我们很少使用这个语法,但是我们必须小心,如果不使用嵌套SELECT语句,一般系统会产生笛卡尔积,然后过滤它,这对性能非常危险,特别是当表大的时候。