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

7.2. 사설 토토 표현

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

선택 사항여기서, 그룹 by사설 토토 표현식의 조항 표현식에서 도출 된 표에서 수행 된 연속 변환의 파이프 라인을 지정합니다From절. 이러한 모든 변환은 쿼리의 출력 행을 계산하기 위해 선택 목록에 전달되는 행을 제공하는 가상 사설 토토을 생성합니다.

7.2.1. 그만큼From

theFrom Clause쉼표로 구분 된 사설 토토 참조 목록에 주어진 하나 이상의 다른 사설 토토에서 사설 토토을 도출합니다.

Fromtable_reference[, table_reference[, ...]]

사설 토토 참조는 사설 토토 이름 (schema-qualified)이거나 하위 쿼리, a와 같은 파생 사설 토토 일 수 있습니다.Join이들의 구성 또는 복잡한 조합. 두 개 이상의 사설 토토 참조가에 나열되어있는 경우From조항, 사설 토토은 교차 조정됩니다 (즉, 행의 직교 제품이 형성되고, 아래 참조). 의 결과From목록은 중간 가상 사설 토토로여기서, 그룹 by조항과 마지막으로 전체 사설 토토 표현식의 결과입니다.

사설 토토 참조가 사설 토토 상속 계층의 부모 인 사설 토토의 이름을 지정할 때, 사설 토토 참조는 그 사설 토토뿐만 아니라 모든 후손 사설 토토의 행을 생성합니다.전용사설 토토 이름보다 우선합니다. 그러나 참조는 이름이 지정된 사설 토토에 나타나는 열만 생성합니다. 서브 사설 토토에 추가 된 열은 무시됩니다.

쓰기 대신전용사설 토토 이름 앞에서 쓸 수 있습니다*사설 토토 이름 후에 자손 사설 토토이 포함되어 있음을 명시 적으로 지정합니다. 글쓰기*해당 동작이 기본값이므로 필요하지 않습니다 (SQL_INHERITANCE구성 옵션). 그러나 쓰기*추가 사설 토토이 검색 될 것이라고 강조하는 데 유용 할 수 있습니다.

7.2.1.1. 결합 된 테이블

결합 된 사설 토토은 특정 조인 유형의 규칙에 따라 두 개의 다른 (실제 또는 파생) 사설 토토에서 파생 된 사설 토토입니다. 내부, 외부 및 크로스 조인을 사용할 수 있습니다. 결합 된 사설 토토의 일반적인 구문은입니다.

T1 join_type T2[ join_condition ]

모든 유형의 결합은 함께 연결되거나 중첩 될 수 있습니다.T1T2사설 토토에 결합 할 수 있습니다. 괄호는 주변에 사용할 수 있습니다Join조인 순서를 제어하기위한 조항. 괄호가없는 경우Join클로즈 둥지 왼쪽에서 권리

타입 조인

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

가능한 모든 행 조합에서T1andT2(즉, 직교 제품), 결합 된 사설 토토에는 모든 열로 구성된 행이 포함됩니다T1T2. 사설 토토에 각각 n과 m 행이 있으면 결합 된 사설 토토에는 n * m 행이 있습니다.

FromT1크로스 조인T2FromT1내부 조인T2on true(아래 참조). 또한에 해당합니다.FromT1, T2.

참고 :이 후자의 동등성은 두 개의 사설 토토 이상이 나타날 때 정확하게 유지되지 않습니다.Join쉼표보다 더 단단히 바인딩합니다. 예를 들어FromT1크로스 조인T2내부 조인T3on조건FromT1, T2내부 조인T3on조건왜냐하면조건CAN 참조T1첫 번째 경우에는 두 번째 경우가 아닙니다.

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

단어내부and외부모든 형태의 선택 사항입니다.내부기본값입니다;왼쪽, 오른쪽full외부 조인을 암시합니다.

the조건 조건에 지정됨on또는사용절 또는 단어에 의해 암시 적으로천연. 결합 조건은 두 소스 테이블의 행을 고려합니다"매치", 아래에 자세히 설명 된대로.

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

내부 조인

T1의 각 행 R1에 대해 결합 된 테이블에는 T2의 각 행마다 R1과의 결합 조건을 충족하는 행이 있습니다.

왼쪽 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 T2의 임의 행으로 결합 조건을 충족시키지 않는 T1의 각 행에 대해 T2 열에서 널 값이 추가됩니다. 따라서 결합 된 테이블은 항상 T1의 각 행 당 하나 이상의 행을 가지고 있습니다.

오른쪽 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 T2의 모든 행에 대해 T1의 임의 행으로 결합 조건을 충족시키지 못하는 경우, 결합 된 행에 T1 열에 널 값이 추가됩니다. 이것은 왼쪽 조인의 반대입니다. 결과 테이블은 항상 t2의 각 행마다 행이 있습니다.

전체 외부 조인

먼저 내부 조인이 수행됩니다. 그런 다음 T2의 임의 행으로 결합 조건을 충족시키지 않는 T1의 각 행에 대해 T2 열에서 널 값이 추가됩니다. 또한 T1의 모든 행으로 조인 조건을 충족시키지 않는 T2의 각 행에 대해 T1 열에 널 값을 갖는 조인 행이 추가됩니다.

theon조항은 가장 일반적인 종류의 조인 조건입니다. A에서 사용하는 것과 같은 종류의 부울 가치 표현이 필요합니다여기서절. 의 한 쌍의 행T1andT2일치on표현식 평가가 참으로 평가됩니다.

the사용조항은 조인의 양쪽이 가입 열에 동일한 이름을 사용할 수있는 특정 상황을 활용할 수있는 속기입니다. 공유 열 이름의 쉼표로 구분 된 목록이 필요하며 각각의 평등 비교를 포함하는 조인 조건을 형성합니다. 예를 들어, 가입T1andT2with사용 (A, B)조인 조건 생성onT1.a =T2.A 및T1.B =T2.B.

또한의 출력사용중복 열 억제 : 동일한 값이 있어야하므로 일치하는 열을 인쇄 할 필요가 없습니다. 하는 동안가입모든 열을 생산합니다.T1|T2, 사용나열된 각 열 쌍 (나열된 순서)에 대해 하나의 출력 열을 생성하고 나머지 열이를 생성합니다.T1T2.

마지막으로,천연속기 형태의사용: a를 형성합니다.사용두 입력 사설 토토 모두에 나타나는 모든 열 이름으로 구성된 목록. 와 마찬가지로사용,이 열은 출력 사설 토토에 한 번만 나타납니다. 공통 열 이름이없는 경우자연 조인가입 ... On True, 교차 제품 조인 생성.

참고 : 사용나열된 열만 결합되므로 결합 된 관계의 열 변경으로부터 합리적으로 안전합니다.천연새로운 일치 열 이름을 유발하는 관계로 변경되기 때문에 모든 스키마가 변경되기 때문에 상당히 위험합니다.

이것을 합치려면 사설 토토이 있다고 가정합니다T1:

Num | 이름
-----+------
   1 | 에이
   2 | 비
   3 | 기음

andT2:

Num | 값
-----+-------
   1 | 트리플 엑스
   3 | YYY
   5 | 사설 토토

그런 다음 다양한 조인에 대한 다음 결과를 얻습니다.

= 선택 *에서 T1 Cross 조인 T2;에서 선택하십시오.Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
   1 | A |   3 | YYY
   1 | A |   5 | 사설 토토
   2 | B |   1 | 트리플 엑스
   2 | B |   3 | YYY
   2 | B |   5 | 사설 토토
   3 | C |   1 | 트리플 엑스
   3 | C |   3 | YYY
   3 | C |   5 | 사설 토토
(9 줄)= 선택 *에서 t1에서 t1에서 t2를 결합하여 t1.num = t2.num;Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
   3 | C |   3 | YYY
(2 줄)= 선택 *에서 T1 내부 조인 T2를 사용하여 (NUM);Num | 이름 | 값
-----+------+-------
   1 | A | 트리플 엑스
   3 | C | YYY
(2 줄)= 선택 *에서 T1 Natural Inner Join T2;Num | 이름 | 값
-----+------+-------
   1 | A | 트리플 엑스
   3 | C | YYY
(2 줄)= 선택 *에서 t1에서 t1에서 t2를 결합하여 t1.num = t2.num;Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
   2 | B |     |
   3 | C |   3 | YYY
(3 줄)= 선택 *에서 t1에서 왼쪽 왼쪽으로 t2를 사용하여 (num);Num | 이름 | 값
-----+------+-------
   1 | A | 트리플 엑스
   2 | B |
   3 | C | YYY
(3 줄)= 선택 * T1에서 T1에서 T2에 가입하여 t1.num = t2.num;Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
   3 | C |   3 | YYY
     |      |   5 | 사설 토토
(3 줄)= 선택 *에서 t1 full full join t2 on t1.num = t2.num;Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
   2 | B |     |
   3 | C |   3 | YYY
     |      |   5 | 사설 토토
(4 줄)

지정된 조정 조건on조치와 직접 관련이없는 조건도 포함 할 수도 있습니다. 이것은 일부 쿼리에 유용 할 수 있지만 신중하게 생각해야합니다. 예를 들어:

= select *에서 t1에서 t1에서 t2를 결합하여 t1.num = t2.num 및 t2.value = 'xxx';Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
   2 | B |     |
   3 | C |     |
(3 줄)

제한을 제한하는 것을 주목하십시오여기서조항은 다른 결과를 낳습니다 :

= 선택 * 선택 * T1에서 T1에서 T2를 결합하여 t2.num there t2.value = 'xxx';Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
(1 행)

이것은에 제한이 배치 되었기 때문입니다.on조항이 처리조인,에 제한이있는 동안여기서조항이 처리이후가입. 그것은 내부 조인에게는 중요하지 않지만 외부 결합으로는 중요합니다.

7.2.1.2. 테이블 및 열 별명

쿼리의 나머지 부분에서 파생 된 테이블에 대한 참조에 사용되는 테이블 및 복잡한 테이블 참조에 임시 이름이 제공 될 수 있습니다. 이것을 A라고합니다.사설 토토 별명.

사설 토토 별칭을 만들려면 쓰기

Fromtable_referenceasalias

또는

Fromtable_reference alias

theas키워드는 선택적 노이즈입니다.alias식별자가 될 수 있습니다.

사설 토토 별칭의 일반적인 응용 프로그램은 짧은 식별자를 긴 사설 토토 이름에 할당하여 조인 조항을 읽을 수 있도록하는 것입니다. 예를 들어:

SELECT *에서 * some_very_long_table_name s onther_fairly_long_name a on s.id = a.num; 가입

alias는 현재 쿼리에 관한 한 테이블 참조의 새 이름이됩니다. 쿼리의 다른 곳에서 원래 이름으로 테이블을 참조 할 수 없습니다. 따라서 이것은 유효하지 않습니다 :

my_table을 my_table.a 5로 my_table에서 선택하십시오.    -- 잘못된

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

선택 * 어머니로서 사람들로부터 어머니로서 사람과 함께 어머니.

또한 사설 토토 참조가 하위 쿼리 인 경우 별칭이 필요합니다 (참조섹션 7.2.1.3).

괄호는 모호성을 해결하는 데 사용됩니다. 다음 예제에서 첫 번째 진술은 별칭을 할당합니다B두 번째 인스턴스my_table, 그러나 두 번째 진술은 Alias를 조인 결과에 할당합니다.

선택 *에서 my_table에서 크로스로 결합하여 my_table b로 ...
선택 * (my_table as a cross join my_table) as b ...를 선택하십시오.

다른 형태의 사설 토토 앨리어싱은 사설 토토의 열 및 사설 토토 자체에 임시 이름을 제공합니다.

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

실제 테이블에 열이있는 것보다 더 적은 수의 열 별명이 지정되면 나머지 열에 이름이 바뀌지 않습니다. 이 구문은 특히 자체 조인 또는 하위 쿼리에 유용합니다.

ALIA가 A의 출력에 적용되는 경우Join절, 별칭은 내에서 원래 이름을 숨 깁니다.Join. 예를 들어:

선택 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.

7.2.1.3. 서브 쿼리

파생 사설 토토을 지정하는 서브 쿼리 괄호 안에 둘러싸여 있어야합니다.필수사설 토토 별칭 이름을 할당해야합니다 (in섹션 7.2.1.2). 예를 들어:

from (select * from table1) as alias_name

이 예제는와 같습니다.alias_name as table1에서. 평범한 결합으로 축소 할 수없는 더 흥미로운 사례는 하위 퀘스트가 그룹화 또는 집계와 관련 될 때 발생합니다.

하위 쿼리도 A 일 수 있습니다.목록 :

from (vales ( 'anne', 'smith'), ( 'bob', 'Jones'), ( 'joe', 'blow')))
     이름으로 (첫 번째, 마지막)

다시 사설 토토 별명이 필요합니다. 열에 별칭 이름을 할당목록은 선택 사항이지만 좋은 방법입니다. 자세한 내용은 참조4삼_젠 토토0둘.

7.2.1.4. 테이블 기능

테이블 함수는 기본 데이터 유형 (스칼라 유형) 또는 복합 데이터 유형 (테이블 행)으로 구성된 행 세트를 생성하는 함수입니다. 그들은 테이블, 뷰 또는 하위 쿼리처럼 사용됩니다.From쿼리 조항. 사설 토토 함수에 의해 반환 된 열은에 포함될 수 있습니다.select, Join또는여기서테이블, 뷰 또는 하위 쿼리의 열과 같은 방식으로 조항.

테이블 함수는를 사용하여 결합 할 수도 있습니다.행에서구문, 결과가 병렬 열로 반환됩니다. 이 경우 결과 행의 수는 가장 큰 함수 결과의 수입니다. 결과는 널 값이 일치하는 작은 결과입니다..

function_call[의식] [[as]table_alias[(column_alias[, ... ])]]
(의 행function_call[, ... ]) [의식] [[as]table_alias[(column_alias[, ... ])]]

의식조항이 지정되어 있으며 추가 유형의 열bigint함수 결과 열에 추가됩니다. 이 열은 1부터 시작하여 함수 결과 세트의 행을 숫자로 숫자 SQL 표준 구문의 일반화입니다.불확실한 ... 의식.) 기본적으로 서수는이라고합니다.Ordinality, 그러나 다른 열 이름은 an를 사용하여 할당 할 수 있습니다.as절.

특수 사설 토토 함수UNNEST모든 배열 매개 변수와 함께 호출 될 수 있으며 해당 열의 열을 반환합니다.UNNEST(PostgreSQL : 문서 : 9.4 : 스포츠 토토 사이트 함수 및 연산자)) 각 매개 변수에서 별도로 호출되었고를 사용하여 결합했습니다.행에서구성.

Unnest (array_expression[, ... ]) [의식] [[as]table_alias[(column_alias[, ... ])]]

그렇지 않은 경우table_alias지정되어 있으며 함수 이름은 테이블 이름으로 사용됩니다. A의 경우rows from ()구성, 첫 번째 함수 이름이 사용됩니다.

열 별명이 제공되지 않으면 기본 데이터 유형을 반환하는 함수의 경우 열 이름도 함수 이름과 동일합니다. 복합 유형을 반환하는 함수의 경우 결과 열은 유형의 개별 속성의 이름을 얻습니다.

일부 예 :

테이블 foo 생성 (FOOD INT, FOOSUBID int, fooname 텍스트);

function getfoo (int) foo는 foo를 $$로 반환합니다
    FOO에서 * FOO FOOOD = $ 1;
$$ 언어 SQL;

getfoo (1)에서 *를 t1로 선택하십시오.

FOO에서 *를 선택하십시오
    foosubid의 (
                        foosubid를 선택하십시오
                        getfoo (foo.fooid) z에서
                        여기서 z.foooid = foo.foooid
                      );

getfoo (1)에서 select *로보기 vw_getfoo를 만듭니다.

* vw_getfoo;에서 * 선택

경우에 따라 호출 방법에 따라 다른 열 세트를 반환 할 수있는 테이블 함수를 정의하는 것이 유용합니다. 이를 지원하기 위해 테이블 함수는 유사 형을 되 찾는 것으로 선언 할 수 있습니다.레코드. 이러한 함수가 쿼리에 사용되면 쿼리 자체에 예상 행 구조를 지정하여 시스템이 쿼리를 구문 분석하고 계획하는 방법을 알 수 있도록해야합니다. 이 구문은 다음과 같습니다.

function_call[as]alias(column_definition[, ... ])function_call[별명] (column_definition[, ... ])
(...의 행function_callas (column_definition[, ... ]) [, ... ])

사용하지 않을 때rows from ()구문,column_definition목록은 |항목; 열 정의의 이름은 열 별칭으로 사용됩니다. 를 사용할 때() 행구문, Acolumn_definition각 멤버 함수에 별도로 첨부 할 수 있습니다. 또는 멤버 함수가 하나만 있고 없으면조례와절, Acolumn_definition목록은 다음 열 별명 목록 대신에 작성할 수 있습니다rows from ().

이 예를 고려하십시오 :

선택 *
    DBLINK에서 ( 'dbname = mydb', 'pg_proc에서 proname, prosrc')
      T1 (Proname Name, Prosrc 텍스트)
    Proname과 같은 'Bytea%';

thepostgresql : 문서 : 9.4 : 토토 사이트함수 (의 일부postgresql : 문서 : 9.4 : 토토 캔모듈) 원격 쿼리를 실행합니다. 반품으로 선언 됨레코드모든 종류의 쿼리에 사용될 수 있으므로. 실제 열 세트는 통화 쿼리에 지정되어 파서가 예를 들어 무엇을 알 수 있도록.*확장해야합니다.

7.2.1.5. 측면서브 쿼리

서브 쿼리가 나타납니다핵심 단어가 앞에있을 수 있습니다측면. 이를 통해 이전에 제공된 열을 참조 할 수 있습니다From항목. (없이측면, 각 하위 쿼리는 독립적으로 평가되므로 다른 어떤 것도 교차 참조 할 수 없습니다From항목.)

사설 토토 함수가 나타납니다From키워드가 앞서도측면, 그러나 함수의 경우 핵심 단어는 선택 사항입니다. 함수의 인수는 선행에 의해 제공된 열에 대한 참조를 포함 할 수 있습니다From어떤 경우에도 항목.

a측면항목은에서 최상위로 나타날 수 있습니다From목록 또는 aJoin트리. 후자의 경우 A의 왼쪽에있는 모든 항목을 참조 할 수도 있습니다.Join오른쪽에 있습니다.

언제From항목 포함측면상호 참조, 평가는 다음과 같이 진행됩니다.From교차 참조 열 또는 여러 행의 행을 제공하는 항목From열을 제공하는 항목,측면항목은 해당 행 또는 행의 열 값을 사용하여 평가됩니다. 결과 행은 계산 된 행과 평소와 같이 결합됩니다. 열 소스 테이블에서 각 행 또는 행 세트에 대해 반복됩니다.

사소한 예측면is

선택 * From Foo, 측면 (bar.id = foo.bar_id) ss;를 선택하십시오.

이것은 더 기존의 결과와 정확히 동일한 결과를 가지고 있기 때문에 특히 유용하지 않습니다

선택 *에서 foo, bar bar.id = foo.bar_id; bar bar bar

측면교차 참조 열이 결합 될 행을 계산하려면 주로 유용합니다. 일반적인 응용 프로그램은 설정 회전 함수에 대한 인수 값을 제공하는 것입니다. 예를 들어, 그렇게 가정정점 (다각형)다각형의 정점 세트를 반환하면, 우리는 사설 토토에 저장된 다각형의 가까운 모임 정점을 식별 할 수 있습니다.

P1.ID, P2.ID, V1, V2를 선택하십시오
다각형 P1, Polygons P2,
     측면 정점 (P1.Poly) v1,
     측면 정점 (p2.poly) v2
여기서 (v1 <- v2) <10 및 p1.id! = p2.id;

이 쿼리도 작성할 수 있습니다

p1.id, p2.id, v1, v2를 선택하십시오
다각형 P1 크로스 조인 측면 정점 (P1.Poly) V1,
     다각형 P2 크로스 조인 측면 정점 (P2.poly) v2
여기서 (v1 <- v2) <10 및 p1.id! = p2.id;

또는 여러 다른 동등한 제제. (이미 언급했듯이측면이 예제에서는 키워드가 필요하지만 명확성을 위해 사용합니다.)

종종 특히 편리합니다왼쪽 조인to a측면서브 쿼리, 따라서이라도 결과에 소스 행이 나타납니다.측면서브 쿼리는 그들에게 행을 생성하지 않습니다. 예를 들어, ifget_product_names ()제조업체가 만든 제품 이름을 반환하지만 현재 테이블의 일부 제조업체는 현재 제품이없는 제품을 생산할 수 있습니다..

M.Name을 선택하십시오
제조업체로부터 m 왼쪽에 가입하면 gettal get_product_names (m.id) pname on true
pname이 null 인 곳;

7.2.2. 그만큼여기서

의 구문어디서 절is

여기서search_condition

여기서search_conditionvalue 표현식입니다 (참조PostgreSQL : 문서 : 9.4 : 값 메이저 토토 사이트식) 유형 값을 반환하는부울.

처리 후From조항이 완료되며, 파생 된 가상 테이블의 각 행은 검색 조건에 대해 확인됩니다. 조건의 결과가 true 인 경우 행은 출력 테이블에 보관됩니다. 그렇지 않으면 (즉, 결과가 False 또는 NULL 인 경우) 폐기됩니다. 검색 조건은 일반적으로에 생성 된 테이블의 최소 한 열 이상을 참조합니다.From절; 이것은 필요하지 않지만 그렇지 않으면여기서조항은 상당히 쓸모가 없습니다.

참고 :내부 조인의 조인 조건은에도 쓸 수 있습니다.여기서절 또는Join절. 예를 들어,이 사설 토토 표현식은 다음과 같습니다.

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

및 :

a 내부 조인 B on (a.id = b.id)에서 b.val 5

또는 아마도 :

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

당신이 사용하는 이들 중 어느 것이 주로 스타일의 문제입니다. 그만큼Join구문의From절은 SQL 표준에도 불구하고 다른 SQL 데이터베이스 관리 시스템에 대한 휴대용이 아닐 수 있습니다. 외부 조인의 경우 선택의 여지가 없습니다.에서 수행해야합니다.From절. 그만큼on또는사용외부 조인 조항은notA와 동등한어디조건 - 최종 결과에서 행을 추가하고 행을 추가하고 최종 결과에서 행을 제거 할 수 있기 때문입니다..

다음은의 몇 가지 예입니다.여기서조항 :

선택 ... FDT에서 C1 5

선택 ... FDT에서 C1 in (1, 2, 3)

선택 ... FDT에서 C1 in (T2에서 C1 선택)

선택 ... FDT에서 C1 in (T2에서 C3를 선택하십시오. 여기서 C2 = Fdt.c1 + 10)

선택 ... FDT에서 C1 사이의 C1 (T2에서 C3를 선택하여 C2 = FDT.C1 + 10)과 100

선택 ... FDT에서 존재하는 곳 (T2에서 C1을 선택하여 C2 FDT.C1)

FDT에서 파생 된 사설 토토입니다From절. 검색 조건을 충족하지 않는 행여기서조항이 제거되었습니다FDT. 스칼라 하위 쿼리를 값 표현식으로 사용하십시오. 다른 쿼리와 마찬가지로 하위 쿼리는 복잡한 사설 토토 표현식을 사용할 수 있습니다. 또한 어떻게FDT는 하위 쿼리에 참조됩니다. 자격C1asfdt.c1C1는 서브 쿼리의 파생 입력 테이블에있는 열의 이름이기도합니다. 그러나 열 이름을 자격을 갖추면 필요하지 않은 경우에도 명확성이 추가됩니다. 이 예제는 외부 쿼리의 열명 범위가 내부 쿼리로 확장되는 방법을 보여줍니다.

7.2.3. 그만큼그룹 byand클로즈

통과 후여기서필터, 파생 입력 테이블은를 사용하여 그룹화 될 수 있습니다그룹 by조항 및를 사용하여 그룹 행 제거절.

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

the절에 의한 그룹나열된 모든 열에 동일한 값이있는 테이블에 해당 행을 그룹화하는 데 사용됩니다. 열이 나열된 순서는 중요하지 않습니다. 그 효과는 공통 값을 가진 각 행 세트를 그룹의 모든 행을 나타내는 하나의 그룹 행에 결합하는 것입니다. 이는 이들 그룹에 적용되는 출력 및/또는 계산 응집체의 중복성을 제거하기 위해 수행된다. 예를 들어:

= 선택 *에서 test1;x | 와이
---+---
 A | 3
 C | 2
 B | 5
 A | 1
(4 줄)= Test1 Group에서 X;에서 X를 선택하십시오.x
---
 에이
 비
 기음
(3 줄)

두 번째 쿼리에서는 쓸 수 없었습니다선택 *에서 Test1 Group에서 x에서 선택하십시오., 열에 대한 단일 값이 없기 때문에y각 그룹과 관련 될 수 있습니다. 그룹화 된 열은 각 그룹에 단일 값이 있으므로 선택 목록에서 참조 할 수 있습니다.

일반적으로 사설 토토이 그룹화되면에 나열되지 않은 열그룹 by집계 표현을 제외하고는 참조 할 수 없습니다. 골재 표현이있는 예는 다음과 같습니다.

= x, x, sum (y)을 선택하여 x;x | 합집합
---+-----
 A |   4
 B |   5
 C |   2
(3 줄)

여기Sum는 전체 그룹에 비해 단일 값을 계산하는 집계 함수입니다. 사용 가능한 집계 기능에 대한 자세한 내용은에서 확인할 수 있습니다.PostgreSQL : 문서 : 9.4 : 젠 토토 함수.

팁 :집계 표현이없는 그룹화는 열에서 별개의 값 세트를 효과적으로 계산합니다. 이것은 또한를 사용하여 달성 할 수 있습니다.별도의절 (참조섹션 7.3.3).

여기에 또 다른 예가 있습니다. 모든 제품의 총 판매가 아닌 각 제품의 총 판매량을 계산합니다. :

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

이 예에서 열product_id, p.nameP.Price그룹 by조항 쿼리 선택 목록에 참조되므로 (아래 참조). 열S.units그룹 by집계 표현식에만 사용되므로 목록 (Sum (...)47040_47167

제품 사설 토토이 설정되어 있으면product_id기본 키는 기본 키입니다. 그러면 그룹에 충분할 것입니다.product_id위의 예에서 이름과 가격이기능적으로 의존적제품 ID에서 각 제품 ID 그룹에 대해 어떤 이름과 가격 가치에 대한 모호성이 없습니다.

엄격한 SQL,그룹 by소스 사설 토토의 열별로만 그룹화 할 수 있지만PostgreSQL허용하도록 이것을 확장합니다그룹 by선택 목록에서 열별로 그룹화합니다. 간단한 열 이름 대신 값 표현식으로 그룹화 할 수 있습니다.

테이블을 사용하여 그룹화 된 경우그룹 by, 그러나 특정 그룹 만 관심이 있습니다.조항을 사용할 수 있습니다.여기서clause, 결과에서 그룹을 제거합니다. 구문은 다음과 같습니다.

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

표현조항은 그룹화 된 표현식과 그룹화되지 않은 표현식을 참조 할 수 있습니다 (집계 함수를 반드시 포함).

예 :

= sum (y) 3;에 의해 test1 그룹에서 x, sum (y)을 선택하십시오.x | 합집합
---+-----
 A |   4
 B |   5
(2 줄)= x < 'c';에 의해 test1 그룹에서 x, sum (y)을 선택하십시오.x | 합집합
---+-----
 A |   4
 B |   5
(2 줄)

다시, 더 현실적인 예 :

Product_id, P.Name, (Sum (S.Units) * (P.Price -P.Cost))))는 이익
    제품 P에서 왼쪽 왼쪽에 가입 판매 (product_id)
    여기서 s.date current_date- 간격 '4 주'
    product_id, p.name, p.price, p.cost의 그룹
    합계 (p.price * s.units) 5000;

위의 예에서어디절은 그룹화되지 않은 열에 따라 행을 선택하고 있습니다 (표현은 지난 4 주 동안 판매에만 해당됩니다).조항은 총 총 매출이 5000을 초과하는 그룹으로 출력을 제한합니다. 총 표현이 반드시 쿼리의 모든 부분에서 동일 할 필요는 없습니다..

쿼리에 집계 함수 호출이 포함되어 있지만 아니요그룹 by절, 그룹화는 여전히 발생합니다. 결과는 단일 그룹 행입니다 (또는 단일 행을 제거하면가 전혀 없을 수도 있습니다.). A를 포함하는 경우에도 마찬가지입니다.조항, 집계 함수 호출 또는 조항그룹 by절.

7.2.4. 창 함수 처리

쿼리에 창 함수가 포함 된 경우 (참조48006000004800600000600메이저 토토 사이트48006000006000004800500004800600000600000480048005000000006, PostgreSQL : 문서 : 9.4 : 창 롤 토토섹션 4.2.8),이 기능은 그룹화, 집계 및 후에 평가됩니다.필터링이 수행됩니다. 즉, 쿼리가 골재를 사용하는 경우그룹 by또는From/여기서.

다중 창 함수가 사용되면 구문 적으로 동등한 모든 창 함수파티션 byand주문 by창 정의의 조항은 데이터를 통한 단일 패스로 평가됩니다. 그러므로 그들은이라도 같은 정렬 순서를 볼 것입니다.주문 by주문을 독특하게 결정하지 않습니다. 그러나 다른 기능의 평가에 대한 보장은 없습니다파티션 by또는주문 by사양. (이 경우, 윈도우 함수 평가의 패스 사이에 일반적으로 정렬 단계가 필요하며, 정렬은 행의 순서를 보존하는 것이 보장되지 않습니다.주문 by동등한 것으로 본다.)

현재, 창 함수는 항상 미리 분열 된 데이터가 필요하므로 쿼리 출력은 창 함수 중 하나 또는 다른 하나에 따라 주문됩니다. '파티션 by/주문 by조항. 그러나 이것에 의존하는 것은 권장되지 않습니다. 명시적인 최상위 사용주문 by절의 결과가 특정 방식으로 정렬되어 있는지 확인하려면 조항