[SqlServer]sql编程9-表连接join,left join,right join用法详解

表连接的几种方式

inner join,left join,right join,full join,cross join.

其中inner  join可以省去inner 关键字。 

left/right join 与left/right outer join 等价。

full join 与 同时 left join 和 right join 等价。

cross join 为将两张表笛卡尔集 

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

inner join(等值连接) 只返回两个表中联结字段相等的行

表连接示例用法

原始表

两个原始表 u1和u2:

blob.png

内连接 (Inner Join)

其中inner  join可以省去inner 关键字, 只连接匹配的行,下面三个语句执行的结果都是一样的。结果如下图。

--内连接
SELECT * FROM u1 INNER JOIN u2 ON u1.ID=u2.ID
SELECT * FROM u1 JOIN u2 ON u1.ID=u2.ID
SELECT * FROM u1, u2 WHERE u1.ID=u2.ID

SqlServer表内连接用法

左外连接 (Left  Jion)

等价于left outer join。包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行。

--左外连接
SELECT * FROM dbo.u1 LEFT OUTER JOIN dbo.u2 ON dbo.u1.ID = dbo.u2.ID
SELECT * FROM dbo.u1 LEFT JOIN dbo.u2 ON dbo.u1.ID = dbo.u2.ID

SqlServer左外连接left outer join 的用法

右外连接 (Rigt  Jion)

等价于right outer join,包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行。

--右外连接
SELECT * FROM dbo.u1 RIGHT OUTER JOIN dbo.u2 ON dbo.u1.ID = dbo.u2.ID
SELECT * FROM dbo.u1 RIGHT JOIN dbo.u2 ON dbo.u1.ID = dbo.u2.ID

SqlServer右外连接用法

全连接(Full Join)

等价于full outer join,包含左边和右边表中全部行的数据。 即同时 left join 和 right join 。

--全连接
SELECT * FROM dbo.u1 FULL JOIN dbo.u2 ON dbo.u1.ID = dbo.u2.ID
SELECT * FROM dbo.u1 FULL OUTER JOIN dbo.u2 ON dbo.u1.ID = dbo.u2.ID

Sqlserver全连接用法

交叉连接(Cross Join)

如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。

把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。在开发过程中我们肯定是要过滤数据,所以这种很少用。

--Cross Join
SELECT * FROM dbo.u1 CROSS JOIN dbo.u2

SqlServer交叉连接不带条件结果

--Cross Join
SELECT * FROM dbo.u1 CROSS JOIN dbo.u2 WHERE u1.ID=u2.ID

blob.png

分享到:更多 ()

抢沙发

评论前必须登录!