2009-02-05 2 views
14

'(+)'을 포함하는 Oracle의 일부 SQL 쿼리를 보았습니다. 그 의미가 전혀 없습니다. 누군가 그 목적을 설명하거나 사용법의 예를 제시 할 수 있습니까? 감사합니다.SQL 쿼리에서 (+) 의미

+0

dupe : http://stackoverflow.com/questions/430274/oracle-what-do-in-a-where-clause – Alkini

+1

실제로 질문을 게시하기 전에 답변을 검색하려고했지만 아무 것도 얻지 못했습니다. '+'또는 '(+)'를 검색 할 때 결과가 나타납니다. URL의 질문 제목이 (+) 부분도 건너 뛰는 것 같아 이상합니다. – Zabbala

+0

이것은 [이 게시물] (http://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-clause)의 복제입니다. 거기에 더 많은 정보가 있습니다. –

답변

35

오라클의 OUTER JOIN 동의어입니다.

SELECT * 
FROM a, b 
WHERE b.id(+) = a.id 

가 +가 OUTER 당신이 그것을 넣어 어느 쪽에 따라 가입을위한 지름길이다

SELECT * 
FROM a 
    LEFT OUTER JOIN b 
    ON b.id = a.id 
+0

나는 다음 사람을 위해주의 할 것이고, 여기서'a'와'b''의 일에주의를 기울이십시오. 예제에서 from 절은'[a, b]'이지만 동등성 검사는'[b.id = a.id]'입니다. 나의 습관은 동등성을 유지하는 것이다. [a.id = b.id]'; 그래서 저는 그 모범을 잘못 읽었습니다. 내 인생의 시간은 내가 돌아 오지 않을 것이다 ^) – BIBD

+0

오라클의 말처럼 "(+)"는 "이 부분은 일치하는 것이 없을 때 null을 얻는다"라고 해석 할 것이다. '[a.id = b.id]'의 동등성에 대한 내 규범 사용하기; 그러면 일어나는 일이 있습니다. 현대 표준을 따르기 위해 쿼리를 다시 작성하면'[a.id = b.id (+)]'는 왼쪽 바깥 쪽이되고'[a.id (+) = b.id] '는 a가됩니다. 오른쪽 외부. – BIBD

+0

(+) 연산자는 조건문과 조건부에 공백 또는 null 값을 포함 할 수있는 선택적 테이블의 측면에 직접 배치됩니다. – Yergalem

4

과 동일한 결과를 제공, 그것은 왼쪽 또는 오른쪽 OUTER가

확인을 가입 나타냅니다 일부 예제의 경우 this forum post의 두 번째 항목

2

IIRC, 이전 버전의 Oracle에서는 ANSI 이전 조인 구문의 외부 조인을 나타 내기 위해 +가 사용됩니다. 즉 :

select foo,bar 
from a, b 
where a.id = b.id+ 

select foo,bar 
from a left outer join b 
on a.id = b.id 

참고하는 것과 동일합니다 : 나는 ANSI 이전의 SQL 구문을 사용한 적이 이것은, 뒤로/약간 잘못되었을 수 있습니다.

+1

ANSI sql을 싫어하는 사용자를 위해 최신 버전의 Oracle에서 사용됩니다. –

+0

@ 마크 브래디. 나는 그것이 질의의 의도를 더 분명하게 느낀다. 그리고 ANSI SQL도 싫어합니다. –

2

합치는 테이블이 반환되는 레코드의 양을 줄이지 않도록하기 위해이 값을 사용하십시오. 따라서 가입 할 모든 키에 대한 레코드가없는 테이블에 가입 할 때 편리합니다. 예를 들어

, 당신은 고객 및 구매 테이블에 가입 한 경우 : 모든 고객과 모든 구매 일람에

, 당신은 구매 테이블에 조인 (+) 외부 고객 있도록 할 원하는 아직 보고서에 아무것도 표시되지 않았습니다.