OUTER JOIN( 외부 조인) :
조인의 조건에 만족되지 않는 행까지도 포함시키는 것, 자주 사용되지 않지만 가끔 유용하게 사용되는 방식
형식 :
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL > OUTER JOIN <두 번쨰 테이블(RIGHT 테이블)>
ON <조인 될 조건>
[WHERE 검색조건];
외부 조인(Outer Join)의 종류:
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블에 일치하는 데이터가 없을 경우 NULL을 반환합니다.
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 포함하고, 왼쪽 테이블에 일치하는 데이터가 없을 경우 NULL을 반환합니다.
- FULL OUTER JOIN: 두 테이블 모두에서 일치하는 데이터는 반환하고, 일치하지 않는 데이터는 NULL로 표시됩니다.
예) SELECT U.userID, -- 유저 테이블의 userID를 선택
U.name, -- 유저 테이블의 name(이름)을 선택
B.prodName, -- 구매 테이블의 prodName(구매한 제품 이름)을 선택. 구매 내역이 없으면 NULL 반환
U.addr, -- 유저 테이블의 addr(주소)를 선택
concat(U.mobile1, U.mobile2) AS '연락처' -- 유저 테이블의 mobile1과 mobile2(전화번호)를 합쳐 '연락처'라는 칼럼명으로 출력
FROM usertbl U -- usertbl에서 데이터를 가져옴. U라는 별칭을 사용하여 테이블을 참조
LEFT OUTER JOIN buytbl B -- buytbl과 왼쪽 외부 조인을 사용. 즉, usertbl의 모든 행을 포함하며, buytbl에 해당하는 행이 없으면 NULL을 반환
ON U.userID = B.userID -- usertbl과 buytbl을 userID로 조인
ORDER BY U.userID; -- userID를 기준으로 결과를 오름차순으로 정렬
실습) 3 개의 테이블을 가지고 INNER JOIN 했던 결과를 OUTER JOIN으로 고려하자
SELECT
S.stdname, -- stdtbl S 에서 stdname 을 select
S.addr, -- stdtbl S 에서 addr 을 select
C.clubname, -- clubtbl C 에서 clubname 을 select
C.roomno -- clubtbl C 에서 clubname 을 select
FROM stdtbl S -- stdtbl 를 기본테이블로 설정 하고 S 라는 별칭을 부여
LEFT OUTER JOIN stdclubtbl SC
-- 학생이 가입한 클럽 정보가 있는 stdtbl을 왼쪽 외부조인한다
즉 , 모든 학생 정보는 포함되며 , 학생이 클럽에 가입하지 않았으면 클럽 정보는 NULL로 표시된다
on S.stdname = SC.stdName
-- stdtbl의 stdname과 stdclubtbl의 stdname 기준으로 조인한다
즉, 학생이름을 기준으로 클럽 가입 정보를 연결시킨다
LEFT OUTER JOIN clubtbl C
-- 클럽 정보가 있는 clubtbl을 왼쪽 외부 조인한다
즉, 학생이 클럽에 가입했을 때만 클럽정보가 반환되며, 클럽에가입하지 않았을 경우 NULL로 표시
on SC.clubName = C.clubname
-- stdclubtbl의 clubname과 clubtbl의 clubname을 기준으로 조인한다
즉, 클럽 이름을 기준으로 학생이 가입한 클럽의 상세정보를 가져온다
ORDER BY C.clubName; -- clubname을 기준으로 결과를 오름차순으로 정렬 , clubname이 NULL 경우 맨 마지막 정렬
실습) 동아리를 기준으로 가입된 학생을 출력하되, 가입 학생이 하나도 없는 동아리도 출력되게 하자
SELECT S.stdName, S.addr, C.clubName, C.roomNo
FROM stdtbl S
LEFT OUTER JOIN stdclubtbl SC ON S.stdName = SC.stdName -- 학생 이름으로 클럽 가입 정보와 조인
LEFT OUTER JOIN clubtbl C ON SC.clubName = C.clubName -- 클럽 가입 정보의 클럽 이름과 클럽 테이블의 클럽 이름을 조인
UNION
-- 두 번째 쿼리
SELECT S.stdName, S.addr, C.clubName, C.roomNo
FROM stdtbl S
LEFT OUTER JOIN stdclubtbl SC ON SC.stdName = S.stdName -- 동일한 조인 조건 사용
LEFT OUTER JOIN clubtbl C ON SC.clubName = C.clubName;
'MySQL' 카테고리의 다른 글
| My_SQL_ UNION/ UNION ALL/ NOT IN/ IN (1) | 2024.09.12 |
|---|---|
| MySQL_CROSS JOIN (0) | 2024.09.12 |
| MySQL_INNER JOIN (0) | 2024.09.11 |
| MySQL_삭제 후 재설치 (1) | 2024.09.11 |
| MySQL_Windows Powershell(관리자) DB용량 늘리기 (0) | 2024.09.11 |