본문 바로가기

Category/Database

아우터 조인(outer join)이란?

728x90

OUTER JOIN은 SQL에서 두 테이블 간의 관계를 기반으로 데이터를 결합할 때 사용하는 조인 방식입니다. OUTER JOIN은 결과에 포함된 모든 행을 보장하며, 지정된 조건에 맞지 않는 경우에도 일부 결과를 포함할 수 있습니다. 주요 유형으로는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있습니다.

주요 OUTER JOIN 유형

  1. LEFT OUTER JOIN:
    • 왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블에서 일치하는 행이 있으면 그 값을 포함합니다. 일치하는 행이 없는 경우, 오른쪽 테이블의 열은 NULL로 채워집니다.
    • 예를 들어, q LEFT OUTER JOIN a는 question 테이블의 모든 행을 포함하고, answer 테이블에서 일치하는 행이 있는 경우에만 answer의 데이터를 추가합니다.
  2. RIGHT OUTER JOIN:
    • 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에서 일치하는 행이 있으면 그 값을 포함합니다. 일치하는 행이 없는 경우, 왼쪽 테이블의 열은 NULL로 채워집니다.
    • 예를 들어, a RIGHT OUTER JOIN q는 answer 테이블의 모든 행을 포함하고, question 테이블에서 일치하는 행이 있는 경우에만 question의 데이터를 추가합니다.
  3. FULL OUTER JOIN:
    • 왼쪽과 오른쪽 테이블의 모든 행을 반환하며, 두 테이블 간의 일치하는 행이 있을 경우에는 그 데이터를 포함합니다. 일치하지 않는 경우, 해당 테이블의 열은 NULL로 채워집니다.
    • 예를 들어, q FULL OUTER JOIN a는 question과 answer 테이블의 모든 행을 포함하고, 두 테이블 간의 일치하는 데이터가 있을 경우 그 데이터를 포함합니다.

예시 SQL 쿼리 설명

select
    distinct q.id,
    q.author_id,
    q.content,
    q.create_date,
    q.modify_date,
    q.subject 
from question q 
left outer join site_user u1 on q.author_id=u1.id 
left outer join answer a on q.id=a.question_id 
left outer join site_user u2 on a.author_id=u2.id 
where
    q.subject like '%스프링%' 
    or q.content like '%스프링%' 
    or u1.username like '%스프링%' 
    or a.content like '%스프링%' 
    or u2.username like '%스프링%'
  • FROM question q: question 테이블을 기본 테이블로 설정합니다.
  • LEFT OUTER JOIN site_user u1 ON q.author_id=u1.id: question 테이블의 author_id와 site_user 테이블의 id를 기준으로 왼쪽 외부 조인을 수행합니다. question의 모든 행을 포함하고, 일치하는 사용자 데이터가 있으면 추가합니다.
  • LEFT OUTER JOIN answer a ON q.id=a.question_id: question 테이블의 id와 answer 테이블의 question_id를 기준으로 왼쪽 외부 조인을 수행합니다. question의 모든 행을 포함하고, 일치하는 답변 데이터가 있으면 추가합니다.
  • LEFT OUTER JOIN site_user u2 ON a.author_id=u2.id: answer 테이블의 author_id와 site_user 테이블의 id를 기준으로 왼쪽 외부 조인을 수행합니다. answer의 모든 행을 포함하고, 일치하는 사용자 데이터가 있으면 추가합니다.
  • WHERE: 조건에 맞는 데이터를 필터링합니다. subject, content, username, 또는 answer의 content에서 '스프링'이라는 단어가 포함된 경우를 찾습니다.

요약

OUTER JOIN을 사용하면, 주 테이블의 모든 행을 포함하고, 연결된 테이블에서 일치하는 데이터를 추가적으로 가져올 수 있습니다. 일치하는 데이터가 없을 경우, 연결된 테이블의 데이터는 NULL로 채워집니다.

728x90

'Category > Database' 카테고리의 다른 글

LEFT OUTER JOIN 설명  (1) 2024.09.08
이너 조인(inner join)이란?  (0) 2024.09.08