Oracle: WHERE 절에서 (+)는 무엇을 합니까?
이행(일반화)하려는 Oracle 기반 애플리케이션에서 다음을 발견했습니다.
SELECT
Table1.Category1,
Table1.Category2,
count(*) as Total,
count(Tab2.Stat) AS Stat
FROM Table1, Table2
WHERE (Table1.PrimaryKey = Table2.ForeignKey(+))
GROUP BY Table1.Category1, Table1.Category2
무엇인가.(+)
WHERE 조항에서 무엇을 할 것인가?그렇게 쓰는 건 처음 봐요.
"="의 어느 쪽에 "(+)가 있느냐에 따라 왼쪽 아우터 또는 오른쪽 아우터 조인(이 경우 왼쪽 아우터 조인)을 나타냅니다.오래된 Oracle 구문을 처음 배운 사람들이 선호하는 경우가 있는데, 이 구문을 사용하면 코드가 짧아지기 때문입니다.
읽기 쉽도록 사용하지 않는 것이 좋습니다.
다른 사람들이 말했듯이(+)
구문은 구식이며, Oracle이 수년 동안 사용한 자체 구문입니다.OUTER JOIN
SQL-92가 표준 구문을 결정하기 전에 독자 구문을 채택했을 것입니다.
표준 SQL을 사용하여 보여 준 것과 동등한 쿼리OUTER JOIN
구문(현재 모든 주요 RDBMS 구현에서 지원됨)은 다음과 같습니다.
SELECT
Table1.Category1,
Table1.Category2,
COUNT(*) AS Total,
COUNT(Table2.Stat) AS Stat
FROM Table1
LEFT OUTER JOIN Table2 ON (Table1.PrimaryKey = Table2.ForeignKey)
GROUP BY Table1.Category1, Table1.Category2;
즉, 다음과 같습니다.
- 모든 행:
Table1
쿼리 결과에 포함됩니다. - 일치하는 행이 있는 경우
Table2
, 이러한 행을 포함합니다(에서 콘텐츠를 가져옵니다).Table1
일치하는 행이 여러 개 있는 경우Table2
). - 일치하는 행이 없는 경우
Table2
,사용하다NULL
모든 것을 위해Table2
의 컬럼이 쿼리 결과에 표시됩니다.
ANSI가 아닌 왼쪽 외부 결합 표기법입니다.Oracle9i부터는 '(+)' 표기법을 사용하는 혼란스러운 외부 조인 구문이 ISO 99 외부 조인 구문으로 대체되었습니다.
주목할 점은 기존 Oracle 표기법은 직관적이지 않으며 코드의 명확성과 유지보수가능성의 관점에서 피하는 것이 가장 좋다는 것입니다.
이 점을 설명하기 위해 이 예를 들어 설명하겠습니다.
를 실현하려면LEFT outer join
테이블 사이에A
그리고.B
왼쪽 테이블, 즉 A 옆에 (+) 연산자가 있어야 합니다.이것은 B와의 결합 기준의 성공 여부에 관계없이 A의 모든 행을 포함한다는 것을 나타내고 싶기 때문에 의미가 있습니다.그러나 이는 해당되지 않으며 다음과 같이 결합됩니다.
select b.age, a.name
from Employees a, EmployeeUNI b
where a.id = b.id(+)
ANSI SQL 버전은 다음과 같이 명시되어 있는 것이 좋습니다.
select b.age, a.name
From Employees a
LEFT outer join EmployeeUNI b
on a.id = b.id
두 방법 모두 동일한 출력이 되지만 ANSI 접근법은 초보 프로그래머가 실수로 (+)를 잘못된 위치에 배치할 위험을 수반하지 않습니다.
언급URL : https://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-clause
'IT' 카테고리의 다른 글
React Js Es 6을 사용한 스타일의 삼원 연산자 (0) | 2023.02.27 |
---|---|
워드프레스에 jquery 날짜 선택기 사용 (0) | 2023.02.27 |
제약 조건 변경 방법 (0) | 2023.02.27 |
getDerivedStateFromProps가 setState 뒤에 호출되는 이유는 무엇입니까? (0) | 2023.02.27 |
Mono switch If Empty()는 항상 호출됩니다. (0) | 2023.02.27 |