SQL programming 
테이블 조인 (JOIN)

SELECT문은 하나 이상의 테이블로부터 데이타를 가져올 수 있다. 복수의 테이블로부터 데이타를 가져오기 위해서는, FROM절 뒤에 복수의 테이블을 나열하면 된다. 이때, 테이블들이 서로 연관을 맺고 이들로부터 특정 조건의 레코드셋들을 선별하게 되는데, 이를 테이블 조인이라 한다. 테이블 조인에는 Cross Join, Inner Join, Outer Join 등이 있으며, Cross Join은 테이블A의 모든 레코드들에 대해 테이블B의 모든 레코드가 맴핑되는 것으로, 테이블A에 10개 레코드가 있고, 테이블 B에 5개 있다면, 총 10 x 5 = 50개의 레코드를 출력한다. Inner Join은 테이블A의 특정 컬럼값이 테이블B의 지정 컬럼값과 일치하는 레코드만을 선별하는 경우에 사용된다. Outer Join은 Inner Join과 마찬가지로 조인 조건을 만족하는 레코드들을 출력하지만, 추가로 일치하지 않는 레코드들도 함께 출력해 준다.





Inner Join

Inner Join은 복수 테이블들이 조인 조건을 모두 만족하는 레코드들만 선별하는 조인이다. Inner Join은 아래와 같이 INNER JOIN...ON 문장을 FROM절에 사용하거나 일반 WHERE절에서 조인 조건식을 사용할 수 있다. 아래의 예제는 Orders와 OrderDetails 두 테이블을 Order ID로 조인해서 그 값이 같은 경우만 선별하여 Orders 테이블의 일부 컬럼과 OrderDetails 테이블의 컬럼들을 출력하는 예이다.


예제





Cross Join

Cross Join은 복수 테이블의 모든 레코드를 M x N 식으로 모두 출력하는 것으로, 만약 테이블A가 10개의 레코드가 있고, 테이블B가 5개의 레코드가 있다면, 10 x 5 레코드 즉 총 50개의 조합을 출력한다. Cross Join은 특별한 조인 조건을 지정하지 않고, 복수 테이블명을 FROM절에 나열하면 된다.





Outer Join

도시별 매출을 구하는 쿼리를 생각해 보자. 만약 100개의 도시가 있고, 각 매출 데이타에는 어떤 도시에서 매출이 일어 났는지를 기록했다고 하자. 그런데, 모든 도시에서 매출이 일어났으면 상관 없겠지만, 만약 80개의 도시에서만 매출이 일어 났다고 하면, Inner Join을 사용하면 매출이 없는 도시들은 매출 테이블에 해당 도시가 없을 것이므로 출력되지 않을 것이다. 하지만, 경우에 따라 모든 도시를 출력하고 매출이 없는 도시는 매출란을 공란 혹은 NULL로 표시하는 것이 필요할 때가 있다. 이렇게 복수 테이블에 모든 조인 조건이 만족되지 않더라도 한 테이블의 모든 데이타는 출력되게 하려면 Outer Join을 사용한다. 매칭 데이타가 없는 부분은 NULL로 표시될 것이다. Outer Join은 모든 데이타를 출력하는 테이블의 위치에 따라 Left Outer Join, Right Outer Join, 그리도 양쪽 테이블의 모든 데이타가 기본적으로 출력되는 Full Outer Join이 있다.

예제





Self Join

Self Join이란 FROM절에 하나의 테이블을 Table Alias를 통하여 두번 참조한 후, 자신의 테이블을 마치 다른 테이블인 것 처럼 조인하는 것이다. 아래 예제는 Self Join을 통해 Emp 테이블에서 Boss가 Kim인 모든 종업원을 출력하는 예이다.





본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.