개발자 미니민의 개발스터디

[Oracle] 오라클 - OUTER JOIN (LEFT/RIGHT/FULL)

by mini_min
[Oracle]
오라클 - OUTER JOIN (LEFT/RIGHT/FULL)

✔️ OUTER JOIN

: 조인 수행시 왼쪽 OR 오른쪽 OR 양쪽을 기준으로 조인을 수행한다.

❌ 아우터 조인은 순서에 따라 나오는 결과가 다를 수 있다.

 

1) LEFT OUTER JOIN

: 왼쪽에 있는건 다 나오는 경우

-- 기본형식

SELECT [테이블명1.]컬럼명, [테이블명2.]컬럼명
          FROM 테이블명1
          LEFT OUTER JOIN 테이블명2 ON 테이블명1.컬럼명=테이블명2.컬럼명;
SELECT b.bCode, bName, sNum, qty
FROM book b
LEFT OUTER JOIN dsale d ON b.bCode = d.bCode;
💡 book 테이블에 있는 모든 레코드 출력,
dsale 테이블은 book 테이블과 중복되는 레코드들만 출력된다.

즉, bCode, bName 은 모두 출력되지만, sNum 과 qty 는 book 과 dsale 에 없는 내용이면 null 값으로 출력된다.

 

 

 

2) RIGHT OUTER JOIN

: 오른쪽에 있는건 다 나오는 경우

-- 기본형식

SELECT [테이블명1.]컬럼명, [테이블명2.]컬럼명
          FROM 테이블명1
          RIGHT OUTER JOIN 테이블명2 ON 테이블명1.컬럼명=테이블명2.컬럼명;
SELECT b.bCode, bName, sNum, qty
		FROM dsale d
		RIGHT OUTER JOIN book b ON d.bCode = b.bCode;
💡 위에 left outer join 한 결과와 같다. book 테이블이 모두 출력.

 

 

🔒 문제

-- 한 권도 판매되지 않은 책 출력하기

SELECT b.bCode, bName
		FROM book b
		LEFT OUTER JOIN dsale d ON b.bCode = d.bCode
	 	WHERE d.bCode IS NULL;

 

 

 

3) FULL OUTER JOIN

: 양쪽 모든 레코드가 나오도록 짜는 조인

-- 기본형식

SELECT [테이블명1.]컬럼명, [테이블명2.]컬럼명
          FROM 테이블명1 FULL OUTER JOIN 테이블명2 ON 테이블명1.컬럼명=테이블명2.컬럼명;

 

 

 

🔒 문제

-- SALE 테이블 다 나오고 회원/비회원 다 나옴

SELECT sNum, sDate, s.cNum, m.cNum, userId
	FROM sale s
	LEFT OUTER JOIN member m ON s.cNum = m.cNum;
💡LEFT OUTER JOIN 했을 때 나오는 값
1) 판매 테이블에 들어가는 회원 고객들
2) 판매 테이블에 들어가는 비회원 고객들

 

 

-- 비회원은 안나오도록. 회원의 SALE 테이블이 나옴

SELECT sNum, sDate, s.cNum, m.cNum, userId
FROM sale s
RIGHT OUTER JOIN member m ON s.cNum = m.cNum;
💡 RIGHT OUTER JOIN 하면
member 테이블이 기준이 되어서, 회원들과 회원들의 판매 테이블 정보가 출력

 

 

-- 모두 결합

SELECT sNum, sDate, s.cNum, m.cNum, userId
	FROM sale s
	FULL OUTER JOIN member m ON s.cNum = m.cNum;

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기