[MSSQL] JOIN의 종류설명 및 사용법 & 예제

    조인이란?

    두개이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법입니다. 자신이 검색하고 싶은 컬럼이 다른 테이블에 있을경우 주로 사용하며 여러개의 테이블을 마치 하나의 테이블인 것처럼 활용하는 방법입니다. 보통 Primary key혹은 Foreign key로 두 테이블을 연결합니다. 테이블을 연결하려면 적어도 하나의 칼럼은 서로 공유되고 있어야합니다.고등학교 수학시간때 배웠던 벤다이어그램을 활용하면 쉽게 이해할 수 있습니다.


    INNER JOIN

    JOIN

    쉽게말해 교집합이라고 생각하시면 됩니다. 기준테이블과 Join한 테이블의 중복된 값을 보여줍니다.

    결과값은 A의 테이블과 B테이블이 모두 가지고있는 데이터만 검색됩니다.

    --문법--
    SELECT
    테이블별칭.조회할칼럼,
    테이블별칭.조회할칼럼
    FROM 기준테이블 별칭
    INNER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키....
    
    --예제--
    SELECT
    A.NAME, --A테이블의 NAME조회
    B.AGE --B테이블의 AGE조회
    FROM EX_TABLE A
    INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT
    


    LEFT OUTER JOIN

    JOIN

    기준테이블의 값 + 테이블과 기준테이블의 중복된 값을 보여줍니다.

    왼쪽 테이블을 기준으로 JOIN을 하겠다고 생각하시면 됩니다.

    그럼 결과값은 A테이블의 모든 데이터와 A테이블과 B테이블의 중복되는 값이 검색되겠네요

    --문법--
    SELECT
    테이블별칭.조회할칼럼,
    테이블별칭.조회할칼럼
    FROM 기준테이블 별칭
    LEFT OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....
    
    --예제--
    SELECT
    A.NAME, --A테이블의 NAME조회
    B.AGE --B테이블의 AGE조회
    FROM EX_TABLE A
    LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT
    


    RIGHT OUTER JOIN

    JOIN

    LEFT OUTER JOIN의 반대입니다.

    오른쪽 테이블을 기준으로 JOIN을 하겠다고 생각하시면 됩니다.

    그럼 결과값은 B테이블의 모든 데이터와 A테이블과 B테이블의 중복되는 값이 검색되겠군요

    --문법--
    SELECT
    테이블별칭.조회할칼럼,
    테이블별칭.조회할칼럼
    FROM 기준테이블 별칭
    RIGHT OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....
    
    --예제--
    SELECT
    A.NAME, --A테이블의 NAME조회
    B.AGE --B테이블의 AGE조회
    FROM EX_TABLE A
    RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT
    


    FULL OUTER JOIN

    JOIN

    쉽게말해 합집합을 생각하시면 됩니다.

    A테이블이 가지고 있는 데이터 , B테이블이 가지고있는 데이터 모두 검색됩니다.

    사실상 기준테이블의 의미가 없습니다.

    --문법--
    SELECT
    테이블별칭.조회할칼럼,
    테이블별칭.조회할칼럼
    FROM 기준테이블 별칭
    FULL OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....
    
    --예제--
    SELECT
    A.NAME, --A테이블의 NAME조회
    B.AGE --B테이블의 AGE조회
    FROM EX_TABLE A
    FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT
    


    CROSS JOIN

    JOIN


    크로스 조인은 모든 경우의 수를 전부 표현해주는 방식입니다.

    기준테이블이 A일경우 A의 데이터 한 ROW를 B테이블 전체와 JOIN하는 방식입니다.

    그러니 결과값도 N * M 이 되겠죠?

    위사진에서는 A테이블에 데이터가 3개, B테이블에는 데이터가 4개가 있으므로 총 12개가 검색됩니다.

    --문법(첫번째방식)--
    SELECT
    테이블별칭.조회할칼럼,
    테이블별칭.조회할칼럼
    FROM 기준테이블 별칭
    CROSS JOIN 조인테이블 별칭
    
    --예제(첫번째방식)--
    SELECT
    A.NAME, --A테이블의 NAME조회
    B.AGE --B테이블의 AGE조회
    FROM EX_TABLE A
    CROSS JOIN JOIN_TABLE B
    
    =====================================================================================
    
    --문법(두번째방식)--
    SELECT
    테이블별칭.조회할칼럼,
    테이블별칭.조회할칼럼
    FROM 기준테이블 별칭,조인테이블 별칭
    
    --예제(두번째방식)--
    SELECT
    A.NAME, --A테이블의 NAME조회
    B.AGE --B테이블의 AGE조회
    FROM EX_TABLE A,JOIN_TABLE B
    



    SELF JOIN

    JOIN


    셀프 조인은 자기자신과 자기자신을 조인한다는 의미입니다.

    하나의 테이블을 여러번 복사해서 조인한다고 생각하시면 될듯합니다.

    자신이 가지고 있는 칼럼을 다양하게 변형시켜 활용할 경우에 자주사용합니다.

    --문법--
    SELECT
    테이블별칭.조회할칼럼,
    테이블별칭.조회할칼럼
    FROM 테이블 별칭,테이블 별칭2
    
    --예제--
    SELECT
    A.NAME, --A테이블의 NAME조회
    B.AGE --B테이블의 AGE조회
    FROM EX_TABLE A,EX_TABLE B
    



    [MS_SQL] Union,UnionAll 사용법 & 예제

    [MS_SQL] 서브쿼리(SubQuery) 사용법 & 예제

    [MS_SQL] 프로시저 생성,조회,수정,삭제

    [MS_SQL] 피벗테이블을 활용하여 세로로 된 데이터 가로로 출력하기

    [MS_SQL] 반복문(WHILE)사용법 & 예제


    댓글(6)

    • 배우고자하는나무
      2019.04.23 17:50

      right outer join부분에 예제가 left outer join 쿼리문과 동일하네요.

    • ㅊㄱㄷ
      2019.05.29 19:46

      좋은글 감사합니다.

    • 2021.01.10 06:10 신고

      좋은글 감사합니다.

    • MSSQL 초보
      2021.06.17 15:17

      여기서도 질문 입니다. 별칭은 따로 안해도 되는걸까요..?
      (허접한 질문 죄송합니다..)

      • 2021.06.18 08:47 신고

        별칭을 안해주면 테이블간의 분류가 어려워서 별칭을 해주셔야합니다. JOIN을 할때 컴퓨터에게 두 테이블 사이에 연결링크 ON을 사용하여 테이블 두개를 특정 KEY값으로 연결 해야하는데 별칭이 없다면 컴퓨터가 어떤 테이블의 컬럼인지 분별을 못해요

    Designed by JB FACTORY