지원되는 버전 :와이즈 토토 4_AAA(17) /16 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다와이즈 토토 4_AAA버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

7.2. 테이블 표현

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

선택 사항여기서, 그룹 by스포츠 토토 표현식의 조항은 연속의 파이프 라인을 지정합니다. 에서 파생 된 테이블에서 수행 된 변환From절. 이 모든 변환은 a 전달되는 행을 제공하는 가상 스포츠 토토 쿼리의 출력 행을 계산하려면 목록을 선택하십시오.

7.2.1. 그만큼From

theFrom절은 스포츠 토토을 도출합니다 쉼표로 구분 된 스포츠 토토에 주어진 하나 이상의 다른 스포츠 토토에서 참조 목록.

Fromtable_reference[, table_reference[, ...]]

스포츠 토토 참조는 스포츠 토토 이름 일 수 있습니다 (아마도 스키마 자격) 또는 하위 쿼리와 같은 파생 스포츠 토토 스포츠 토토 조인 또는 이들의 복잡한 조합. 둘 이상 스포츠 토토 참조는에 나열되어 있습니다.From조항은 교차 조정 (아래 참조)을 형성합니다 그런 다음 적용 할 수있는 중간 가상 테이블 의 변환여기서, 그룹 by조항은 마침내 결과입니다 전체 스포츠 토토 표현.

스포츠 토토 참조가 수퍼티블 인 스포츠 토토의 이름을 지정할 때 스포츠 토토 상속 계층 구조의 스포츠 토토 참조가 생성됩니다 그 스포츠 토토뿐만 아니라 모든 미묘한 후계자 행, 핵심 단어가 아니라면전용앞에 스포츠 토토 이름. 그러나 참조는 열만 생성합니다 이름이 지정된 스포츠 토토에 나타납니다 --- 추가 된 열 하위 스포츠 토토은 무시됩니다.

7.2.1.1. 결합 된 테이블

결합 된 스포츠 토토은 다른 두 가지에서 파생 된 스포츠 토토입니다 (Real 또는 파생) 특정 조인의 규칙에 따른 스포츠 토토 유형. 내부, 외부 및 크로스 조인을 사용할 수 있습니다.

타입 조인

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

각 행 조합에 대해T1T2, 파생 된 스포츠 토토이 있습니다 모든 열로 구성된 행 포함T1T2. 스포츠 토토이있는 경우 n과 m 행에 각각, 결합 된 스포츠 토토은 n을 * m 줄.

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

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

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

the조건 조건IS 에 지정됨on또는사용조항 또는 암시 적으로 단어천연. 가입 조건은 두 소스의 행을 결정합니다 스포츠 토토은로 간주됩니다."매치", 자세히 설명 된대로 아래에.

theon절이 가장 중요합니다 일반적인 가입 조건 : 부울이 필요합니다 a와 같은 종류의 가치 표현여기서절. 한 쌍의 행 에서T1andT2일치on표현식은 true로 평가됩니다 그들을.

사용는 속기입니다 표기법 : 쉼표로 구분 된 열 목록이 필요합니다 결합 된 스포츠 토토이 공통적으로 가져야하는 이름, 각각의 동등성을 지정하는 결합 조건을 형성합니다 이 쌍의 열. 또한 a의 출력사용하나에 열이 있습니다 각 동일 한 입력 열 쌍, 다음에 각 테이블의 다른 모든 열. 따라서,사용 (A, B, C)동등합니다 에게on (t1.a = t2.a 및 t1.b = t2.b 및 t1.c = t2.c)if 예외on사용됩니다 열a, BC결과,사용각각 중 하나만있을 것입니다.

마지막으로,자연는 속기 형태의입니다.사용: a를 형성합니다.사용정확히 그것들로 구성된 목록 두 입력 스포츠 토토 모두에 나타나는 열 이름. 와 마찬가지로사용,이 열이 나타납니다 출력 스포츠 토토에서 한 번만.

자격을 갖춘 가입 유형은 다음과 같습니다.

내부 조인

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

왼쪽 외부 조인

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

오른쪽 외부 조인

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

전체 외부 조인

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

모든 유형의 결합은 함께 연결되거나 중첩 될 수 있습니다. 둘 중 하나 또는 둘 다T1andT2결합 된 테이블이있을 수 있습니다. 괄호는 주변에 사용될 수 있습니다Join조인 순서를 제어하기위한 조항. 없을 때 괄호,Join클로즈 둥지 왼쪽에서 오른쪽으로.

이것을 합치려면 스포츠 토토이 있다고 가정합니다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에서 t2를 결합하여 t1.num = t2.num;Num | 이름 | Num | 값
-----+------+-----+-------
   1 | A |   1 | 트리플 엑스
   3 | C |   3 | YYY
(2 줄)= 선택 *에서 t1 내부 join t2를 사용하여 (num);Num | 이름 | 값
-----+------+-------
   1 | A | 트리플 엑스
   3 | C | YYY
(2 줄)= 선택 *에서 T1 Natural Inner 조인 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 줄)= select * from t1 왼쪽 왼쪽 왼쪽 t2를 사용하여 (num);Num | 이름 | 값
-----+------+-------
   1 | A | 트리플 엑스
   2 | B |
   3 | C | YYY
(3 줄)= 선택 *에서 T1에서 T1에 가입하여 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그렇지 않은 조건도 포함 할 수도 있습니다 가입과 직접 관련됩니다. 이것은 일부에게 유용 할 수 있습니다 쿼리이지만 신중하게 생각해야합니다. 을 위한 예:

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

7.2.1.2. 표와 열 별명

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

스포츠 토토 별칭을 만들려면 쓰기

table_referenceasalias

또는

Fromtable_reference 별명

theas키워드는 소음입니다.alias식별자.

일반적인 스포츠 토토 별칭의 적용은 단락을 할당하는 것입니다. 조인 조항을 유지하기 위해 긴 스포츠 토토 이름에 식별자 읽을 수 있습니다. 예를 들어:

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

별칭은 테이블 참조의 새 이름이됩니다. 현재 쿼리 - 더 이상 원래 이름으로 테이블. 따라서

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

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

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

이로 인해 크로스 조인이 발생합니다. 당신이 원하는 것.

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

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

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

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

선택 *에서 (my_table as a cross join my_table) 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. 서브 쿼리

파생 된 스포츠 토토을 지정하는 하위 쿼리는 포함되어야합니다 괄호 및필수스포츠 토토 별명을 할당해야합니다 이름. (보다섹션 7.2.1.2.) 예 :

from (select * from table1) as alias_name

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

7.2.1.4. 테이블 기능

테이블 함수는 행 세트를 생성하는 함수입니다. 기본 데이터 유형 (스칼라 유형) 또는 합성물로 구성 데이터 유형 (테이블 행). 그들은 테이블,보기, 또는 의 하위 퀴어Froma 질문. 스포츠 토토 함수에 의해 반환 된 열은에 포함될 수 있습니다.select, Join또는여기서테이블, 뷰 또는 하위 퀘스트와 같은 방식으로 조항 열.

스포츠 토토 함수가 기본 데이터 유형을 반환하는 경우 단일 결과 열은 함수와 유사합니다. 함수 인 경우 복합 유형을 반환하면 결과 열이 동일하게됩니다. 유형의 개별 속성으로 이름.

테이블 함수는에 별명이 될 수 있습니다.From조항이지만 남을 수도 있습니다 알리 아스. 함수가 사용되는 경우From별명이없는 절, 함수 이름 결과 테이블 이름으로 사용됩니다.

일부 예 :

테이블 foo (FOOD INT, FOOSUBID int, fooname 텍스트) 만들기;

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

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

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

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

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

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

thedblink함수는 a 원격 쿼리 (참조Contrib/DBlink). 반품으로 선언 됨레코드그 이후 모든 종류의 쿼리에 사용될 수 있습니다. 실제 열 세트 구문자가되도록 호출 쿼리에 지정해야합니다. 예를 들어, 무엇을 알고 있습니다*확장.

7.2.2. 그만큼여기서

여기서절 이다

여기서search_condition

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

처리 후From조항이 완료되며, 파생 된 가상 테이블의 각 행은 검색 조건에 대해 확인했습니다. 결과의 결과 조건은 사실입니다. 행은 출력 테이블에 보관됩니다. 그렇지 않으면 (즉, 결과가 False 또는 Null이면) 폐기. 검색 조건은 일반적으로 최소한 참조됩니다 에서 생성 된 테이블의 일부 열From절; 이것은 필요하지 않지만 그렇지 않으면 그만큼어디절은 공정하게됩니다 쓸모 없는.

참고 :|Join구문을 넣어야했습니다 내부 조인 조건에 가입여기서절. 예를 들어,이 테이블 표현은 동일합니다 :

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

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

또는 아마도

자연 조인 B에서 b b.val 5

당신이 사용하는 이들 중 어느 것이 주로 스타일의 문제입니다. 그만큼Join구문의From조항은 아마도 휴대용이 아닐 것입니다 다른 SQL 데이터베이스 관리 시스템. 외부 조인 어쨌든 선택의 여지가 없습니다.From절.on/사용조항 외부 조인은아님A와 동등한여기서조건 행 추가를 결정합니다 (타의 추종없는 입력 행의 경우) 최종 결과에서 행을 제거 할뿐만 아니라

다음은의 몇 가지 예입니다.여기서클로즈 :

선택 ... 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. 주목하십시오 스칼라 하위 쿼리를 값 표현식으로 사용합니다. 어떤 것과 마찬가지로 다른 쿼리, 하위 쿼리는 복잡한 테이블을 사용할 수 있습니다 표현. 또한 어떻게FDTIS 하위 쿼리에서 참조됩니다. 자격C1asfdt.c1전용입니다 필요한 경우C1a 서브 쿼리의 파생 입력 테이블의 열. 하지만 열 이름 자격은 그렇지 않은 경우에도 명확성을 추가합니다. 필요합니다. 이 예제는 열 이름 지정 범위가 외부 쿼리는 내부 쿼리로 확장됩니다.

7.2.3. 그만큼그룹 byClauses

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

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

the그룹 by절은 사용됩니다 동일한 값을 공유하는 테이블로 그 행을 함께 그룹화하십시오. 나열된 모든 열에서. 열이있는 순서 나열된 것은 중요하지 않습니다. 목적은 각 그룹을 줄이는 것입니다 공통 값을 하나의 그룹 행으로 공유하는 행 그룹의 모든 행을 대표합니다. 이것은 끝났습니다 출력 및/또는 계산 골재의 중복성을 제거합니다 이 그룹에 적용됩니다. 예를 들어:

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

두 번째 쿼리에서 우리는 쓸 수 없었습니다선택 *에서 test1 Group by x가 있기 때문입니다 열에 대한 단일 값 없음y각 그룹과 관련 될 수 있습니다. 그룹화 된 열은 할 수 있습니다 알려진 목록에서 참조됩니다. 그룹당 일정한 가치.

일반적으로 테이블이 그룹화되면 사용되지 않는 열 그룹화에서 집계를 제외하고는 참조 할 수 없습니다 표현. 골재 표현이있는 예는 다음과 같습니다.

= X, SOM (Y) X, Test1 Group에서 X;를 선택하십시오.x | 합집합
---+-----
 A |   4
 B |   5
 C |   2
(3 줄)

여기Sum는 집계 함수입니다 이는 전체 그룹에 걸쳐 단일 값을 계산합니다. 더 사용 가능한 집계 기능에 대한 정보는 다음과 같습니다 에서 발견윈 토토 : 문서 :.

팁 :집계 표현이없는 그룹화 a.의 별개의 값 세트를 효과적으로 계산합니다 열. 이것은 또한를 사용하여 달성 할 수 있습니다.별도의절 (참조섹션 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그룹 byList에서만 사용되므로 골재 표현 (Sum (...)), 제품의 판매를 나타냅니다. 각 제품에 대해 쿼리는 제품의 모든 판매에 대한 요약 행을 반환합니다.

엄격한 SQL,그룹 by할 수 있습니다 소스 스포츠 토토의 열별 그룹이지만PostgreSQL허용하도록 이것을 확장합니다그룹 by목록을 선택하십시오. 단순한 대신 가치 표현식으로 그룹화합니다 열 이름도 허용됩니다.

스포츠 토토이 a를 그룹화 한 경우그룹 by조항이지만 특정 그룹 만 관심이 있습니다,절의 캔 a처럼 사용됩니다.여기서절, to 그룹화 된 테이블에서 그룹을 제거하십시오. 구문은 다음과 같습니다.

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

표현절 그룹화 된 표현식과 그룹화되지 않은 것을 참조 할 수 있습니다 표현식 (반드시 집계가 포함됩니다 기능).

예 :

= SOLECT X, SUM (Y) Test1 Group에서 X를 통해 SUM (y) 3;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 이상인 그룹에 대한 출력. 집계 표현이 반드시 쿼리의 모든 부분에서 동일합니다.