对于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语句,一般
系统会产生笛卡尔积,然后过滤它,这对
性能非常危险,特别是当表大的时候。