728x90
OUTER JOIN은 SQL에서 두 테이블 간의 관계를 기반으로 데이터를 결합할 때 사용하는 조인 방식입니다. OUTER JOIN은 결과에 포함된 모든 행을 보장하며, 지정된 조건에 맞지 않는 경우에도 일부 결과를 포함할 수 있습니다. 주요 유형으로는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있습니다.
주요 OUTER JOIN 유형
- LEFT OUTER JOIN:
- 왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블에서 일치하는 행이 있으면 그 값을 포함합니다. 일치하는 행이 없는 경우, 오른쪽 테이블의 열은 NULL로 채워집니다.
- 예를 들어, q LEFT OUTER JOIN a는 question 테이블의 모든 행을 포함하고, answer 테이블에서 일치하는 행이 있는 경우에만 answer의 데이터를 추가합니다.
- RIGHT OUTER JOIN:
- 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에서 일치하는 행이 있으면 그 값을 포함합니다. 일치하는 행이 없는 경우, 왼쪽 테이블의 열은 NULL로 채워집니다.
- 예를 들어, a RIGHT OUTER JOIN q는 answer 테이블의 모든 행을 포함하고, question 테이블에서 일치하는 행이 있는 경우에만 question의 데이터를 추가합니다.
- 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 |