데이터베이스 - outer join / self join
- outer-join
앞서서 다루었던 equi 조인과 non-equi조인의 경우에는 조인 조건이 반드시 만족하는 경우에만 해당 테이블의 행들이 검색된다. 즉 조건이 충족되지 않는 경우에는 출력될 수 없다.
일단 emp와 dept에서 equi 조인을 행해보겠다. 이 때 equi 조인의 경우 없는 데이터에 대해서는 출력할 수 없다. 하지만 테이블에 없는 데이터까지 확인하면서 우리가 원하는 데이터를 추출하고 싶을 수 있다. 이 때 사용하는 것이 outer join이다.
문법은 다음과 같다.
이 때 + 기호를 사용하는데, 한 쪽만 사용할 수 있다. 그리고 데이터가 없는 쪽에 붙인다.
기존에 사용했던 테이블을 다시 한번 검색하자.
위의 예시에서는 emp 테이블에서 operations 부서에 대한 정보를 가지고 있지 않았다. 따라서 join 테이블에서 operations 부서는 볼 수 없었다. 하지만 outer join의 경우에는 없는 데이터에 대한 정보까지 출력하고 있다. 그리고 우리가 emp에 +를 붙였는데, 이처럼 출력하고자 하는 데이터가 없는 테이블에 + 기호를 붙여 null값까지도 출력할 수 있도록 한다.
우리가 보고싶었던 operations 부서명이 함께 출력되고 있다.
간단하게 outer 조인이 어디서 사용될 수 있을까 생각해보도록 하자.
상품과 주문 테이블이 존재한다고 가정하자. equi 조인과 non-equi 조인을 사용하면 어떤 고객이 어떤 상품을 주문했는지, 주문된 상품이 얼마나 있는지 혹은 주문되지 않은 상품이 얼마나 있는지 등을 알 수 있을 것이다.
주문되지 않은 상품 또는 주문하지 않은 고객 데이터를 함께 출력하고 싶다면 어떻게 해야할까? 이 때 사용하는 것이 바로 outer 조인이다.
- self join
마지막으로 살펴볼 self 조인은 간단하다. 한 테이블에서 스스로를 join하는 것을 말한다. 이 때 as를 사용하여 동일한 정보가 원하는 방향으로 표시될 수 있도록 하는 것이 중요하다.
이제 self 조인을 활용하여 사원과 해당 사원의 매니저를 나타낼 수 있다. 이 때 emp 테이블에서 ename을 출력하는데 하나는 “사원”, 나머지 하나는 ‘매니저”로 표현하도록 하자.
뿐만 아니라 self 조인은 outer 조인과도 함께 사용할 수 있다.
위의 예시를 보면 king이라는 사람은 사원 칼럼에서는 등장하지 않는다. 즉 상위 매니저가 존재하지 않는 것으로서 사장이라고 할 수 있겠다. 그러면 사장에 대해서도 이 테이블에서 같이 표현해보도록 하자.
현재 king은 매니저가 존재하지 않는다. 따라서 데이터가 부족한 곳은 후자의 emp 테이블이기 때문에 전자의 emp 테이블에 +기호를 사용한다.
반대로 사용할 경우, 이번엔 밑에 사원이 없는 말단 사원들에 대한 정보가 매니저에 표시될 수도 있다.
댓글
댓글 쓰기