select name, course_id
from students, takes
where student.ID = take.ID;
Same with natural join
select name, course_id
from student natural join takes;
속성의 이름이 같은 걸 먼저 찾고,
걔네들끼리 같은 pair를 찾는다.
student relation
takes relation
student natural join takes
두 table에서 같은 속성은 ID이다.
select name, title
from student natural join takes, course
where takes.course_id = course.course_id;
course relation
위 코드를 잘못 쓰면 이렇게 된다
select name, title
from student natural join takes natural join course
select name, title
from (student natural join takes) join course using (course_id)
select *
from student join takes on student_ID = takes_ID
equivalent to
select *
from student, takes
where student_ID, takes_ID
course relation
prereq relation
course relation에는 CS-347이 없고,
prereq relation에는 CS-315가 없는 걸 확인할 수 있다.
이 부분은 표가 너무 많아서 ppt 보고 공부하자..
어쨌든, left outer join과 right outer join은 각각 왼/오른쪽에 있는 걸 기준으로 join한다. 즉, course_id column에는 기준으로 잡은 relation의 정보를 그대로 적어주고, join해서 생긴 attribute의 값이 존재하지 않으면 null을 적어준다.
full outer join은 그 둘을 모두 기준으로 잡아서, course_id에 양쪽에 존재하는 모든 값들을 다 써준다.
: defines which tuples in the two relations match
natural
on <predicate>
using <A1, A2, ..., An>
: defines how tuples in each relation that do not match any tuple in the other relation (based on the join condition) are treated
inner join (= natural join)
left outer join
right outer join
full outer join