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

    조인이란?

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

     

    INNER JOIN

    JOIN1

    쉽게말해 교집합이라고 생각하시면 됩니다. 기준 테이블과 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

    JOIN2

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

    왼쪽 테이블을 기준으로 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

    JOIN3

    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

     

    JOIN4

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

    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

    JOIN5

     

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

    기준 테이블이 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

    JOIN6

     

     

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

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

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

    --문법--
    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