zoukankan      html  css  js  c++  java
  • SQL-join(inner join)、left join、right join、full join

    0、JOIN 类型

    有时我们需要从两个或更多的表中获取结果,数据库中的表可通过键将彼此联系起来。每个表中都有一个主键,主键(Primary Key)是一个列,值都唯一。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。(也就是说,用join的时候,最好先保证多个表之间用于关联的表主键值唯一,但也不排除,确实有很多地方,用到的表主键值不唯一,这个时候,用join就会造成一对多、多对一的情况,需要特别注意)

    JOIN 类型,以及它们之间的差异。

    • JOIN:                        返回左右表有匹配上的行(INNER JOIN(内连接),JOIN默认使用内连接,可以省略INNER);
    • LEFT JOIN:              即使右表中没有匹配,也从左表返回所有的行,右表的列值为空;
    • RIGHT JOIN:            即使左表中没有匹配,也从右表返回所有的行,左表的列值为空;
    • FULL JOIN:              只要其中一个表中存在数据行,就返回行;

    1、JOIN(inner join内连接)

    数据源: 
    Persion表: 

     Orders表: 

     

    //使用连表查询
    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons,Orders
    WHERE Persons.Id_P = Orders.Id_P

    //使用join查询
    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    INNER JOIN Orders
    ON Persons.Id_P = Orders.Id_P
    ORDER BY Persons.LastName

    结果: 

    2、LEFT JOIN

    //使用left join查询,只要左表有数据行,就会生成一行。
    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    LEFT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

    结果: 

    3、RIGHT JOIN

    //使用right join查询,只要右表有数据行,就会生成一行。
    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    RIGHT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    

    结果: 

    4、FULL JOIN

    //使用full join查询,只要其中一个表中存在数据行,就会生成一行,另一个表的列值为空。
    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    FULL JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName

    结果: 



  • 相关阅读:
    【转载】产品经理如何行之有效的提高执行力
    【转载】20个2013年最值得关注的网页设计趋势
    【转载】HTTP协议详解
    工作一年的心得与体会
    【转载】什么是SVG
    【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
    【转载】前台页面优化全攻略-系列博文
    flink的checkpoint
    HBase概述
    牛客题霸--跳台阶题解
  • 原文地址:https://www.cnblogs.com/Formulate0303/p/12610452.html
Copyright © 2011-2022 走看看