left joinright joininner joinfull join的区别

Posted shmilywei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了left joinright joininner joinfull join的区别相关的知识,希望对你有一定的参考价值。

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接)  只返回两个表中联结字段相等的行
full join(全连接)  返回包括左表和右表中联结字段相等的记录

 

              

             

                

 举例如下:

--------------------------------------------      

表A记录如下:   

aID

aNum

1

a20050111

2

a20050112

3

a20050113

4

a20050114

5

a20050115

 

表B记录如下:

bID

bNum

1

2006032401

2

2006032402

3

2006032403

4

2006032404

8

2006032408

 

(一)、left join(左联接)

sql语句如下:

select * from A
left join B
on A.aID = B.bID

结果如下:     

aID

aNum

bID

bName

1

a20050111

1

2006032401

2

a20050112

2

2006032402

3

a20050113

3

2006032403

4

a20050114

4

2006032404

5

a20050115

NULL

NULL

--------------------------------------------

(所影响的行数为5行)

结果说明:

(1)left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。

(2)换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为:A.aID=B.bID)。

(3)B表记录不足的地方均为NULL。

 

(二)、right join(右联接)

sql语句如下:

select * from A
right join B
on A.aID = B.bID

结果如下:

aID

aNum

bID

bName

1

a20050111

1

2006032401

2

a20050112

2

2006032402

3

a20050113

3

2006032403

4

a20050114

4

2006032404

NULL

NULL

8

2006032408

--------------------------------------------

(所影响的行数为5行)

结果说明:

仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充。

 

(三)、inner join(等值连接)

sql语句如下:

select * from A

inner join B

on A.aID=B.bID

等价:select * from A

join B

on A.aID=B.bID

等价:select * from A,B

where A.aID=B.bID

结果如下:

aID

aNum

bID

bName

1

a20050111

1

2006032401

2

a20050112

2

2006032402

3

a20050113

3

2006032403

4

a20050114

4

2006032404

--------------------------------------------

(所影响的行数为4行)

结果说明:

很明显,这里只显示出了A.aID=B.bID的记录。这说明inner join并不以谁为基础,它只显示符合条件的记录。

 

(四)、full join(全连接)

sql语句如下:

select * from A
full join B
on A.aID=B.bID

结果如下:

aID

aNum

bID

bName

1

a20050111

1

2006032401

2

a20050112

2

2006032402

3

a20050113

3

2006032403

4

a20050114

4

2006032404

5

a20050115

NULL

NULL

NULL

NULL

8

2006032408

--------------------------------------------

结果说明:

理解为“全连接”,两张表中所有数据都显示,实际就是inner +(left-inner)+(right-inner)。

 

注意:

LEFT JOIN操作用于在任何的FROM子句中,组合来源表的记录。使用LEFT JOIN运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

 

语法:SELECT * FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:table1,table2参数用于指定要将记录组合的表的名称。

field1,field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。

compopr参数指定关系比较运算符:“=”,“<”,“>”,“<=”,“>=”或“<>”。

如果在INNER JOIN操作中要联接包含Memo数据类型或OLE Object数据类型数据的字段,将会发生错误。

以上是关于left joinright joininner joinfull join的区别的主要内容,如果未能解决你的问题,请参考以下文章

left joinright joininner join的区别

mysql之left joinright joininner join的区别

sql之left joinright joininner join的区别

sql之left joinright joininner join的区别

sql之left joinright joininner join的区别

sql之left joinright joininner join的区别