INNER JOIN,LEFT JOIN,RIGHT JOIN和FULL JOIN之间有什么区别?

时间:2011-04-18 17:15:25

标签: mysql sql join inner-join outer-join

INNER JOINLEFT JOINRIGHT JOINFULL JOIN之间有何区别? 在 MySQL

3 个答案:

答案 0 :(得分:2915)

阅读代码项目上的原始文章将对您有所帮助:Visual Representation of SQL Joins

alt text

同时查看此帖子:SQL SERVER – Better Performance – LEFT JOIN or NOT IN?

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

答案 1 :(得分:621)

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

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

RIGHT JOIN 与上述类似,但会获取RIGHT表格中的所有记录。

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

答案 2 :(得分:598)

  

SQL JOIN子句用于组合来自两个或多个表的行,   基于他们之间的共同领域。

SQL中有不同类型的连接:

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

LEFT JOIN :返回左表中的所有行,即使右表中没有匹配项。

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

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

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

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

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

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

我们有两个包含以下值的表。

<强>表A

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

<强>表B

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

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

INNER JOIN

注意:它给出了两个表的交集,即它们在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

注意:将提供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

正确加入

注意:将提供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

完全加入

注意:它将返回两个表中的所有选定值。

语法

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

有趣的事实

对于INNER联接,订单无关紧要

对于(LEFT,RIGHT或FULL)OUTER连接,订单重要

最好检查一下 Link 它会为您提供有关加入订单的有趣详情