SQL Server [join] 整理

【表A】


Aid    Aname   Acode


1       aa      001


2       bb      002


3       cc      003


4       dd      004


5       ee      005 【表B】


Bid    Bname    Bcode


1       aaa      101


3       bbb      102


5       ccc      103


7       ddd      104


9       eee      105   ----------------------------------------------------------------------------


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

SELECT *

FROM A

LEFT JOIN B

ON A.Aid=B.Bid

结果:


Aid    Aname   Acode   Bid   Bname   Bcode


1       aa      001     1     aaa     101


2       bb      002    NULL   NULL    NULL


3       cc      003     3     bbb     102


4       dd      004    NULL   NULL    NULL


5       ee      005     5     ccc     103     ----------------------------------------------------------------------------
right join:右联接

返回包括右表中的所有记录和左表中联结字段相等的记录。   例:

SELECT *

FROM A

Right JOIN B

ON A.Aid=B.Bid

结果:


Aid    Aname   Acode   Bid   Bname   Bcode


1       aa      001     1     aaa     101 


3       cc      003     3     bbb     102


5       ee      005     5     ccc     103


NULL    NULL    NULL    7     ddd     104


NULL    NULL    NULL    9     eee     105     ----------------------------------------------------------------------------
inner join:内联接

只返回两个表中联结字段相等的行。

例:

SELECT *

FROM A

INNER JOIN B       //INNER可以不写

ON A.Aid=B.Bid

结果:


Aid    Aname   Acode   Bid   Bname   Bcode


1       aa      001     1     aaa     101 


3       cc      003     3     bbb     102


5       ee      005     5     ccc     103     ----------------------------------------------------------------------------
full join:全联接

返回两个表中所有字段。

例:

SELECT *

FROM A

FULL JOIN B  

ON A.Aid=B.Bid

结果:


Aid    Aname   Acode   Bid   Bname   Bcode


1       aa      001     1     aaa     101


2       bb      002    NULL   NULL    NULL


3       cc      003     3     bbb     102


4       dd      004    NULL   NULL    NULL


5       ee      005     5     ccc     103


NULL    NULL    NULL    7     ddd     104


NULL    NULL    NULL    9     eee     105

    ----------------------------------------------------------------------------
cross join:交叉联接

返回两个表的笛卡儿积。

例1:

SELECT *

FROM A

Cross JOIN B  

结果:


Aid    Aname   Acode   Bid   Bname   Bcode


1                       1


2                       1


3                       1


4        (5*5条)       1


5                       1


1                       3


2                       3

……

……

……

例2:

SELECT *

FROM A

Cross JOIN B 

WHERE

A.Aid = B.Bid

结果:


Aid    Aname   Acode   Bid   Bname   Bcode


1       aa      001     1     aaa     101 


3       cc      003     3     bbb     102


5       ee      005     5     ccc     103

 

与inner join 结果一样,实际上是先返回所有结果(25条),再从中查询符合WHERE的结果。  

相关文章