表连接

有以下几种方式

[INNER|{LEFT|RIGHT|FULL}[OUTER]][<join_hint>]JOIN

1)内连接。内连接按照ON 所指定的连接条件合并2个表,返回满足条件的行:

假如有这样的2个table

Table 1:
A B
1 2
1 3
2 1
3 0

Table 2:
A C
1 20
2 45

4 50

如果是INNER JOIN(或者直接就JOIN)的话,那就是这样的结果:

对应的SQL语句:

SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.A = TABLE2.A

如果不想那个出现那个重复的A列,可以这样写

SELECT TABLE1.*, C FROM TABLE1 JOIN TABLE2 ON TABLE1.A = TABLE2.A

INNER JOIN

A B A C
1 2 1 20
1 2 1 20
2 1 2 45

2) 外连接

外连接分三种:

  • 左外连接 LEFT OUTER JOIN(或者 LEFT JOIN)
  • 右外连接RIGHT OUTER JOIN(或者RIGHT JOIN)
  • 完全外连接FULL OUTER JOIN(或者FULL JOIN)

左外连接:结果表中除了包括连接条件外,还包括左表中的所有行

SELECT * FROM TABLE1 LEFT OUTER JOIN TABLE2 ON TABLE1.A = TABLE2.A

LEFT OUTER JOIN
A B A C
1 2 1 20
1 3 1 20
2 1 2 45
3 0 null null

 

右外连接:结果表中除了包括连接条件外,还包括右表中的所有行

SELECT * FROM TABLE1 RIGHT OUTER JOIN TABLE2 ON TABLE1.A = TABLE2.A

RIGHT OUTER JOIN
A B A C
1 2 1 20
1 3 1 20
2 1 2 45
N N 4 50

N 代表null


 

完全连接:结果表中除了包括连接条件外,还包括右表中的所有行

SELECT * FROM TABLE1 FULL OUTER JOIN TABLE2 ON TABLE1.A = TABLE2.A

FULL OUTER JOIN

A B A C
1 2 1 20
1 3 1 20
2 1 2 45
3 0 N N
N N 4 50 

N 代表 null

3)交叉连接: 将2个表进行笛卡尔积运算。结果表的行数等于两个表行数之积

交叉连接时不能有条件的,且不能带WHERE子句。

SELECT * FROM TABLE1 CORSS JOIN TABLE2

A B A C
1 2 1 20
1 2 2 45
1 2 4 50
1 3 1 20
1 3 2 45
1 3 4 50
2 1 1 20
2 1 2 45
2 1 4 50
3 0 1 20
3 0 2 45
3 0 4 50

原文地址:https://www.cnblogs.com/herbert/p/1773054.html