Oracle-Join

Join문 기초

하나의 테이블 만으로 모든 정보를 처리하기 어렵고 확인하기도 복잡해 집니다. 이 문제들을 해결하기 위해 다수의 테이블로 나눈 후 테이블간의 관계성을 부여합니다. 복수의 테이블을 결합하여 하나의 테이블 처럼 결과를 확인 할 수 있습니다.

JOIN 종류

  • OUTTER JOIN : 매칭되는 행이 없어도 결과를 가져오고 매칭되는 행이 없는 경우 NULL로 표시합니다.
    LEFT JOIN과 RIGHT JOIN이 있습니다.

  • INNER JOIN : 조인하는 두개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져옵니다.

아래의 이미지를 통해 JOIN에 대해 더욱 쉽게 이해 할 수 있습니다. 한 번 확인해 보세요.

Join

조인 SQL문장

데이터의 규모가 커지면서 하나의 테이블로 정보를 수용하기가 어려워지면 테이블을 분활하고 테이블 간의 관계성을 부여합니다. 그 후 여러개의 테이블을 합쳐서 확인하기 위해 JOIN을 사용합니다.

TIP. 테이블 날짜가 2015/02/02 형식으로 되어있지만 이 중에서 년과 월만을 출력하고 싶다면 SELECT 문에서 TO_CHAR(S.SALE_DATE, 'YYYYMM') AS YYYYMM 이렇게 작성하시면 됩니다.

1
2
3
4
5
6
7
SELECT TO_CHAR(S.SALE_DATE, 'YYYYMM') AS YYYYMM
, G.REGION
, SUM(S.SALES) AS SALES
FROM SALES S
, GEOGRAPHY G
WHERE S.DOSI = G.DOSI
GROUP BY TO_CHAR(S.SALE_DATE,'YYYYMM'), G.REGION;

서브쿼리 SQL문장

TIP. ORDER BY에서 맨 끝에 ASC는 오름차순으로 정렬하는 것을 뜻합니다. 만약 내림차순으로 정렬하고 싶다면 DESC를 사용하시면 됩니다. 끝에 아무 것도 적지 않으면 자동으로 오름차순 정렬 됩니다.

1
2
3
4
5
6
7
SELECT TO_CHAR(S. SALE_DATE, 'YYYYMM') AS YYYYMM
, ( SELECT REGION
FROM GEOGRAPHY G
WHERE G.DOSI = S.DOSI ) REGION
, S.SALES
FROM SALES S
ORDER BY TO_CHAR(S.SALE_DATE,'YYYYMM'), REGION ASC;

테이블 3개 조인

  • INNER JOIN 쿼리

    1
    2
    3
    4
    5
    SELECT A.ID, A.NAME, B.DPTNAME, C.SALARY
    FROM EMPLOYEE A INNER JOIN DEPARTMENT B
    ON A.DPID = B.DPID
    INNER JOIN SALARYINFO C
    ON A.ID = C.PID;
  • 비표준 쿼리

    1
    2
    3
    SELECT A.ID, A.NAME, B.DPTNAME, C.SALARY
    FROM EMPLOYEE A, DEPARTMENT B, SALARYINFO
    WHERE A.DPID = B.DPID AND A.ID = C.PID;

혹시나 궁금하신 점 있다면 댓글로 물어봐 주세요!

참고
Share