一、各种连接及其sql语言
1、自然连接:只考虑那些在两个关系模式中都出现的属性上取值相同的元组对 natural join、join...using
select A1,A2,...,An
from r1 natural join r2 natural join ... natural join rn
where P;
select name1, course_id
from instructor, teaches
where instructor.ID = teaches.ID;
等价于
select name1, course_id
from instructor natural join teaches;
### 但以下的一个例子却不等价 ###
前提:已知instructor和teaches自然连接包括属性(ID, name, dept_name, salary, course_id, sec_id)
而course关系包含的属性是(course_id, title, dept_name, credits)
select name,title
from instructor natural join teaches, course
where teaches.course_id = course.course_id;
-- 列出教师的名字以及他们所讲授课程的名称
不等价于
select name1,title
from instructor natural join teaches natural join course;
原因:instructor、teaches和course三者自然连接包括属性(course_id, dept_name)
而instructor和teaches自然连接后,再让teaches与course根据属性course_id相同选出元组的结果,会忽略掉所有(course_id, dept_name)这样的对,因此两种查询结果不同
因此,为了发扬自然连接的优点,同时避免不必要的相等的属性带来的危险,引入了下面的构造形式
select A1,A2
from r1 join r2 using (A1,A3); -- r1、r2为表名
join...using与自然连接