SQL各种Join连接总结

连接运算是8种关系运算中的一种。

五种JOIN方式:

1.INNER JOIN or JOIN
2.OUTER JOIN
    2.1LEFT OUTER JOIN or LEFT JOIN
    2.2RIGHT OUTER JOIN or RIGHT JOIN
    2.3FULL OUTER JOIN or FULL JOIN
3.NATURAL JOIN
4.CROSS JOIN
5.SELF JOIN

PS:JOIN中的简写为语法糖,实际中写出来方便读一点而已

两种连接条件:

1.Equi JOIN
    1.1NATURAL
    1.2USING(a,b)
    1.3=
    ...
2.Theta JOIN
    2.1>=
    2.2<=
    2.3>
    ...

PS:USING(...)指定需要哪些列相等。ON则可以指定任意的连接条件(=,>=,<=,!=,>,<...)

JOIN or INNER JOIN

返回两个表中同时满足条件的元组对,不满足的将被丢弃。

OUTER JOIN

LEFT OUTER JOIN

返回左表所有行以及右表满足条件的行,左表有值右表无值填充为null

RIGHT OUTER JOIN

返回右表所有行以及左表满足条件的行,右表有值左表无值填充为null

FULL OUTER JOIN

返回所有表的所有行,在满足条件的行之外,左表满足右表不满足或者相反,均填充null

NATURAL JOIN

1、来自两个关系的元组对在共同属性上的值相同。(不限于一个共同属性,也可以是多个共同属性)
2、去掉重复的属性(列)。
3、列出属性的顺序:先是共同属性,然后是第一个关系的属性,最后是第二个关系的属性。

为了防止两个表有多个共同属性时natural join 会忽略部分需要的元组对,应使用join…using(…),以指定需要哪些列相等
join…using(…)连接只能局限在指定的属性上

CROSS JOIN

返回笛卡儿积

SELF JOIN

相当于A JOIN A

最后放一张图:
SQL各种Join连接总结_第1张图片

参考:

http://stackoverflow.com/questions/565620/difference-between-join-and-inner-join
http://stackoverflow.com/questions/3308122/how-do-i-decide-when-to-use-right-joins-left-joins-or-inner-joins-or-how-to-dete/3308153#3308153
http://stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins/17946222#17946222

你可能感兴趣的:(数据库,Mysql)