본문 바로가기

오라클/조인

OUTER JOIN

-- 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