sql之连接
自然连接(natural join)
- 不同于两个关系上的笛卡儿积,自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对( 以 列名 作为判断依据 )
- 以列名为依据会带来危险
比如: 查询教师名称及他们所授课程,除了course_id外,teachers的dept_name(系名称)和course的dept_name也相同,则查询结果中不会出现教师所授课程不是他所在系的课程
- 为了避免不必要的相等属性带来的危险,SQL提供了一种自然连接的构造形式,允许用户指定需要哪些列相等
join using('属性名')
use sql_store;
join与on、using
select *
from customers
join orders on customers.customer_id = orders.customer_id;
select *
from customers
join orders using(customer_id);
区别 :
- 使用on查询,结果中该属性会出现两次,列名分别为customers.customer_id和orders.customer_id
- 使用using则该属性只以customer_id为列名出现一次
##总结:on的使用效果看似与where相同,但是,引入on有两个优点- 在外连接中on与where不同
- 如果在on中指明连接条件,并在where子句出现其他的条件,这样的查询更容易让人读懂
为了解决自然连接中不符合连接条件的元组丢失问题,引入外连接——通过在结果中创建包含空值元组的方式,保留那些在连接中丢失的元组
外连接
为了与外连接区分,将不保留未匹配元组的连接运算称作 内连接