例如,有两个表:
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
表1数据如下:
Id Name
-------------
1 A
2 B
表2数据如下:
Id Name
-------------
1 A
2 B
3 C
如果我执行下面提到的SQL语句,两个输出将是相同的:
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
请解释以上SQL语句中左连接和右连接的区别。
Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id
根据定义:Left Join选择表1中使用"select"关键字提到的所有列,以及表2中与"on"关键字后的条件匹配的列。
类似地,根据定义:Right Join选择表2中使用"select"关键字提到的所有列,以及表1中与"on"关键字后的条件匹配的列。
根据您的问题,这两个表中的id将与输出中需要抛出的所有列进行比较。因此,id 1和id 2在两个表中都很常见,结果在结果中,你将有四个列,分别是第一个表和第二个表的id和name列。
*选择*
从表1
左连接Table2到Table1。id = Table2.id
上面的表达式,它从表1和列中获取所有记录(行),并从表2中获取表1和表2中的匹配id。
select *
从表二
在Table1上右连接Table1。id = Table2.id**
与上面的表达式类似,它从表1和列中获取所有记录(行),并从表2中获取表1和表2中的匹配id。(请记住,这是一个右连接,因此将考虑table2而不是table1的所有列)。
表从你正在采取的数据是'左'。
您正在加入的表是“正确的”。
LEFT JOIN:从左表中取出所有项,并(仅)从右表中取出匹配项。
右连接:从右表中取出所有的项目,并(仅)从左表中取出匹配的项目。
所以:
Select * from Table1 left join Table2 on Table1.id = Table2.id
给:
Id Name
-------------
1 A
2 B
但是:
Select * from Table1 right join Table2 on Table1.id = Table2.id
给:
Id Name
-------------
1 A
2 B
3 C
你是正确的连接表与少行表与多行表
和
再次,左连接表与少行表与多行
试一试:
If Table1.Rows.Count > Table2.Rows.Count Then
' Left Join
Else
' Right Join
End If
Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id
根据定义:Left Join选择表1中使用"select"关键字提到的所有列,以及表2中与"on"关键字后的条件匹配的列。
类似地,根据定义:Right Join选择表2中使用"select"关键字提到的所有列,以及表1中与"on"关键字后的条件匹配的列。
根据您的问题,这两个表中的id将与输出中需要抛出的所有列进行比较。因此,id 1和id 2在两个表中都很常见,结果在结果中,你将有四个列,分别是第一个表和第二个表的id和name列。
*选择*
从表1
左连接Table2到Table1。id = Table2.id
上面的表达式,它从表1和列中获取所有记录(行),并从表2中获取表1和表2中的匹配id。
select *
从表二
在Table1上右连接Table1。id = Table2.id**
与上面的表达式类似,它从表1和列中获取所有记录(行),并从表2中获取表1和表2中的匹配id。(请记住,这是一个右连接,因此将考虑table2而不是table1的所有列)。