1. Natural Join
- 학생이 수강한 과목 (이름, 과목번호) 반환
- student, takes를 join 한 테이블에서 where를 만족시키는 레코드만 남긴다.
- 위와 동일한 결과를 내는 다른 구문이다 자연조인한 결과를 반환한다. 여기에 where절을 추가해 조건을 달 수 있다.
- 참고로 자연조인은 두 테이블의 join결과에서 동일한 이름의 속성들이 일치하는 경우들만 반환한다.
- natural join의 일반적인 사용법은 위와 같다.
- 자연조인시 주의할 점이 있다.
- 이렇게 하면 학생이 수강한 과목들이 반환된다.
- 이렇게하면 학생이 소속학과에서 개설된 강의중에서 수강한 과목들만 반환된다. 왜냐하면 자연조인시 student.dept_name,과 course.dept_name이 일치하는지도 확인하기 때문이다.
2. Using Join
- 그래서 sql에서는 위의 구문처럼 쓸 수 있다. student와 takes는 natural join하고 그 결과 테이블과 course를 join하는데 course_id만 일치하는 레코드만 남기도록하는 구문이다.
3. On Join
- student와 takes를 join하는데 on을 사용하면 임의의 조건을 만족하는 튜플만 남게된다.
- 부등호, equal등 다양한 조건이 가능하다.
- natural join이 아니라 on으로 조건을 주었기 때문에 course_id가 중복으로 두번 나왔다.
4. Inner Join
- 이제까지 join을 써온 방법이다 inner를 생략하고 사용한 것이다.
5. Outer Join
- loss of information을 피하기 위해 고안된 방법이다.
- 자연 join시에 동일한 이름의 column이 일치하는 경우만 반환이 되는데 이때 정보의 손실이 발생한다.
- outer join은 join짝이 없는 튜플도 반환한다. 이때 joint짝이 없으니 빈 값은 null을 채운다.
- 아래 예시를 통해 이해해보자. course 테이블과 prereq 테이블이 있다.
- 만약 두 테이블을 natrual join했다면 아래 결과가 나올 것이다.
- cs-315와 일치하는 튜플이 prereq에는 없기 때문이다.
- natural left outer join을 한 결과는 아래와 같다.
- left라는 뜻은 왼쪽 테이블에서 짝이없는 튜플들도 다 담겠다는 것이다.
- course의 모든 튜플들은 반드시 결과 set에 나온다. 반면에 prereq의 튜플중에 CS-347은 짝이 없어서 나오지 않았다.
- natural이라는 뜻은 두 테이블을 자연조인 하겠다는 것이다.
- natural 대신 on을 사용했다. 따라서 course_id가 두번 중복해서 나왔다.
- 그러면 이번에는 natural right outer join을 해보자.
- 이번에는 prereq의 짝이없는 CS-347의 튜플이 들어와 있다.
- full은 left, right 모든 짝이없는 튜플도 포함한다.
- 얼마든지 where title is not null처럼 null이 들어간 tuple을 제외할수 있다.
*join 정리
- 네 가지 join과 세가지 조건을 조합해서 다양한 join 연산을 만들 수 있다.
'ComputerScience > Database' 카테고리의 다른 글
DB - 21. Integrity Constraints (0) | 2021.12.01 |
---|---|
DB - 20. Intermediate SQL - View (0) | 2021.11.30 |
DB - 18. Normalization 2 (0) | 2021.11.30 |
DB - 17. Boyce Codd Normal Form (0) | 2021.11.24 |
DB - 16. Normalization (0) | 2021.11.23 |