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条)