Development Tip

오라클 : WHERE 절에서`(+)`는 무엇을합니까?

yourdevel 2021. 1. 6. 20:29
반응형

오라클 : 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 절에 있는가? 나는 그것이 전에 그렇게 사용되는 것을 본 적이 없습니다.


"="의 어느쪽에 "(+)가 켜져 있는지에 따라 LEFT OUTER 또는 RIGHT OUTER 조인 (이 경우에는 왼쪽 외부 조인)을 나타냅니다. 코드를 짧게 만드는 것을 좋아하기 때문에 먼저 배웠습니다.

가독성을 위해 사용하지 않는 것이 가장 좋습니다.


다른 사람들이 언급했듯이 (+)구문은 Oracle이 .NET Framework와 동일한 결과를 달성하기 위해 수년 동안 사용했던 구식이며 독점 구문입니다 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 외부 조인 구문으로 대체되었습니다.

참조 URL : https://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-clause

반응형