首页 文章

INNER JOIN,LEFT JOIN,RIGHT JOIN和FULL JOIN之间有什么区别? [重复]

提问于
浏览
1312

这个问题在这里已有答案:

INNER JOINLEFT JOINRIGHT JOINFULL JOINMySQL 之间有什么区别?

3 回答

  • 561

    INNER JOIN 根据外键获取两个表之间通用的所有记录

    LEFT JOIN 获取LEFT链接表中的所有记录,但如果您从RIGHT表中选择了一些列,如果没有相关记录,则这些列将包含NULL

    RIGHT JOIN 与上面类似,但获取RIGHT表中的所有记录

    FULL JOIN 从两个表中获取所有记录,并将NULL放在相对表中不存在相关记录的列中

  • 2681

    SQL JOIN子句用于组合来自两个或多个表的行,基于它们之间的公共字段 .

    SQL中有不同类型的连接:

    INNER JOIN :当两个表中都匹配时返回行 .

    LEFT JOIN :返回左表中的所有行,即使右表中没有匹配项也是如此 .

    RIGHT JOIN :返回右表中的所有行,即使左表中没有匹配项也是如此 .

    FULL JOIN :它结合了左外连接和右外连接的结果 .

    连接表将包含两个表中的所有记录,并填写任何一侧缺少匹配项的NULL .

    SELF JOIN :用于将表连接到自身,就像表是两个表一样,在SQL语句中临时重命名至少一个表 .

    CARTESIAN JOIN :返回两个或多个连接表中记录集的笛卡尔积 .

    我们可以在详细信息中采用前四个连接:

    我们有两个具有以下值的表 .

    TableA

    id  firstName                  lastName
    .......................................
    1   arun                        prasanth                 
    2   ann                         antony                   
    3   sruthy                      abc                      
    6   new                         abc
    

    TableB

    id2 age Place
    ................
    1   24  kerala
    2   24  usa
    3   25  ekm
    5   24  chennai
    

    .................................................. ..................

    INNER JOIN

    Note :它给出了两个表的交集,即它们在TableA和TableB中共有的行

    句法

    SELECT table1.column1, table2.column2...
      FROM table1
     INNER JOIN table2
        ON table1.common_field = table2.common_field;
    

    将其应用于我们的样本表中:

    SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
      FROM TableA
     INNER JOIN TableB
        ON TableA.id = TableB.id2;
    

    结果将是

    firstName       lastName       age  Place
    ..............................................
    arun            prasanth        24  kerala
    ann             antony          24  usa
    sruthy          abc             25  ekm
    

    LEFT JOIN

    Note :将给出TableA中的所有选定行,以及TableB中任何常用的选定行 .

    句法

    SELECT table1.column1, table2.column2...
      FROM table1
      LEFT JOIN table2
        ON table1.common_field = table2.common_field;
    

    将其应用于我们的样本表中:

    SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
      FROM TableA
      LEFT JOIN TableB
        ON TableA.id = TableB.id2;
    

    结果

    firstName                   lastName                    age   Place
    ...............................................................................
    arun                        prasanth                    24    kerala
    ann                         antony                      24    usa
    sruthy                      abc                         25    ekm
    new                         abc                         NULL  NULL
    

    RIGHT JOIN

    Note :将给出TableB中的所有选定行,以及TableA中任何常用的选定行 .

    句法

    SELECT table1.column1, table2.column2...
      FROM table1
     RIGHT JOIN table2
        ON table1.common_field = table2.common_field;
    

    将其应用于我们的样本表中:

    SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
      FROM TableA
     RIGHT JOIN TableB
        ON TableA.id = TableB.id2;
    

    结果

    firstName                   lastName                    age     Place
    ...............................................................................
    arun                        prasanth                    24     kerala
    ann                         antony                      24     usa
    sruthy                      abc                         25     ekm
    NULL                        NULL                        24     chennai
    

    FULL JOIN

    Note :它将返回两个表中的所有选定值 .

    句法

    SELECT table1.column1, table2.column2...
      FROM table1
      FULL JOIN table2
        ON table1.common_field = table2.common_field;
    

    将其应用于我们的样本表中:

    SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
      FROM TableA
      FULL JOIN TableB
        ON TableA.id = TableB.id2;
    

    结果

    firstName                   lastName                    age    Place
    ...............................................................................
    arun                        prasanth                    24    kerala
    ann                         antony                      24    usa
    sruthy                      abc                         25    ekm
    new                         abc                         NULL  NULL
    NULL                        NULL                        24    chennai
    

    Interesting Fact

    对于INNER加入,订单无关紧要

    对于(LEFT,RIGHT或FULL)OUTER连接,顺序很重要

    最好去看看 Link 它会给你有关加入顺序的有趣细节

  • 534

    阅读 The Code Project 上的这篇原创文章将对你有所帮助:Visual Representation of SQL Joins .

    alt text

    另请查看这篇文章:SQL SERVER – Better Performance – LEFT JOIN or NOT IN? .

    找到原始的:Difference between JOIN and OUTER JOIN in MySQL .

相关问题