在电信实习的时候,天天有人来面试,问的问题我都听的蛮清楚的,比如内连接和外连接的区别,好像很简单,但还是说的不好,这里总结一下。

1
2
3
4
5
    A表                         B表
id name id name
1 a 1 b
2 b 3 c
4 c

内连接

内连接就是左表和右表相同的数据:

image

1
select * from A inner join B on A.id=B.id

结果:

1
2
id      name            id      name 
1 a 1 b

左外连接

左外连接就是以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据

image

1
select * from A left join B on A.id=B.id
1
2
3
4
id      name        id     name 
1 a 1 b
2 b null null
4 c null null

右外连接

右外连接就是与左外连接反之,以右表为准,去匹配左表,右表有多少条数据,结果就是多少条数据

image

1
select * from A right join B on A.id=B.id
1
2
3
id      name            id     name 
1 a 1 b
null null 3 c

交叉连接

交叉连接不带 WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到
结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查
询条件的数据行数。

1
select * from A join B
1
2
3
4
5
6
7
id  name  id  name
1 a 1 b
1 a 3 c
2 b 1 b
2 b 3 c
4 c 1 b
4 c 3 c

内连接和外连接的区别

内连接只列出两张表共同匹配的数据行,而外连接的结果集中不仅包含符合连接条件的数据行,还包括左表(左外连接或左连接)或右表(右外连接或右连接)中的所有数据行。