有以下几种方式
[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) 外连接
外连接分三种:
左外连接:结果表中除了包括连接条件外,还包括左表中的所有行
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