Post

[SQL]조인 - Inner Join & Outer Join

조인이란 여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 2개의 테이블을 조합하여 하나의 열로 표현하는 것이다.

INNER JOIN(내부 조인)


INNER JOIN 은 키 값이 있는 테이블의 칼럼 값을 비교 후에 조건에 맞는 값을 가져오는 조인이다. 간단히 말해 서로 연관된 내용만 검색하는 조인방법이다.

sql_join_1.png

  • EMPLOYEE TABEL
IDNAMEDEPARTMENT_ID
1KIM11
2LEE22
3PARK22
4SONG11


  • DEPARTMENT TABLE
DEPARTMENT_IDDEPARTMENT_NAME
11영업부
22기술부
1
2
SELECT * FROM TABLE_A INNER JOIN TABLE_B
ON TABLE_A.DEPARTMENT_ID = TABLE_B.DEPARTMENT_ID;
IDNAMEDEPARTMENT_IDDEPARTMENT_NAME
1KIM11영업부
2LEE22기술부
3PARK22기술부
4SONG11영업부


OUTER JOIN


OUTER JOIN 은 조인하는 여러 테이블에서 한 쪽에는 데이터가 있고, 한 쪽에는 데이터가 없는 경우 데이터가 있는 쪽 테이블의 내용을 전부 출력하는 방법이다. 즉, 조인 조건에 만족하지 않아도 해당 행을 출력하고 싶을 때 사용할 수 있다.

1. LEFT OUTER JOIN

LEFT OUTER JOIN 은 관계형 데이터베이스에서 사용되는 JOIN 유형 중 하나이다. 이 JOIN 은 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 매칭되는 레코드들을 반환하며, 오른쪽 테이블에 매칭되는 레코드가 없는 경우에는 NULL 값을 채워 반환한다.

이를 통해 왼쪽 테이블의 모든 데이터를 유지하면서 오른쪽 테이블과의 연관 정보를 가져올 수 있다.

sql_join_2.png

1
2
3
SELECT * FROM EMPLOYEE E
LEFT OUTER JOIN DEPARTMENT D
ON E.DEPARTMENTID = D.DEPARTMENTID;

위의 코드는 orders 테이블과 customers 테이블을 결합하며, orders 테이블의 각 레코드에 대해 해당하는 customers 테이블의 레코드가 있다면 해당 고객 이름을 반환하고, 만약 해당하는 고객 레코드가 없다면 NULL 값을 반환한다.

언제 LEFT OUTER JOIN 을 주로 사용할까? 주문 데이블과 고객 테이블이 있을 때, 주문 테이블에는 주문이 있지만 고객 테이블에는 해당 주문과 매칭되는 고객 정보가 없는 경우에 LEFT OUTER JOIN 을 사용할 수 있다. 이렇게 하면 주문 정보를 유지하면서 고객 정보가 없는 주문도 확인할 수 있다.

마찬가지로, 댓글(Comments) 테이블과 이용자(Users) 테이블이 있는 경우를 생각해보자. 댓글 테이블에는 댓글이 있지만, 해당 댓글과 매칭되는 사용자 정보가 없는 경우에도 LEFT OUTER JOIN 을 사용하여 모든 댓글을 가져올 수 있다.

2. RIGHT OUTER JOIN

RIGHT OUTER JOIN은 조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽의 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시한다.

sql_join_3.png

1
2
3
SELECT * FROM EMPLOYEE E
RIGHT OUTER JOIN DEPARTMENT D
ON E.DepartmentID = D.DepartmentID;


실무에서 보다 많이 사용하는 JOIN 은?


RIGTH OUTER JOIN 은 DB에서 LEFT OUTER JOIN 과 유사하게 사용될 수 있지만, 실무에서는 LEFT OUTER JOIN 을 일반적으로 더 많이 사용한다. 이는 DB 설계나 쿼리 작성의 관점에서 LEFT OUTER JOIN 이 보다 직관적으로 사용하기 쉽기 때문이다.

RIGHT OUTER JOIN 은 오른쪽 테이블을 기준으로 모든 레코드를 가져오고 왼쪽 테이블과 일치하는 레코드가 없는 경우에도 결과에 포함된다. 이러한 동작은 LEFT OUTER JOIN 과 반대 방향으로 동작하며 오른쪽 테이블을 기준으로 하기 때문에 결과가 오른쪽에 표시된다.

그리고 RIGHT OUTER JOIN 을 사용하면 왼쪽 테이블이 NULL 인 경우가 많아져서 쿼리의 이해와 유지보수가 어려워질 수 있다.

때문에 DB 시스템에서는 RIGHT OUTER JOIN 보다는 LEFT OUTER JOIN 사용을 권장한다.

This post is licensed under CC BY 4.0 by the author.