-- OUTER JOIN
-- 조인 조건에 만족하지 않는 행을 보기 위한 추가적인 JOIN 형태이다.
--책별 판매 수량 구하기
-- EQUI 조인
SELECT b.b_id, title, p_su
FROM book b
JOIN panmai p ON b.b_id=p.b_id;
--LEFT OUTER JOIN
SELECT b.b_id, title, p_su
FROM book b
LEFT OUTER JOIN panmai p ON b.b_id=p.b_id; -- book테이블 컬럼과 panmai테이블 컬럼의 동일한 것을 묶어서 출력,
-- 이 때 panmai테이블에 book테이블의 b_id가 없는 것은 null값으로 출력되는데 아우터 라인이 이것까지 출력하게 해준다.
--조건에 만족하지않는 것은 왼쪽(ON b.b_id=p.b_id; 에서 b.b_id(book 테이블))에 있는 것으로 다 출력하라
--EQUI 조인
SELECT b.b_id, title, p_su
FROM book b, panmai p
WHERE b.b_id=p.b_id;
--LEFT OUTER JOIN
SELECT b.b_id, title, p_su
FROM book b, panmai p
WHERE b.b_id=p.b_id(+); --왼쪽것을 출력하려면 오른쪽에 (+)을 붙인다
--RIGHT OUTER JOIN
SELECT b.b_id, title, p_su
FROM book b
RIGHT OUTER JOIN panmai p ON b.b_id=p.b_id;
-- 조건에 맞지 않는것은 출력되지 않는다
SELECT b.b_id, title, p_su
FROM panmai p
RIGHT OUTER JOIN book b ON b.b_id=p.b_id;
-- 오른쪽에 올 타이틀을 from에 넣어줘야 한다.
--RIGHT OUTER JOIN
SELECT b.b_id, title, p_su
FROM panmai p,book b
WHERE b.b_id(+)=p.b_id; -- 이렇게하면 조건에 안맞는것은 안나온다. 아래처럼 한다.
--RIGHT OUTER JOIN
SELECT b.b_id, title, p_su
FROM panmai p,book b
WHERE p.b_id(+)=b.b_id;
--LEFT OUTER JOIN
SELECT b.b_id, title, price, p_su, price*p_su amt
FROM book b
LEFT OUTER JOIN danga d ON b.b_id=d.b_id
LEFT OUTER JOIN panmai p ON b.b_id=p.b_id;
SELECT b.b_id, title, price, p_su, price*p_su amt
FROM book b
JOIN danga d ON b.b_id=d.b_id
LEFT OUTER JOIN panmai p ON b.b_id=p.b_id;
--자바의 자료형이 int인 경우 null 값을 대입하면 자바에서 에러가 발생(런타임오류)
-- 이럴 경우 NVL 함수를 이용하여 문제를 해결한다.
SELECT b.b_id, title, price, NVL(p_su,0) p_su, NVL(price*p_su,0) amt
FROM book b
LEFT OUTER JOIN danga d ON b.b_id=d.b_id
LEFT OUTER JOIN panmai p ON b.b_id=p.b_id;
--=> null을 0으로 표현하도록 바꿨다. 자바에서 자료형은 null을 갖지 않으므로 이런식의 변환이 필요하다
-- OUTER JOIN을 이용하여 한권도 판매되지 않은 책코드, 책이름 출력
SELECT b.b_id, title, p_su
FROM book b
LEFT OUTER JOIN panmai p ON b.b_id=p.b_id
WHERE p.p_su is null;
'오라클 > 조인' 카테고리의 다른 글
SELF JOIN (0) | 2013.06.03 |
---|---|
CROSS JOIN (0) | 2013.06.03 |
FULL JOIN (0) | 2013.06.03 |
EQUI JOIN(inner Join) (0) | 2013.06.01 |