ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL - 조인(JOIN)
    Database/MySQL 2023. 2. 23. 15:30

    조인(JOIN)

    조인(JOIN)이란?

     - JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 주는 연산이다.

     - 표준 SQL에서는 레코드를 조합하는 방식에 따라 JOIN을 아래와 같이 구분한다.

     

        1. INNER JOIN

        2. LEFT JOIN

        3. RIGHT JOIN

     

    INNER JOIN
    FROM
        테이블명01
        INNER JOIN 테이블명02
        ON 조건

     - INNER JOIN은 ON 절과 함께 사용되며, ON 절의 조건을 만족하는 데이터만을 가져온다.

     - ON 절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.

     - 또한, 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용된다.

     

     

     - INNER JOIN의 결과를 벤 다이어그램으로 나타내면 위와 같다.

     

     

     - 예약 정보를 담고 있는 RESERVATION 테이블이 있다고 가정해 보겠다.

     

     

     - 고객 정보를 담고 있는 CUSTOMER 테이블이 있다고 가정해 보겠다.

     

    SELECT
        *
    FROM
        RESERVATION R
        INNER JOIN CUSTOMER C
        ON R.NAME = C.NAME;

     - 위 예제는 RESERVATION 테이블의 NAME 필드와 CUSTOMER 테이블의 NAME 필드가 서로 일치하는 레코드만을 기준으로 INNER JOIN 연산을 실행하는 예제이다.

     

     

     - 앞선 쿼리문의 실행결과는 위와 같다.

     

    LEFT JOIN
    FROM
        테이블명01
        LEFT JOIN 테이블명02
        ON 조건

     - LEFT JOIN은 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN 연산이다.

     - 이때, ON 절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값을 그대로 가져온다.

     - 하지만, 해당 레코드의 두 번째 테이블의 필드 값은 모두 NULL로 표시된다.

     

     

     - LEFT JOIN의 결과를 벤 다이어그램으로 나타내면 위와 같다.

     

    SELECT
        *
    FROM
        RESERVATION R
        LEFT JOIN CUSTOMER C
        ON R.NAME = C.NAME
    WHERE
        RESERVE_DATE > '2016-02-01';

     - 위 예제는 RESERVATION 테이블의 NAME 필드를 기준으로 CUSTOMER 테이블의 NAME 필드와 일치하는 레코드만을 LEFT JOIN으로 가져온 후, RESERVE_DATE 필드값이 '2016-02-01' 이후인 레코드만을 조회하는 예제이다.

     

     

     - 위 예제에서 두 테이블의 NAME 필드값이 일치하면, INNER JOIN과 같이 두 테이블의 모든 필드를 그대로 가져온다.

     - 하지만, 두 테이블의 NAME 필드값이 일치하지 않는 경우에는 CUSTOMER 테이블의 모든 필드를 NULL로 표시한다.

     - 마지막으로, RESERVE_DATE 필드값이 '2016-02-01' 이후인 레코드만을 조회한다는 조건이 있기 때문에, 결과는 위와 같다.

     

    RIGHT JOIN
    FROM
        테이블명01
        RIGHT JOIN 테이블명02
        ON 조건

     - RIGHT JOIN은 LEFT JOIN과는 반대로 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN 연산이다.

     - 이때, ON 절의 조건을 만족하지 않는 경우, 두 번째 테이블의 필드 값은 그대로 가져오지만, 첫 번째 테이블의 필드 값은 모두 NULL로 표시된다.

     

     

     

     - RIGHT JOIN의 결과를 벤 다이어그램으로 나타내면 위와 같다.

     

    SELECT
        *
    FROM
        RESERVATION R
        RIGHT JOIN CUSTOMER C
        ON R.NAME = C.NAME;

     - 위 예제는 CUSTOMER 테이블의 NAME 필드값을 기준으로 RESERVATION 테이블의 NAME 필드와 일치하는 레코드만을 RIGHT JOIN으로 가져오는 예제이다.

     

     

     - 위 예제에서 두 테이블의 NAME 필드값이 일치하면, INNER JOIN과 같이 두 테이블의 모든 필드를 그대로 가져온다.

     - 하지만, 두 테이블의 NAME 필드값이 일치하지 않는 경우에는 CUSTOMER 테이블의 모든 필드를 NULL로 표시한다.


    출처

    http://www.tcpschool.com/mysql/mysql_multipleTable_join

     

    728x90

    댓글

Designed by Tistory.