当前位置:Gxlcms > 数据库问题 > [No000083]图解SQL的各种连接join让你对SQL的连接一目了然

[No000083]图解SQL的各种连接join让你对SQL的连接一目了然

时间:2021-07-01 10:21:17 帮助过:3人阅读

id 

name 

id 

name 

2

-- 

---- 

-- 

---- 

3

1

Pirate 

1

Rutabaga 

4

2

Monkey 

2

Pirate 

5

3

Ninja 

3

Darth Vader

6

4

Spaghetti 

4

Ninja 

下面让我们来看看不同的Join会产生什么样的结果。

Inner join产生的结果集中,是A和B的交集。

1

SELECT * FROM TableA INNER JOIN TableB

2

ON TableA.name = TableB.name

3

id 

name 

id 

name 

4

-- 

---- 

-- 

---- 

5

1

Pirate 

2

Pirate 

6

3

Ninja 

4

Ninja 

技术分享

Full outer join产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

01

SELECT * FROM TableA FULL OUTER JOIN TableB

02

ON TableA.name = TableB.name

03

id 

name 

id 

name 

04

-- 

---- 

-- 

---- 

05

1

Pirate 

2

Pirate

06

2

Monkey 

null

null

07

3

Ninja

4

Ninja

08

4

Spaghetti

null

null

09

null 

null

1

Rutabaga

10

null 

null

3

Darth Vader

技术分享

Left outer join产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

01

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

02

ON TableA.name = TableB.name

03

id 

name 

id 

name 

04

-- 

---- 

-- 

---- 

05

1

Pirate 

2

Pirate 

06

2

Monkey 

null 

null 

07

3

Ninja 

4

Ninja 

08 

4

Spaghetti 

null

null 

09 

null 

null 

1

Rutabaga 

10

null 

null 

3

Darth Vader

 

01

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

02

id 

name 

id 

name 

03

-- 

---- 

-- 

---- 

04

1

Pirate 

2

Pirate 

05

2

Monkey 

null 

null 

06

3

Ninja 

4

Ninja 

07

4

Spaghetti

null 

null 

技术分享

01

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null

02

id 

name 

id 

name 

03

-- 

---- 

-- 

---- 

04

2

Monkey 

null 

null 

05

4

Spaghetti 

null 

null 

产生在A表中有而在B表中没有的集合。

技术分享

01

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null

02

id 

name 

id 

name 

03

-- 

---- 

-- 

---- 

04

2

Monkey 

null 

null 

05

4

Spaghetti 

null 

null 

06

null 

null 

1

Rutabaga 

07

null 

null 

3

Darth Vader 

产生A表和B表都没有出现的数据集。

技术分享

还需要注册的是我们还有一个是"交差集"crossjoin,这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:

01

SELECT * FROM TableA 

02

CROSS JOIN TableB 

这个笛卡尔乘积会产生4x4=16条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。

[No000083]图解SQL的各种连接join让你对SQL的连接一目了然

标签:

人气教程排行