• SQL INNER JOIN 키워드

    2021. 6. 2.

    by. Jacob Lee

    728x90

     


     

    INNER JOIN 키워드

    INNER JOIN 키워드는 두 개의 테이블에서 공통으로 매칭하는 데이터를 가진다.

     

    Image from Coding Horror

     

    INNER JOIN 이해하기

    아래와 같이 레지스트레이션과 로그인 테이블이 있다고 할때, 두 테이블에서 공통으로 있는 name이란 컬럼으로 두 테이블을 같이 묶을 수 있다 (쉬운 예제를 위해 이름은 중복이 되지 않는다고 가정).

     

    Image from Pierian Data

     

    그랬을 때, 레지스트레이션 테이블과 로그인 테이블에서 공통으로 가지고 있는 name 컬럼의 Andrew와 Bob이 INNER JOIN 되는 것이다.

    Image from Pierian Data

     

    INNER JOIN의 기본 문법은 다음과 같다.

    SELECT column_name
    FROM table1
    INNER JOIN table2
    ON table1.column_name = table2.column_name;

     

    한 가지 알아두면 좋을 점은, INNER JOIN은 대칭 다이어그램이기 때문에 테이블의 순서나 컬럼의 순서가 바뀌어도 전혀 상관이 없다.

    SELECT column_name
    FROM table2
    INNER JOIN table1
    ON table1.column_name = table2.column_name;

     

    위에서 예제로 들었던 테이블을 INNER JOIN 키워드를 활용해 SQL문으로 작성하면 다음과 같다.

    SELECT * FROM registrations
    INNER JOIN logins
    ON registrations.name = logins.name;

     

    Image from Pierian Data

     

    Image from Pierian Data

     

    INNER JOIN 사용 후 위 이미지처럼 중복되는 데이터가 반환되는 것이 싫다면, 다음과 같이 SQL문에서 어떤 특정 컬럼을 원하는지 명확히 해줄 수 있다. 

    SELECT * FROM reg_id, logins.name, log_id
    from registrations
    INNER JOIN logins
    ON registrations.name = logins.name;

    Image from Pierian Data

     

    위에서 보이는 것과 같이 SELECT문에서 name이 아닌 logins.name이라고 테이블 이름과 같이 명시되어있는 것을 볼 수 있다. name이란 컬럼을 중복된 값이므로 특정 컬럼을 원한다면 저렇게 테이블까지 명시해주어야 한다.

     

    INNER JOIN 사용하기

    우선 간단히 payment 테이블에과 customer 테이블에서 customer_id를 기준으로 INNER JOIN 해보자.

    SELECT * FROM payment
    INNER JOIN customer
    ON payment.customer_id = customer.customer_id;

     

    두 테이블은 공통의 값을 가지고 있는, INNER JOIN으로 이미 묶인 테이블이기 때문에, 아래의 쿼리처럼 customer 테이블에만 있는 유니크한 first_name 컬럼도 SELECT문으로 선택할 수 있다

    SELECT payment_id, payment.customer_id, first_name 
    FROM payment
    INNER JOIN customer
    ON payment.customer_id = customer.customer_id;
    
    SELECT payment_id, payment.customer_id, first_name 
    FROM customer
    INNER JOIN payment
    ON payment.customer_id = customer.customer_id;

    이전에 언급했던 것처럼 테이블의 위치가 바뀌어도 전혀 상관이 없다.

     

    728x90

    'Back-end > SQL' 카테고리의 다른 글

    SQL LEFT OUTER JOIN 키워드  (0) 2021.06.12
    SQL FULL OUTER JOIN 키워드  (0) 2021.06.09
    SQL JOIN절  (0) 2021.06.01
    SQL AS 키워드  (0) 2021.06.01
    SQL HAVING절  (0) 2021.05.31

    댓글