티스토리 뷰
SQL JOIN
SQL 에서는 두 개 이상의 테이블의 데이터를 동시에 보는 방법으로 조인 이라는 기능을 사용합니다. 조인이라는 단어가 연결하다, 합쳐지다 등 의 뜻을 가지고 있는데, 단어 의미처럼 테이블을 연결하는 기능입니다.
두 개의 테이블을 연결하는 방법은 위의 표처럼 총 7가지의 경우가 있을 수 있습니다. 단순한 교집합, 합집합 부터 차집합 등 여러 집합을 구현할 수 있습니다.
예제로 사용할 테이블 : EMP, DEPT
오라클을 설치하면 기본적으로 생성되는 EMP 테이블과 DEPT 테이블을 이용해서 예제를 진행해보겠습니다. Outer 조인들의 결과를 더 잘 살피기 위해 다음과 같은 쿼리를 실행해 EMP 테이블과 DEPT 테이블 간 연결되지 않는 데이터들을 추가해보겠습니다.
INSERT INTO DEPT VALUES(50, 'MARKETING', 'SEOUL');INSERT INTO EMP VALUES(7999, 'JASON', 'MARKETER', 7782,TO_DATE('88/09/12','YY/MM/DD'), 5000, 0 , 60);
DEPT 에는 부서번호 50번 , 마케팅부서, 서울 지역 행을 하나 삽입했습니다.
EMP 에는 위와 같은 정보의 JASON 이라는 사원을 부서번호 60번으로 삽입했습니다.
SELECT * FROM EMP; # EMP 테이블 입니다.
SELECT * FROM DEPT; # DEPT 테이블 입니다.
EMP 테이블 중 JASON 은 부서번호가 60번인데 DEPT 테이블에 60번 부서가 없다는 점 과 DEPT 테이블에는 40번, 50번 부서가 있지만 EMP 테이블에는 해당 부서의 직원들이 없다는 점을 인지하고 계셔야 여러 조인들의 결과를 더 쉽게 이해하실 수 있습니다.
INNER, FULL, OUTER EXCLUDING JOIN
Inner 조인, Full 조인, Outer Excluding 조인 이 3가지 조인 부터 살펴보도록 하겠습니다. 당연하겠지만 이 중 가장 많이 사용하는 조인은 이너 조인입니다. Full 조인은 양쪽의 모든 데이터를 조회하여 살펴보기 위해 종종 사용하며, Outer Excluding 조인 같은 경우도 양 테이블에서 서로 연결되지 않은 데이터들만 조회하고자 할 때 사용할 수 있습니다.
INNER JOIN
SELECT *
FROM EMP A JOIN DEPT B
ON A.DEPTNO = B.DEPTNO;
가장 일반적으로 사용하며 사용할 곳이 매우 많은 조인방법입니다. 두 테이블을 엮어줄 수 있는 키인 DEPTNO ( 부서번호 ) 를 기반으로 행들을 연결해 줍니다. 결과를 보면 알 수 있듯이 서로 DEPTNO 가 맞지 않다면 조회되지 않습니다.
FULL JOIN
SELECT *
FROM EMP A FULL JOIN DEPT B
ON A.DEPTNO = B.DEPTNO;
FULL JOIN 은 모든 결과를 보여주는 조인방법입니다. 결과 테이블을 보면 위의 INNER 조인과 다른 점을 볼 수 있습니다. 위에선 없던 JASON 직원과 40번 50번 부서가 있는 것을 확인할 수 있습니다.
OUTER EXCLUDING JOIN
SELECT *
FROM EMP A FULL JOIN DEPT B
ON A.DEPTNO = B.DEPTNO
WHERE A.DEPTNO IS NULL
OR B.DEPTNO IS NULL;
OUTER EXCLUDING JOIN 은 두 테이블간 서로 연결되지 않는 행들만 조회할 수 있는 조인방법입니다. 부서가 DEPT 테이블에 없는 JASON 직원과 직원이 하나도 없는 부서들만 출력된 결과입니다.
LEFT, RIGHT OUTER JOIN
Outer 조인은 두 테이블간 연결이 되는 자료들을 모두 출력한 것에 추가로 한 쪽 테이블에만 있는 데이터들을 출력하는 조인입니다.
LEFT OUTER JOIN
SELECT *
FROM EMP A LEFT JOIN DEPT B
ON A.DEPTNO = B.DEPTNO;
LEFT OUTER JOIN 에는 JASON 직원이 출력되는 것을 알 수 있습니다. OUTER EXCLUDING JOIN 에서 DEPT 부분을 제외한 것이라고 생각할 수 있겠습니다.
참고로 LEFT 는 FROM EMP LEFT JOIN DEPT 중 좌측 EMP 를 칭하는 것입니다. 만약 FROM DEPT LEFT JOIN EMP 라고 작성한다면 DEPT 가 좌측이 되는 것입니다.
RIGHT OUTER JOIN
SELECT *
FROM EMP A RIGHT JOIN DEPT B
ON A.DEPTNO = B.DEPTNO;
LEFT OUTER JOIN 에서 출력되던 JASON 직원이 없어지고 DEPTNO 40, 50의 행이 출력되는 것을 알 수 있습니다.
LEFT, RIGHT EXCLUDING JOIN
EXCLUDING JOIN 은 두 테이블 중 한쪽에만 있는 데이터들을 출력하는 조인방법 입니다. 다시말해 OUTER EXCLUDING JOIN 에서 한 쪽 테이블 씩만 출력되는 것이죠.
LEFT EXCLUDING JOIN
SELECT *
FROM EMP A LEFT JOIN DEPT B
ON A.DEPTNO = B.DEPTNO
WHERE B.DEPTNO IS NULL;
LEFT EXCLUDING JOIN 의 쿼리를 보면 LEFT JOIN 쿼리에 추가로 DEPT 테이블 중 DEPTNO 가 없는 부분을 출력하라는 쿼리만 추가된 것을 알 수 있습니다. 다시 말해 EMP 테이블에만 있는 행을 출력하는 조인 방법입니다.
RIGHT EXCLUDING JOIN
SELECT *
FROM EMP A RIGHT JOIN DEPT B
ON A.DEPTNO = B.DEPTNO
WHERE A.DEPTNO IS NULL;
RIGHT EXCLUDING JOIN 의 쿼리도 LEFT JOIN 쿼리에 추가로 EMP 테이블 중 DEPTNO 가 없는 부분을 출력하라는 쿼리만 추가된 것을 알 수 있습니다. 다시 말해 DEPT 테이블에만 있는 행을 출력하는 조인 방법입니다.
JOIN 정리
이상으로 7가지 방법의 두 개의 테이블을 조인하는 방법에 대해 살펴보았습니다. 종류가 많은 것 같지만 실제로 사용하는 것은 몇가지 되지 않습니다. 또한 천천히 살펴보면 그렇게 어려운 쿼리들도 아닙니다. 자신이 원하는 부분을 먼저 생각한 뒤 쿼리를 참조하면 문제없이 갖고자 하는 데이터 셋을 얻을 수 있을것입니다.
추가 : 3개 이상 테이블들의 조인
데이터들을 조합하며 새로운 결과물들을 얻어나가는 과정에서는 단순히 2개의 테이블만 결합하는 것이 아닌 3개 4개 이상의 테이블들을 결합해야하는 경우들이 있습니다. 3개 이상 테이블들을 조인할 경우에도 2개의 테이블을 조인하는 것과 동일한 방법을 사용합니다.
A, B, C 테이블이 K 라는 열을 통해 조인이 된다고 가정하고 작성한 쿼리입니다.
SELECT *FROM ALEFT JOIN BON A.K = B.KLEFT JOIN CON A.K = C.K
2 개의 테이블을 먼저 조인한 뒤 추가로 3번째 테이블을 조인하면 됩니다. 또한 더 많은 테이블들을 조인하는 경우가 생기더라도 위와 같이 차근차근 하나씩 조인해나가면 됩니다.
'#Archive' 카테고리의 다른 글
2018 카카오 신입 공채 1차 블라인드 코딩테스트 문제 03 (2) | 2017.12.27 |
---|---|
반드시 알아야하는 알고리즘 top 8 - 3. 순차 탐색 (0) | 2017.12.27 |
페이지 교체 알고리즘 - LRU (0) | 2017.12.25 |
반드시 알아야하는 알고리즘 top 8 - 2. 이진 탐색 (0) | 2017.12.25 |
2018 카카오 신입 공채 1차 블라인드 코딩테스트 문제 02 (0) | 2017.12.23 |
- Total
- Today
- Yesterday
- 자연힐링
- 머신러닝
- 가족여행
- 여름캠핑
- SeoulTravel
- 영월캠핑
- bukhansannationalpark
- 가평캠핑
- 가평여행
- 커플여행
- 캠핑초보
- 파이썬
- 여름휴가
- 강원도캠핑
- 가족캠핑
- 글램핑
- 영월여행
- sql
- 알고리즘
- 카카오
- 강원도여행
- python
- 여름휴가추천
- 반려견캠핑
- 계곡캠핑
- 서울근교캠핑
- Oracle
- 캠핑장추천
- Koreancuisine
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |