MySQL

MySQL_OUTER JOIN

ssmm95 2024. 9. 12. 10:45

OUTER JOIN( 외부 조인) :

조인의 조건에 만족되지 않는 행까지도 포함시키는 것, 자주 사용되지 않지만 가끔 유용하게 사용되는 방식

 

형식 : 

SELECT <열 목록>

FROM <첫 번째 테이블(LEFT 테이블)>

      <LEFT | RIGHT | FULL > OUTER JOIN <두 번쨰 테이블(RIGHT 테이블)>

                           ON <조인 될 조건>

[WHERE 검색조건];

 

외부 조인(Outer Join)의 종류:

  1. LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블에 일치하는 데이터가 없을 경우 NULL을 반환합니다.
  2. RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 포함하고, 왼쪽 테이블에 일치하는 데이터가 없을 경우 NULL을 반환합니다.
  3. 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