Inner join , Left join 和Right join 的区别

来源:互联网 发布:c 中cin在c语言中 编辑:程序博客网 时间:2024/05/01 21:57

     前两天参加了支付宝公的面试, 其中一个面试题目就是关于SQL 的三种表联接方法的区别;惭愧啊.关于这个问题,我回答的不是很理想. 回来之后又好好对此学习了一下.以下是我的学习记录:

1. Inner Join (内联接)        

 此方式返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行, 即显示两表联接条件满足的记录;   

 例:  以SQL 2000 中的pubs表为例;   

        USE pubs   

        SELECT * FROM authors  AS a  INNER JOIN  publishers AS p ON a.city = p.city

        ORDER BY a.au_lname DESC  

 结果:  两个表中的所有列,但只返回联接条件满足的记录;  

 2. Left Outer Join 或 Left Join (左外联接)   

     显示左边表的所有记录,并显示联接表的所有字段满足条件的记录;  

    例: 以SQL 2000 中的pubs表为例;

        USE pubs       

        SELECT * FROM authors AS a LEFT OUTER JOIN  publishers  AS p

        ON a.city = p.city   ORDER BY p.pub_name ASC

 

       运行结果:

             显示authors 表的所有记录, 并显示publishers 表的所有列的满足条件的记录;

             此联接方式的结果正好与Right Outer Join 相反;

             返回的记录数据为左表的记录数;

3. Right Outer Join 或 Right Join (右外联接)

     显示右边表的所有记录,并显示左边表的所有列满足条件的记录;

     例:以SQL 2000 中的pubs 表为例;

     USE pubs

     SELECT * FROM authors AS a  RIGHT OUTER JOIN  publishers AS p

     ON  a.city = p.city  ORDER BY p.pub_name ASC

4. Full Outer Join 或 Full Join (全外联接)

   显示联接两个表的所有列和记录;

  例: 以SQL 2000中的pubs表为例;

  USE pubs

  SELECT * FROM authors AS a FULL OUTER JOIN publishers p

  ON  a.city = p.city ORDER BY p.pub_name ASC

 

   此次可真正感觉到临阵磨枪, 只能磨亮,但并不能起到实际作用.  要想熟练只能长期的使用;