Oracle左侧连接上和在何处的区别的详细解释
日期交易金额交易金额
2009-4-01 110
2009-4-02 220
2009-4-03 00
2009-4-04 550
的…
我开始用左边的连接,用on作为两个表相关的条件,作为过滤条件随在哪里,但是发现0的数据没有显示,后来把关键字去掉,过滤条件在,问题解决,在线搜索,找到答案:
当数据库通过连接两个或多个表返回一个记录时,中间会生成一个临时表,然后将临时表返回给用户。
使用左连接时,之间的差别,那里的条件如下:
1,on条件是临时表生成时使用的条件,它返回左表中的记录,而不管on上的条件是否正确。
2,条件是临时表在临时表生成之后被过滤,此时,左连接没有意义(它必须返回到左侧表上的记录),如果条件不正确,该条件将被完全过滤掉。
假设有两个表:
表1表:
ID的大小
一百一十
二百二十
三百三十
表2对:
尺寸名称
10 AAA
20血脑屏障
20 CCC
两个SQL:
1、形式选择*表左加入TAB2在(tab1.size = TAB2。大小),对名为'AAA'。
2、形式选择*表左加入TAB2在(tab1.size = tab2.size和TAB2。名称= 'AAA')
sql的第一个过程:
1。中间表
在条件:
tab1.size = tab2.size
tab1.id tab1.size tab2.size tab2.name
11010 AAA
22020血脑屏障
22020 CCC
330(空)(空)
2。再次过滤中间表
有条件的地方:
对名为'AAA'。
tab1.id tab1.size tab2.size tab2.name
11010 AAA
第二个SQL过程:
1。中间表
在条件:
tab1.size = tab2.size和TAB2。名称= 'AAA'
(如果条件不正确,它将返回左侧表中的记录)
tab1.id tab1.size tab2.size tab2.name
11010 AAA
220(空)(空)
330(空)(空)
关键的原因是上述结果是左连接,右连接,全连接的,不管条件是否为真将返回左或右表中的记录,和特色的全是左和右。和内连接没有这种特异性和条件放在上在那里,和返回的结果集是一样的。