join等的区别,各种连接查询之间的区别

  转载自:

要是我们有两张表。Table A 是侧面的表。Table B 是右侧的表。其各有四条记下,在那之中有两条记下name是毫无二致的,如下所示:让咱们看看分化JOIN的不等

  对于SQL的Join,在读书起来恐怕是相比乱的。大家清楚,SQL的Join语法有为数不菲inner的,有outer的,有left的,有的时候候,对于Select出来的结果集是什么样样子有一点不是很领会。Coding Horror上有生机勃勃篇作品,通过文氏图 Venn diagrams 解释了SQL的Join。笔者感到到消息道易懂,转过来。

A表

    假设我们有两张表。Table A 是侧面的表。Table B 是左侧的表。其各有四条记下,在那之中有两条记下name是一模二样的,如下所示:让大家看看分裂JOIN的不及。

id

图片 1图片 2

name

1.  INNER JOIN

1

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

Pirate

结果集为交集。

2

图片 3

Monkey

2. FULL [OUTER] JOIN 

3

(1)

Ninja

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

4

Full outer join 爆发A和B的并集。然而要求注意的是,对于还没相配的笔录,则会以null做为值。

Spaghetti

可以使用IFNULL剖断。

B表

在乎:那一个在收获到多少开展显示的时候,要小心NULL的决断。

id

图片 4

name

(2) 同有的时候候接受ISNULL 的决断,能够获得A和B两者未有交集的数码集。

1

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

Rutabaga

小结:那几个很好用,能够用来对生育恐怕测验上的数量开展补数据的操作。

2

图片 5

Pirate

 

3

3. LEFT [OUTER] JOIN

Darth Vade

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

4

注意:这么些或然很常用,可是注意B中特别到了才有值,未有相称到会造成NULL。

Ninja

图片 6

1.INNER JOIN

 

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

(2) LEFT JOIN 结合where IS NULL ,能够收获唯有在A中的数据集。

结果集

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

(TableA.)

图片 7

(TableB.)

 

id

4. RIGHT [OUTER] JOIN

name

景逸SUVIGHT OUTE智跑 JOIN 是前边的表为底工,与LEFT OUTE福睿斯 JOIN用法雷同。这里不介绍了。

id

5. UNION 与 UNION ALL

name

UNION 操作符用于归拢三个或三个 SELECT 语句的结果集。
介怀,a。 UNION 内部的 SELECT 语句必得拥有意气风发致数量的列。列也必须要具备相近的数据类型。

1

    b。每条 SELECT 语句中的列的各类必须大器晚成致。

Pirate

        c。UNION 只选拔记录,每生机勃勃行的数码都以不生龙活虎致的。而UNION ALL会列出全数记录,重复的也会列出来

2

图片 8   union                  图片 9

Pirate

 

3

  union  all

Ninja

(1) SELECT name FROM TableA UNION SELECT name FROM TableB

4

 

Ninja

(3) 注意:

图片 10

SELECT * FROM TableA UNION SELECT * FROM TableB

Inner join 发生的结果聚焦,是A和B的混杂。

出于 id 1 Pirate   与 id 2 Pirate 并不相仿,不联合

2.FULL [OUTER] JOIN 

图片 11

(1)

 

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

  还须要静心的是我们还大概有一个是“交差集” cross join, 这种Join未有主意用文式图表示,因为其就是把表A和表B的数额进行贰个N*M的组成,即笛Carl积。表明式如下:

结果集

       SELECT * FROM TableA CROSS JOIN TableB         这一个笛Carl乘积会发生 4 x 4 = 16 条记下,

(TableA.)

  日常的话,大家相当少用到这些语法。不过大家得小心,借使是利用嵌套的select语句,再增添系统对SQL都会发生笛Carl乘积然再做过滤。那是对此质量来讲是格外危急的,非常是表非常大的时候。 

(TableB.)

 

id

从那边大家来看 

name

SELECT    接纳的是从‘结果集1’中获取某几列。

id

FROM      是从 哪些 ‘数据源’中获取数据,而那些数据源是可以经过各类JOIN进行接收的。

name

WHERE   再增加where 从 select出的‘结果集2’ 中限定有些数据

1

LIMIT   进而节制筛选,

Pirate

GROUP   能够重复选用组合集结。

2

OCR-VDER BY举办结果的排序等。

Pirate

 

2

追根究底,SQL是对集中的拿走。

Monkey

 

null

 

null

 

3

Ninja

4

Ninja

4

Spaghetti

null

null

null

null

1

Rutabaga

null

null

3

Darth Vade

图片 12

Full outer join 产生A和B的并集。可是须求小心的是,对于未有相配的笔录,则会以null做为值。

能够利用IFNULL决断。

(2)

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

结果集

(TableA.)

(TableB.)

id

name

id

name

2

Monkey

null

null

4

Spaghetti

null

null

null

null

1

Rutabaga

null

null

3

Darth Vade

图片 13

 发生A表和B表未有交集的多寡集。

3.LEFT [OUTER] JOIN

(1)

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

结果集

(TableA.)

(TableB.)

id

name

id

name

1

Pirate

2

Pirate

2

Monkey

null

null

3

Ninja

4

Ninja

4

Spaghetti

null

null

图片 14

Left outer join 发生表A的完全集,而B表中十三分的则有值,未有相称的则以null值代替。

(2)

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

结果集

(TableA.)

(TableB.)

id

name

id

name

2

Monkey

null

null

4

Spaghetti

null

null

图片 15

产生在A表中有而在B表中绝非的聚众。

4.RIGHT [OUTER] JOIN

RIGHT OUTER JOIN 是末端的表为功底,与LEFT OUTECRUISERJOIN用法相近。这里不介绍了。

5.UNION  UNION ALL

UNION 操作符用于归并多个或多个 SELECT 语句的结果集。
请小心,UNION 内部的 SELECT 语句务必有所同样数量的列。列也必须要具有相通的数据类型。同期,每条 SELECT 语句中的列的相继必须生龙活虎致。UNION 只选用记录,而UNION ALL会列出全部记录。

(1)SELECT name FROM TableA UNION SELECT name FROM TableB

新结果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Darth Vade

选料不相同值

(2)SELECT name FROM TableA UNION ALL SELECT name FROM TableB

新结果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Pirate
Darth Vade
Ninja

漫天列出来

(3)注意:

SELECT * FROM TableA UNION SELECT * FROM TableB

新结果集

id

name

1

Pirate

2

Monkey

3

Ninja

4

Spaghetti

1

Rutabaga

2

Pirate

3

Darth Vade

4

Ninja

由于 id 1 Pirate   与 id 2 Pirate 并不相通,不联合

还要求注册的是我们还会有叁个是“交差集” cross join, 这种Join未有章程用文式图表示,因为其正是把表A和表B的数码举办三个N*M的组成,即笛Carl积。表明式如下:SELECT * FROM TableA CROSS JOIN TableB

其生龙活虎笛Carl乘积会发生 4 x 4 = 16 条记下,日常的话,大家比比较少用到那个语法。不过我们得小心,借使不是运用嵌套的select语句,平常系统都会生出笛Carl乘积然再做过滤。那是对于质量来说是十三分危险的,越发是表不小的时候。

(原作地址:)

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:join等的区别,各种连接查询之间的区别

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。