본문 바로가기
Category/Database

LEFT OUTER JOIN 설명

by Corinee 2024. 9. 8.
728x90
반응형

LEFT OUTER JOIN은 SQL에서 두 테이블을 결합할 때 사용되는 조인 방식 중 하나입니다. 이 조인은 왼쪽 테이블의 모든 행을 결과에 포함시키며, 오른쪽 테이블에서 일치하는 데이터가 있으면 결합하고, 일치하지 않으면 NULL 값을 포함시킵니다. 이를 통해 왼쪽 테이블의 모든 데이터를 항상 포함할 수 있습니다.

LEFT OUTER JOIN 설명

  1. 왼쪽 테이블:
    • 조인 연산에서 항상 포함되는 테이블입니다.
    • 만약 오른쪽 테이블에서 일치하는 데이터가 없더라도, 왼쪽 테이블의 데이터는 결과에 포함됩니다.
  2. 오른쪽 테이블:
    • 조인 연산에서 조건에 맞는 데이터를 제공하는 테이블입니다.
    • 왼쪽 테이블의 데이터와 일치하지 않으면, 결과에서 NULL 값을 포함합니다.
  3. 결과:
    • 왼쪽 테이블의 모든 행이 결과에 포함되며, 오른쪽 테이블에서 일치하는 행이 있으면 결합되고, 일치하지 않으면 NULL로 표시됩니다.

예시와 설명

주어진 예제 코드를 보면, LEFT OUTER JOIN을 사용하는 방식이 다음과 같습니다:

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 '%스프링%';

이 쿼리는 question 테이블을 기본 테이블로 하고, site_user와 answer 테이블을 각각 왼쪽 외부 조인하고 있습니다.

각 조인의 설명:

  1. left outer join site_user u1 on q.author_id=u1.id:
    • question 테이블의 author_id와 site_user 테이블의 id를 기준으로 왼쪽 외부 조인을 수행합니다.
    • 이 조인은 질문(question)의 작성자 정보를 가져옵니다.
    • 만약 작성자 정보가 없더라도 질문은 결과에 포함됩니다.
  2. left outer join answer a on q.id=a.question_id:
    • question 테이블의 id와 answer 테이블의 question_id를 기준으로 왼쪽 외부 조인을 수행합니다.
    • 이 조인은 질문에 연결된 답변 정보를 가져옵니다.
    • 만약 답변이 없더라도 질문은 결과에 포함됩니다.
  3. left outer join site_user u2 on a.author_id=u2.id:
    • answer 테이블의 author_id와 site_user 테이블의 id를 기준으로 왼쪽 외부 조인을 수행합니다.
    • 이 조인은 답변 작성자 정보를 가져옵니다.
    • 만약 답변 작성자 정보가 없더라도 해당 답변과 연결된 질문은 결과에 포함됩니다.

WHERE 절:

  • WHERE 절에서 LIKE 연산자를 사용하여 질문 제목, 질문 내용, 질문 작성자, 답변 내용, 답변 작성자에 키워드가 포함된 데이터를 필터링합니다.

요약

  • LEFT OUTER JOIN은 왼쪽 테이블의 모든 데이터를 결과에 포함시키며, 오른쪽 테이블에서 일치하는 데이터가 있으면 결합하고, 없으면 NULL로 표시합니다.
  • 이 조인을 사용하면 데이터의 모든 항목을 보존하면서 관련된 정보를 추가로 가져올 수 있습니다.
  • 예를 들어, 질문이 있고 그에 대한 답변이 없더라도 질문은 결과에 포함되며, 답변과 관련된 데이터는 NULL로 표시됩니다.

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

이너 조인(inner join)이란?  (0) 2024.09.08
아우터 조인(outer join)이란?  (0) 2024.09.08