本文将简单介绍多表查询的几种类型,包括关键字natural join、outer join等
一、自然连接
当我们在from从句中,用逗号连接不同表,且没有添加where子句时
这样的多表连接被称为是笛卡尔积
在大部分情况下,多表之间的笛卡尔积是没有意义的
因此,我们可以通过添加where子句来实现自然连接
下图是instructor表和teaches表的结构
例如,我们想找出有教课的教师名字及其对应的课程ID
就可以在where子句中利用.操作符连接一个(或多个)公共属性
从而实现我们需要的自然连接
select name, course_id
from instructor, teaches
where instructor.ID=teaches.ID;
而在from子句中使用关键字natural join来连接两个表
同样能实现自然连接的效果
select name,course_id
from instructor natural join teaches;
在更复杂的多表查询中,使用关键字natural join可能会出现不可预知的错误
因此,我们更推荐在where子句中用.操作符连接公共属性,从而实现自然连接的效果
二、外连接
外连接的类型有两种,分别是左外连接、右外连接
1、左外连接
用关键字 natural left outer join 来表示左外连接
对于 table1 natural left outer join table2 而言
返回的新表将会以table1的主码作为主码,并保留table1的所有数据
例如:
对 课程信息表和先修课程信息表
即 course(course_id(主码),title,dept_name,credits) 和
prereq(course_id,prereq_id(两个属性都是主码)) 进行左外连接
效果如下:
2、右外连接
用关键字 natural right outer join 来表示右外连接
对于 table1 natural right outer join table2 而言
返回的新表将会以table2的主码作为主码 ,并保留table2的所有数据
例如:
对 课程信息表和先修课程表 进行右外连接
效果如下: