728x90
LEFT OUTER JOIN은 SQL에서 두 테이블을 결합할 때 사용되는 조인 방식 중 하나입니다. 이 조인은 왼쪽 테이블의 모든 행을 결과에 포함시키며, 오른쪽 테이블에서 일치하는 데이터가 있으면 결합하고, 일치하지 않으면 NULL 값을 포함시킵니다. 이를 통해 왼쪽 테이블의 모든 데이터를 항상 포함할 수 있습니다.
LEFT OUTER JOIN 설명
- 왼쪽 테이블:
- 조인 연산에서 항상 포함되는 테이블입니다.
- 만약 오른쪽 테이블에서 일치하는 데이터가 없더라도, 왼쪽 테이블의 데이터는 결과에 포함됩니다.
- 오른쪽 테이블:
- 조인 연산에서 조건에 맞는 데이터를 제공하는 테이블입니다.
- 왼쪽 테이블의 데이터와 일치하지 않으면, 결과에서 NULL 값을 포함합니다.
- 결과:
- 왼쪽 테이블의 모든 행이 결과에 포함되며, 오른쪽 테이블에서 일치하는 행이 있으면 결합되고, 일치하지 않으면 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 테이블을 각각 왼쪽 외부 조인하고 있습니다.
각 조인의 설명:
- 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를 기준으로 왼쪽 외부 조인을 수행합니다.
- 이 조인은 질문에 연결된 답변 정보를 가져옵니다.
- 만약 답변이 없더라도 질문은 결과에 포함됩니다.
- 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로 표시됩니다.
728x90
'Category > Database' 카테고리의 다른 글
이너 조인(inner join)이란? (0) | 2024.09.08 |
---|---|
아우터 조인(outer join)이란? (0) | 2024.09.08 |