IT’s Ha

[SQL] Join 본문

SQL

[SQL] Join

Deleloper Ha 2024. 3. 6. 22:39
728x90
반응형

이번 포스팅은 SQL에서 Join에 대하여 설명하려고 합니다.

Join은 두 개 이상의 테이블에서 열(column)을 기준으로 데이터를 결합하는 데 사용되는 방법입니다. 여러 종류의 Join이 있으며, 각각은 특정한 사용 사례에 맞게 설계되었습니다. 기본적인 Join의 종류에는 INNER JOIN, LEFT JOIN (LEFT OUTER JOIN), RIGHT JOIN (RIGHT OUTER JOIN), FULL JOIN (FULL OUTER JOIN) 등이 있습니다.

1. INNER JOIN

두 테이블의 교집합만을 결과로 반환합니다. 즉, 양쪽 테이블 모두에서 일치하는 행만 포함됩니다.

SELECT T01.ORDER_ID, T02.CUSTOMER_ID
  FROM ORDERS T01
       INNER JOIN CUSTOMERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;

위 결과는 ORDERS(주문)테이블에 CUSTOMERS(고객)정보가 있는 데이터만 나오게 됩니다.

2.LEFT JOIN (LEFT OUTER JOIN)

왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환합니다. 오른쪽 테이블에 일치하는 행이 없으면 결과는 NULL로 채워집니다.

-- LEFT JOIN, LEFT OUTER JOIN 둘 다 사용 가능
SELECT T01.ORDER_ID, T02.CUSTOMER_ID
  FROM ORDERS T01
       LEFT JOIN CUSTOMERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;
       

SELECT T01.ORDER_ID, T02.CUSTOMER_ID
  FROM ORDERS T01
       LEFT OUTER JOIN CUSTOMERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;

위 결과는 ORDERS(주문)테이블에 CUSTOMER_ID가 CUSTOMERS(고객)테이블에 정보가 있다면 나오고 아니면, NULL 값으로 나오게 됩니다.

3.RIGHT JOIN (RIGHT OUTER JOIN)

오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환합니다. 왼쪽 테이블에 일치하는 행이 없으면 결과는 NULL로 채워집니다.

-- RIGHT JOIN, RIGHT OUTER JOIN 둘 다 사용 가능
SELECT T01.ORDER_ID, T02.CUSTOMER_ID
  FROM ORDERS T01
       RIGHT JOIN CUSTOMERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;
       

SELECT T01.ORDER_ID, T02.CUSTOMER_ID
  FROM ORDERS T01
       RIGHT OUTER JOIN CUSTOMERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;

위 결과는 CUSTOMERS(고객) 테이블에 CUSTOMER_ID가 ORDERS(주문) 테이블에 정보가 있다면 나오고 아니면, NULL 값으로 나오게 됩니다.
결국 LEFT JOIN의 반대 개념으로 보시면 됩니다. LEFT JOIN으로 표현하면 아래와 같습니다.

SELECT T02.ORDER_ID, T01.CUSTOMER_ID
  FROM CUSTOMERS T01
       LEFT JOIN ORDERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;
       

SELECT T02.ORDER_ID, T01.CUSTOMER_ID
  FROM CUSTOMERS T01
       LEFT OUTER JOIN ORDERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;

결국 같은 데이터를 표현하게 됩니다. 

4.FULL JOIN (FULL OUTER JOIN)

왼쪽과 오른쪽 테이블의 모든 행을 반환합니다. 한쪽 테이블에만 일치하는 행이 있는 경우, 다른 테이블의 해당 행은 NULL로 채워집니다. 집합에서 합집합에 대한 개념으로 보시면 됩니다.

-- FULL JOIN, FULL OUTER JOIN 둘 다 사용 가능
SELECT T01.ORDER_ID, T02.CUSTOMER_ID
  FROM ORDERS T01
       FULL JOIN CUSTOMERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;
       

SELECT T01.ORDER_ID, T02.CUSTOMER_ID
  FROM ORDERS T01
       FULL OUTER JOIN CUSTOMERS T02 ON T01.CUSTOMER_ID = T02.CUSTOMER_ID;

INNER JOIN, LEFT JOIN, RIGHT JOIN의 합이라고 보시면 됩니다.

5. DBMS별 차이점

  • MS SQL과 Oracle: 기본적인 JOIN 사용법은 유사합니다. 하지만 Oracle에서는 FULL OUTER JOIN을 사용할 때 (+)= 구문을 사용하는 반면, MS SQL은 이 구문을 사용하지 않습니다.
  • MariaDB와 MySQL: 둘 다 거의 동일한 방식으로 JOIN을 처리합니다. MariaDB는 MySQL에서 파생되었기 때문에 기본적인 SQL 구문과 사용법이 매우 유사합니다.
  • PostgreSQL: 기본적인 JOIN 사용법은 다른 데이터베이스와 유사합니다. 하지만 PostgreSQL은 조금 더 복잡한 JOIN 연산과 CTE(Common Table Expressions)를 포함한 고급 기능을 제공합니다.

JOIN에 관하여 포스팅하였습니다. 궁금하신점이나 잘못된 내용있으면, 댓글이나 메일 부탁드립니다. 감사합니다.

728x90
반응형
Comments