Join and Where

JOIN & WHERE

Explanation

Details

left join

left outer join

(左联接

返回包括左表中的所有记录和右表中联结字段相等的记录 

左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

right join

right outer join

(右联接

返回包括右表中的所有记录和左表中联结字段相等的记录

右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

inner join

(等值连接)

只返回两个表中联结字段相等的行

WHERE INNER JOIN产生的连接关系,本质区别不详,结果一样。

1)在效率上,Where可能具有和Inner join一样的效率。但基本可以肯定的(通过SQLServer帮助和其它资料,以及本测试)是Join的效率不比Where差。

2)使用Join可以帮助检查语句中的无效或者误写的关联条件。

(3)从可读性角度来看,Where直观。

full join

full outer join

(全连接)

完整外部联接返回左表和右表中的所有行

当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

Join & where总结:

where是两个表中的数据满足共同条件才会显示。
Jion on是相同条件匹配。

因此,除了inner join结果通常不一样。

Jion 显示的内容 >= where 条件显示的内容。



举例说明

Table : PERSONS

PERSON_ID

NAME

CITY 

1

Jhon 

London  

2

Danny

New York

3

Tom  

Beijing 

4

Candy

Dalian  

5

Venus

Chengdu 

6

Lobna

Shanghai



Table : ORDERS

ORDER_ID

BOOK_NUMBER

PERSON_ID

1

111111

1

2

222222

1

3

333333

2

4

444444

2

5

555555

3

6

666666

4

7

777777

7

8

888888

9

9

999999

9



1) select * from cid.orders left join cid.persons on cid.orders.person_id = cid.persons.person_id;

ORDER_ID

BOOK_NUMBER

PERSON_ID

PERSON_ID

NAME

CITY

1

111111

1

1

Jhon

London

2

222222

1

1

Jhon

London

3

333333

2

2

Danny

New York

4

444444

2

2

Danny

New York

5

555555

3

3

Tom

Beijing

6

666666

4

4

Candy

Dalian

7

777777

7

(null)

(null)

(null)

8

888888

9

(null)

(null)

(null)

9

999999

9

(null)

(null)

(null)



2) select * from cid.orders right join cid.persons on cid.orders.person_id = cid.persons.person_id;

ORDER_ID

BOOK_NUMBER

PERSON_ID

PERSON_ID

NAME

CITY

1

111111

1

1

Jhon

London

2

222222

1

1

Jhon

London

3

333333

2

2

Danny

New York

4

444444

2

2

Danny

New York

5

555555

3

3

Tom

Beijing

6

666666

4

4

Candy

Dalian

(null)

(null)

(null)

5

Venus

Chengdu

(null)

(null)

(null)

6

Lobna

Shanghai



3) select * from cid.orders inner join cid.persons on cid.orders.person_id = cid.persons.person_id;

ORDER_ID

BOOK_NUMBER

PERSON_ID

PERSON_ID

NAME

CITY

1

111111

1

1

Jhon

London

2

222222

1

1

Jhon

London

3

333333

2

2

Danny

New York

4

444444

2

2

Danny

New York

5

555555

3

3

Tom

Beijing

6

666666

4

4

Candy

Dalian



4) select * from cid.orders full outer join cid.persons on cid.orders.person_id = cid.persons.person_id;

ORDER_ID

BOOK_NUMBER

PERSON_ID

PERSON_ID

NAME

CITY

1

111111

1

1

Jhon

London

2

222222

1

1

Jhon

London

3

333333

2

2

Danny

New York

4

444444

2

2

Danny

New York

5

555555

3

3

Tom

Beijing

6

666666

4

4

Candy

Dalian

(null)

(null)

(null)

5

Venus

Chengdu

(null)

(null)

(null)

6

Lobna

Shanghai

7

777777

7

(null)

(null)

(null)

8

888888

9

(null)

(null)

(null)

9

999999

9

(null)

(null)

(null)



5) select * from cid.orders, cid.persons where cid.orders.person_id = cid.persons.person_id;

ORDER_ID

BOOK_NUMBER

PERSON_ID

PERSON_ID

NAME

CITY

1

111111

1

1

Jhon

London

2

222222

1

1

Jhon

London

3

333333

2

2

Danny

New York

4

444444

2

2

Danny

New York

5

555555

3

3

Tom

Beijing

6

666666

4

4

Candy

Dalian

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值