表连接的几种方式
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:
内连接 (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
左外连接 (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
右外连接 (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
全连接(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
交叉连接(Cross Join)
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。
把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。在开发过程中我们肯定是要过滤数据,所以这种很少用。
--Cross Join SELECT * FROM dbo.u1 CROSS JOIN dbo.u2
--Cross Join SELECT * FROM dbo.u1 CROSS JOIN dbo.u2 WHERE u1.ID=u2.ID
评论前必须登录!
注册