导航

I. 概念

1. CROSS JOIN(交叉连接)
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。
例如:
A:SELECT a.*,b.* FROM table1 a,table2 b WHERE a.id=b.id
B:SELECT * FROM table1 a CROSS JOIN table2 b WHERE a.id=b.id
一般不建议使用方法A和B,因为如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。因此,如果两个需要求交集的表太大,将会非常非常慢。

2. INNER JOIN(内连接)

两边表同时符合条件的组合。
例如:
SELECT * FROM table1 a INNER JOIN table2  b ON a.id=b.id

如果仅仅使用 SELECT * FROM table1 INNER JOIN table2  内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。

3. LEFT [OUTER] JOIN(左外连接 )

显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL
例如:
SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column

4. RIGHT [OUTER] JOIN(右外连接)

显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL
例如:
SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column

5. FULL [OUTER] JOIN(全外连接)

显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集。
例如:
SELECT * FROM table1 FULL JOIN table2 ON table1.id=table2.id

II. 辨析

> Join = Inner Join
> Left Join = Left Outer Join
> Right Join = Right Outer Join
> Full Join = Full Outer Join 
> A left join B 的连接的记录数与A表的记录数同
> A right join B 的连接的记录数与B表的记录数同
> A left join B 等价于 B right join A
> A inner join B 查询出来是A、B都有的数据
> A full outer join B 查询出来是A、B所有总共的数据

III. 示例

示例表:
A表(a1,b1,c1)      B表(a2,b2)
a1   b1   c1       a2    b2
01   数学 95       01    张三
02   语文 90       02    李四
03   英语 80       04    王五

1. Inner Join
select A.*,B.* from A
inner join B on(A.a1=B.a2)
结果是:
a1   b1   c1       a2    b2
01   数学 95       01    张三
02   语文 90       02    李四

2. Left Join
select A.*,B.* from A
left outer join B on(A.a1=B.a2)
结果是:
a1   b1   c1       a2    b2
01   数学 95       01    张三
02   语文 90       02    李四
03   英语 80       NULL  NULL

3. Right Join
select A.*,B.* from A
right outer join B on(A.a1=B.a2)
结果是:
a1   b1   c1       a2    b2
01   数学 95       01    张三
02   语文 90       02    李四
NULL NULL NULL     04    王五

4. Full Join
select A.*,B.* from A
full outer join B on(A.a1=B.a2)
结果是:
a1   b1   c1       a2    b2
01   数学 95       01    张三
02   语文 90       02    李四
03   英语 80       NULL  NULL
NULL NULL NULL     04    王五