SQLServer inner join,left join,right join,outer join 备忘备忘

LEFT JOIN
LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。
即LEFT JOIN 的 ON 条件不会对数据行造成影响


RIGHT JOIN
RIGHT JOIN 关键字会从右表那里返回所有的行,即使在左表中没有匹配的行。 

INNER JOIN 
INNER JOIN 关键字会从右表那里返回所有的行,即使在左表中没有匹配的行。

INNER JOIN 的ON 条件会对数据行进行筛选

因此 INNER JOIN的 ON条件 放在ON后 或 WHERE后是一样的效果

从论坛里抄一句过来:

on是连接条件, where是过滤条件。

对内连接来说, 二者等价。

对外连接来说,
on影响侧输入的输出, 合连接条件则输出相应列值,不合则输出null, 对主输入无影响。
where影响结果集。

on是连接条件, where是过滤条件。

对内连接来说, 二者等价。

对外连接来说,
  on影响侧输入的输出, 合连接条件则输出相应列值,不合则输出null, 对主输入无影响。
  where影响结果集。


select * from ta a left join tb on a.id=b.id and b.n is null
此语句输出a表所有行,对于b表的列,当id=a.id且n为null时才会有输出。

select * from ta a left join tb on a.id=b.id where b.n is null
只有b.n为null的行,且a表中存在id=b.id时,才输出,符则a表的行也被过滤
on是连接条件, where是过滤条件。

对内连接来说, 二者等价。

对外连接来说,
  on影响侧输入的输出, 合连接条件则输出相应列值,不合则输出null, 对主输入无影响。
  where影响结果集。


select * from ta a left join tb on a.id=b.id and b.n is null
此语句输出a表所有行,对于b表的列,当id=a.id且n为null时才会有输出。

select * from ta a left join tb on a.id=b.id where b.n is null
只有b.n为null的行,且a表中存在id=b.id时,才输出,符则a表的行也被过滤
on是连接条件, where是过滤条件。

对内连接来说, 二者等价。

对外连接来说,
  on影响侧输入的输出, 合连接条件则输出相应列值,不合则输出null, 对主输入无影响。
  where影响结果集。


select * from ta a left join tb on a.id=b.id and b.n is null
此语句输出a表所有行,对于b表的列,当id=a.id且n为null时才会有输出。

select * from ta a left join tb on a.id=b.id where b.n is null
只有b.n为null的行,且a表中存在id=b.id时,才输出,符则a表的行也被过滤
on是连接条件, where是过滤条件。

对内连接来说, 二者等价。

对外连接来说,
  on影响侧输入的输出, 合连接条件则输出相应列值,不合则输出null, 对主输入无影响。
  where影响结果集。


select * from ta a left join tb on a.id=b.id and b.n is null
此语句输出a表所有行,对于b表的列,当id=a.id且n为null时才会有输出。

select * from ta a left join tb on a.id=b.id where b.n is null
只有b.n为null的行,且a表中存在id=b.id时,才输出,符则a表的行也被过滤
原文地址:https://www.cnblogs.com/xcxcxcxc/p/5541201.html