안녕하세요. (+) 관련해 궁금한 부분이 생겨 질문 드립니다.
예시 쿼리 확인 부탁 드려요.
select a.*
from
categories a,
category_sets b
where
a.id = b.id(+)
and b.lang(+) = 'US'
파란색으로 표시된 부분은 outer join인데,
빨간 부분처럼 필드 = 필드가 아닌 필드 = 값의 경우에 (+)가 붙은 것은 어떻게 읽으면 좋을까요?
(+) 를 안쓰면 inner join으로 바뀔 수 있습니다. outer join 대상 테이블의 컬럼에 필터조건을 걸때 (+)를 안쓰면 NULL 값이 제거되어 버려서 써주는 걸로 알고 있습니다.
답변 감사드립니다! ^^
구르비에서 아래 부분을 검색해 보시면 도움이 될 것 같네요
- inner join, full/left/right outer join
- (+) 는 oracle 표현 입니다.
감사합니다 ^^
-- 1. 상수조건이 조인조건으로 사용되는 경우
-- 1.1. Oracle : 상수 조건에도 (+) 붙음
SELECT a.*
FROM categories a
, category_sets b
WHERE a.id = b.id(+)
AND b.lang(+) = 'US'
;
-- 1.2. ANSI : ON 절
SELECT a.*
FROM categories a
LEFT OUTER JOIN category_sets b
ON a.id = b.id
AND b.lang = 'US'
;
-- 2. 상수조건이 조회조건으로 사용되는 경우
-- 2.1. Oracle : 상수 조건에 (+) 없음
SELECT a.*
FROM categories a
, category_sets b
WHERE a.id = b.id(+)
AND b.lang = 'US'
;
-- 2.2. ANSI : WHERE 절
SELECT a.*
FROM categories a
LEFT OUTER JOIN category_sets b
ON a.id = b.id
WHERE b.lang = 'US'
;
-- 2.3. 이 경우 아우터 조인은 의미가 없어지게 됨. 이너조인과 동일하게 동작
SELECT a.*
FROM categories a
INNER JOIN category_sets b
ON a.id = b.id
WHERE b.lang = 'US'
;
-- 이와 같은 사용은 의도가 불분명한 애매한 사용으로 잘못 사용한 예.
-- 이너조인을 사용하던가? ON 절에 조건을 주던가? 둘 중 하나가 맞음.
이해에 많은 도움되었습니다 감사합니다 ^^