이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다와이즈 토토 4_AAA버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

2.2. 사설 토토 표현

a사설 토토 표현테이블을 지정합니다. 사설 토토 표현에는 선택적으로 From Clause가 포함되어 있습니다. 그 뒤에 어디에서, 그룹에 의해, 그리고 조항이 있습니다. 사소한 테이블 표현식은 단순히 소위베이스 인 디스크의 테이블을 참조합니다. 표이지만 더 복잡한 표현을 사용하여 수정하거나 기본 테이블을 다양한 방식으로 결합하십시오.

사설 토토에 조항이있는 곳, 그룹 및 표현식 연속 변환의 파이프 라인을 지정합니다 From Clause에서 파생 된 표에서 수행됩니다. 파생 이러한 모든 변환에 의해 생성되는 사설 토토은 SELECT에서 지정된 출력 행을 계산하는 데 사용되는 입력 행 열 값 표현식 목록.

2.2.1. 절에서

From Clause는 하나 이상에서 사설 토토을 유래합니다. 쉼표로 구분 된 사설 토토 참조 목록에 제공된 사설 토토

Fromtable_reference[, table_reference[, ...]]

테이블 참조는 테이블 이름 또는 파생 된 테이블 일 수 있습니다. 하위 쿼리, 테이블 조인 또는 복잡한 조합과 같은 이것들. 둘 이상의 테이블 참조가 조항은 파생을 형성하기 위해 교차 조정 (아래 참조) 그런 다음 Where의 변형 될 수있는 테이블 그룹에 의해 그룹, 그리고 조항이 있으며 마침내 전체 사설 토토 표현.

사설 토토 참조가 수퍼티블 인 사설 토토의 이름을 지정할 때 사설 토토 상속 계층 구조의 사설 토토 참조가 생성됩니다 그 사설 토토뿐만 아니라 모든 미묘한 후계자 행, 키워드가 사설 토토 이름보다 우선하지 않는 한. 그러나, 참조는 이름이 지정된 열만 생성합니다. 사설 토토 --- 하위 사설 토토에 추가 된 열은 무시됩니다.

2.2.1.1. 결합 된 사설 토토

결합 된 사설 토토은 다른 두 가지에서 파생 된 사설 토토입니다 (Real 또는 파생) 특정 조인의 규칙에 따른 사설 토토 유형. 내부, 외부 및 크로스 조인이 지원됩니다.

타입 조인

크로스 조인
T1크로스 조인T2

각 행 조합마다T1andT2, 파생 된 사설 토토이 있습니다 모든 열로 구성된 행 포함T1T2. 테이블이있는 경우 n과 m 행에 각각, 결합 된 테이블은 n을 * m 줄. 크로스 조인은에 해당합니다.참으로 내부 조인.

팁 : FromT1크로스 조인T2FromT1, T2.

자격을 갖춘 조인
T1[내부] | 왼쪽 | 오른쪽 | 가득한  [외부] joinT2onboolean_expression
T1[내부] | 왼쪽 | 오른쪽 | 가득한  [외부] 조인T2사용 ( 사용열 목록에 가입)T1천연 [내부] | 왼쪽 | 오른쪽 | 가득한  [외부] joinT2

단어내부and외부는 모두에게 선택 사항입니다 조인.내부기본값입니다;왼쪽, 오른쪽full외부 조인을 암시합니다.

the조건 조건is ON 또는 CLAUSE를 사용하거나 암시 적으로 자연스러운 단어. 조인 조건은 어느 것을 결정합니다 두 소스 테이블의 행은로 간주됩니다."매치", 설명대로 아래 세부 사항.

ON 절은 가장 일반적인 종류의 조인입니다. 조건 : 그것은 부울 가치 표현이 필요합니다 Where 절에서 사용되는 것과 동일한 종류. 한 쌍의 행 T1 및 T2 일치에서 ON 표현이 평가하는 경우 그들에게 사실.

사용은 속기 표기법입니다 쉼표로 구분 된 열 이름 목록 사설 토토은 공통점이 있어야하며 조인 조건을 형성합니다. 이 각 열 쌍의 평등을 지정합니다. 또한 사용 사용 출력에는 하나의 열이 있습니다. 동일 한 입력 열 쌍에 대해 각 사설 토토의 다른 모든 열이 이어집니다. 따라서,사용 (A, B, C)is 동등한on (t1.a = t2.a 및 t1.b = t2.b 및 t1.c = t2.c)예외가 있습니다 켜짐이 사용되면 두 개의 열 A, B가 있으며 C 결과에서 C는 사용하면 각각 중 하나.

마침내 자연 사용하는 속기 형태입니다. 사용 목록을 형성합니다. 나오는 열 이름으로 구성되어 있습니다 두 입력 사설 토토. 사용과 마찬가지로이 열이 나타납니다 출력 사설 토토에서 한 번만.

자격을 갖춘 조인의 가능한 유형은 다음과 같습니다.

내부 조인

T1의 각 행 R1에 대해 결합 된 테이블에는 조인을 만족시키는 T2의 각 행에 대한 행 R1이있는 상태

왼쪽 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2에 행이있는 상태, 결합 된 행은 T2 열에서 널 값으로 반환됩니다. 따라서, 결합 된 테이블에는 무조건적으로 하나가 있습니다 T1의 각 행에 대한 행

오른쪽 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T2의 각 행 T1에 행이있는 상태, 결합 된 행은 T1의 열에서 널 값으로 반환되었습니다. 이것 왼쪽 조인의 반대 : 결과 테이블 무조건적으로 각 행에 행이 있습니다 T2.

전체 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2에 행이있는 상태, 결합 된 행은 T2 열에서 널 값으로 반환됩니다. 또한, 조인을 만족하지 않는 T2의 각 행에 대해 T1의 모든 행이있는 상태, 결합 된 행 T1 열의 널 값이 반환됩니다.

모든 유형의 결합은 함께 묶거나 중첩 될 수 있습니다. 둘 중 하나 또는 둘 다T1andT2결합 된 테이블이있을 수 있습니다. 괄호는 조인 조항 주위에 사용될 수 있습니다. 주문에 가입하십시오. 괄호가 없으면 조항 둥지에 가입하십시오 왼쪽에서 오른쪽으로.

2.2.1.2. 서브 쿼리

파생 된 사설 토토을 지정하는 하위 쿼리는 포함되어야합니다 괄호 및필수AS를 사용하여 이름을 지정하십시오 절. (보다섹션 2.2.1.3.)

from (select * from table1) as alias_name

이 예제는에 해당합니다.Alias_name as table1. 더 흥미로운 경우 평범한 결합으로 축소 할 수 없습니다. 하위 퀘스트가 발생하면 발생합니다. 그룹화 또는 집계가 포함됩니다.

2.2.1.3. 표와 열 별명

사설 토토과 복잡한 사설 토토에 임시 이름이 제공 될 수 있습니다. 도출 된 사설 토토에 대한 참조에 사용되는 참조 추가 처리. 이것을 A라고합니다.사설 토토 별칭.

Fromtable_referenceasalias

여기,별명일반 식별자. 별칭은 새로운 이름이됩니다 현재 쿼리에 대한 사설 토토 참조 - 더 이상 원래 이름으로 사설 토토을 참조 할 수 있습니다. 따라서

선택 * My_table에서 my_table.a 5;에서 my_table에서 my_table에서 선택하십시오.

유효한 SQL 구문이 아닙니다. 실제로 일어날 일 (이것은 IS APostgreSQL확장 표준)은 암시 적 테이블 참조가 다음에 추가된다는 것입니다. From Clause이므로 쿼리가 마치 마치 처리됩니다. 작성

my_table에서 my_table as where my_table.a 5;를 선택하십시오.

사설 토토 별칭은 주로 표기법 편의를위한 것이지만 테이블에 연결할 때 사용해야합니다. 예 :

선택 *에서 my_table에서 크로스 가입 my_table as b ...

또한 표를 참조하면 별칭이 필요합니다 하위 쿼리입니다.

괄호는 모호성을 해결하는 데 사용됩니다. 다음 명령문은 별칭을 할당합니다BTO 이전 예와 달리 조인의 결과 :

선택 *에서 (my_table as a cross join my_table) b ...
Fromtable_reference 별명

이 양식은 이전에 처리 된 것과 같습니다. 그만큼as열쇠 단어는 소음입니다.

Fromtable_reference[as]alias(컬럼 1[, 컬럼 2[, ...]])

이 형태에서 사설 토토을 위에서 설명한 경우, 사설 토토의 열도 제공됩니다. 주변 쿼리에서 사용할 임시 이름. 더 적은 경우 열 별칭은 실제 사설 토토보다 지정됩니다 열, 나머지 열의 이름이 바뀌지 않았습니다. 이 구문 자체 주인 또는 하위 쿼리에 특히 유용합니다.

ALIA가 조인 절의 출력에 적용되는 경우, 이러한 형식을 사용하여 별명은 원래 이름을 숨 깁니다. 가입 내에서. 예를 들어,

선택 a.* my_table에서 a as your_table as b on ...

유효한 SQL이지만

선택 a.*에서 (my_table as as your_table as b on ...) as c

유효하지 않음 : 테이블 별명 A는 별명 C.

2.2.1.4. 예

T1에서 내부 결합 T2를 사용하여 (C)
T1 왼쪽 외부 OUTER 조인 T2를 사용하여 (C)
DT1로 (T1 오른쪽 외부 OUT T2 ON (T1.C1 = T2.C1))에서
(T1 Full Outer Join T2를 사용하여 (C)) DT1 (DT1C1, DT1C2)

T1 천연 내부 결합 T2에서
T1 Natural Left Outer Join T2에서
T1 Natural Right OUTER 조인 T2에서
T1 Natural Full Outer Join T2에서

(T1에서 * 선택) DT1 크로스 조인 T2, T3
(T1에서 선택 *) DT1, T2, T3

위는 결합 된 테이블과 복잡한 예입니다 파생 된 테이블. AS 조항이 어떻게 이름을 바꾸거나 이름을 지정하는지 확인하십시오 파생 된 테이블 및 선택적 쉼표로 구분 된 목록 다음에있는 열 이름은 열을 이름 바꾸십시오. 마지막 두 조항에서 T1, T2에서 동일한 파생 테이블을 생성하고 T3. AS 키워드는 서브 쿼리를 DT1로 명명 할 때 생략되었습니다. 외부 및 내부 키워드는 생략 할 수있는 소음입니다. 또한.

2.2.2. 여기서 절

where 절의 구문

여기서search_condition

여기서search_conditionis 정의 된 모든 값 표현식섹션 1.3값을 반환합니다 유형부울.

FROM 절을 처리 한 후 각 행 파생 사설 토토은 검색 조건에 대해 확인됩니다. 만약에 조건의 결과는 사실입니다. 행은 출력 사설 토토, 그렇지 않으면 (즉, 결과가 False 또는 null) 폐기됩니다. 검색 조건은 일반적으로 참조는 적어도 절에서; 이것은 필요하지 않으며 그렇지 않으면 어디에 있습니다 조항은 쓸모가 없습니다.

참고 :가입을 구현하기 전에 구문, 가입 조건을 내부 조항에 가입. 예를 들어,이 테이블 표현은 동일합니다 :

a, b에서 a.id = b.id 및 b.val 5에서.

and

A에서 B On (a.id = b.id)에서 B.val 5에서 b on (a.id = b.id)

또는 아마도

자연 조인 B에서 B B.Val 5에서

당신이 사용하는 이들 중 어느 것이 주로 스타일의 문제입니다. From Clause의 조인 구문은 아마도 다른 제품에 휴대용. 외부 조인의 경우 아니요 어떤 경우에도 선택 : From Clause에서 수행해야합니다. 에이 ON/OUTER 조인 조항 사용not어디에와 동일합니다 줄의 추가를 결정하기 때문에 조건 (for 타의 추종을 불허하는 입력 행) 및 행 제거 최종 결과.

fdt에서
    C1 5

FDT에서 어디에서
    (1, 2, 3)의 C1
FDT에서 어디에서
    C1 In (T2에서 C1 선택)
FDT에서 어디에서
    C1 In (T2에서 C3를 선택하여 C2 = Fdt.c1 + 10)

FDT에서 어디에서
    C1 사이 (T2에서 C3를 선택하여 C2 = Fdt.c1 + 10) 및 100

FDT에서 어디에서
    존재합니다 (T2에서 C1을 선택하여 C2 FDT.C1)

위의 예에서FDTis From Clause에서 파생 된 표. 만나지 않는 행 where 절의 검색 조건은에서 제거됩니다.FDT. 스칼라 사용을 주목하십시오 값 표현식으로 하위 쿼리. 다른 쿼리와 마찬가지로 하위 쿼리는 복잡한 사설 토토 표현을 사용할 수 있습니다. 주목 방법FDT는 하위 쿼리에 참조됩니다. 자격C1asfdt.c1C1도 파생 된 열의 이름입니다. 서브 쿼리의 입력 테이블. 열 이름 자격이 추가됩니다 필요하지 않은 경우에도 명확성. 이것은 칼럼의 방법을 보여줍니다 외부 쿼리의 명명 범위가 내부로 확장됩니다. 쿼리.

2.2.3. 그룹에 의해 그룹 조항

WHERE 필터를 전달한 후 파생 된 입력 사설 토토은 그룹별로 그룹을 사용하여 그룹화하고, HADIE 조항을 사용하여 그룹 행 제거.

selectselect_list[어디서 ...]
    그룹 byGrouping_Column_Reference[, Grouping_Column_Reference] ...

절에 의한 그룹은 행을 함께 그룹화하는 데 사용됩니다. 나열된 모든 열에서 동일한 값을 공유하는 사설 토토. 그만큼 열이 나열된 순서는 중요하지 않습니다 ( 절에 의한 명령에 반대). 목적은 각각을 줄이는 것입니다 공통 값을 하나의 그룹 행에 공유하는 행 그룹 그룹의 모든 행을 대표합니다. 이것은 끝났습니다 출력의 중복성을 제거하거나 집계를 얻습니다 이 그룹에 적용됩니다.

사설 토토이 그룹화되면 집계 표현을 제외하고는 그룹화를 참조 할 수 없습니다. 해당 열의 특정 값은 모호하기 때문에 그룹의 행에서 왔습니까? 그룹화 된 열 선택 목록 열 표현식에서 참조 할 수 있습니다. 그룹당 알려진 일정한 가치가 있습니다. 집계 기능 그룹화되지 않은 열은 전체 사설 토토이 아닌 그룹. 예를 들어, ASum (Sales)제품 코드로 그룹화 된 테이블에서 총 판매가 아닌 각 제품의 총 판매량을 제공합니다. 모든 제품. 그룹화되지 않은 열에서 계산 된 집계는 다음과 같습니다 그룹의 대표 인 반면, 개별 값 그룹화되지 않은 열이 아닙니다.

예 :

PID, P.Name, (sum (s.units) * P.Price)을 판매로 선택하십시오
  제품 P에서 왼쪽 왼쪽에 가입 판매 (PID)
  PID, P.Name, P.Price;의 그룹

이 예에서 열PID, p.nameP.Price이후 절에 의해 그룹에 있어야합니다 쿼리 선택 목록에 참조됩니다. 열 S.Units는 목록별로 그룹에있을 필요가 없습니다. 골재 표현에만 사용됩니다 (sum ()30853_30991

엄격한 SQL에서 그룹 별 그룹은 소스 사설 토토이지만postgresql컨트리 | 쿼리 선택 목록에서. 대신 가치 표현으로 그룹화 간단한 열 이름도 허용됩니다.

selectselect_listFrom ... [어디서 ...] 그룹에 의한 그룹 ...boolean_expression

사설 토토이 그룹 별 절을 사용하여 그룹화 된 경우, 그러나 그러면 특정 그룹 만 관심이 있고, 조항은 Where 절과 마찬가지로 그룹을 제거하기 위해 사용됩니다. 그룹화 된 사설 토토.PostgreSQL사례는 다른 곳에서 조항처럼 행동하지만 사용의 요점 그런 길을 가짐은 명확하지 않습니다. 경험의 좋은 규칙은 a 조건은 집계 결과를 참조해야합니다 기능. 집계를 포함하지 않는 제한은 다음과 같습니다 WHERE 절에서보다 효율적으로 표현되었습니다.

예 :

"제품"으로 PID를 선택하십시오.
       P.Name "5000 이상",
       (sum (s.units) * (P.Price -P.Cost)) "지난 달 이익"으로
  제품 P에서 왼쪽 왼쪽에 가입 판매 (PID)
  여기서 s.date current_date- 간격 '4 주'
  PID, P.Name, P.Price, P.Cost의 그룹
    합계 (p.price * s.units) 5000;

위의 예에서 Where 절은 행을 선택합니다. 그룹화되지 않은 열이있는 반면, 조항은 제한됩니다. 총 총 매출이 5000 이상인 그룹에 대한 생산량