目录
紧接05-1节单表查询,本节将继续介绍连接查询相关内容。
2.连接查询
所谓连接,就是实现从多个表中查询数据,由于查询语言的表达非常灵活,没有特定的表达方式实现目标搜索,本文将介绍四种不同的连接查询方式。
2.1 where-from连接查询
表之间满足一定条件的元组进行连接,此时from子句中指明进行连接的表名,where子句中指明连接的列名和连接的条件。
话不多说,直接上例子,
例子1,找出instructor表和department表中dept_name相同的元组,输出它们的name、instructor、dept_name、building属性。
例子1等价于如下表达(采用as命名了列别名,简化表达)
2.2 jion-on连接查询
当将JOIN关键字放于FROM子句中时,应有关键字ON与之相对应,以表明连接的条件
SELECT {*|<表达式>,…,<表达式>}
FROM <表名> JOIN<表名> ON <条件表达式>
和where-from语句一般可以互相转换:
2.3 jion-using连接查询
select * from takes right outer join student using (ID);
等同于select *from takes natural right outer join student;
2.4多表连接
假设:
instructor(ID, name, dept_name, salary)
teaches(ID, course_id, sec_id, semester, year)
course(course_id, title, dept_name, credits)
考虑查询:列出教师的名字以及他们所讲授课程的名称
select name, title
from instructor natural join teaches natural join course;
或select name, title
from (instructor natural join teaches) join course using (course_id);
内连接和外连接
SQL把常规连接称作内连接,用inner join表示。
关键词inner是可选的,当join子句中没有使用outer前缀时,默认的连接类型是inner join。
select * from student join takes using (ID);
等价于:
select * from student inner join takes using (ID);