A 토토 사이트 추천 표현식테이블을 계산합니다. 토토 사이트 추천 표현식에는발신선택적으로 뒤에 오는 절어디, 그룹별및가지고 있는 중절. 간단한 토토 사이트 추천 표현식 간단히 말해 기본 테이블이라고 하는 디스크의 테이블을 참조할 뿐 더 많은 정보를 제공합니다. 복잡한 표현식을 사용하여 기본 테이블을 수정하거나 결합할 수 있습니다. 다양한 방법으로.
선택사항어디, 그룹별및하빙토토 사이트 추천 표현식의 절은 연속적인 파이프라인을 지정합니다. 에서 파생된 테이블에서 수행된 변환발신절. 이러한 모든 변환은 다음을 생성합니다. 선택 항목에 전달되는 행을 제공하는 가상 테이블 쿼리의 출력 행을 계산하는 목록입니다.
그발신 절에 제공된 하나 이상의 다른 토토 사이트 추천에서 토토 사이트 추천을 파생합니다. 쉼표로 구분된 토토 사이트 추천 참조 목록입니다.
발신토토 사이트 추천_참조 [, 토토 사이트 추천_참조 [, ...]]
토토 사이트 추천 참조는 토토 사이트 추천 이름일 수 있습니다(아마도 스키마 한정) 또는 하위 쿼리와 같은 파생 토토 사이트 추천, a가입구성 또는 복잡한 조합 이것들. 둘 이상의 토토 사이트 추천 참조가에 나열되어 있는 경우발신절, 토토 사이트 추천이 교차 조인되었습니다(즉, 해당 행의 데카르트 곱이 형성됩니다. 아래 참조). 그만큼 의 결과발신목록은 중간입니다. 가상 테이블은 다음에 의해 변환될 수 있습니다.어디에서, 그룹별, 그리고하빙절이며 마지막으로 전체 토토 사이트 추천 표현식의 결과입니다.
테이블 참조가 상위 테이블의 이름을 지정할 때 테이블 상속 계층 구조에서 테이블 참조는 다음 행을 생성합니다. 해당 테이블뿐만 아니라 해당 테이블의 모든 하위 테이블도 마찬가지입니다. 키워드만토토 사이트 추천 이름 앞에 옵니다. 그러나 참조는 명명된 토토 사이트 추천 — 하위 토토 사이트 추천에 추가된 모든 열은 무시됩니다.
글을 쓰는 대신만이전 테이블 이름은 쓸 수 있습니다.*이후 하위 테이블이 다음임을 명시적으로 지정하는 테이블 이름 포함됩니다. 글쓰기*이후에는 필요하지 않습니다. 해당 동작이 기본값입니다(설정을 변경하지 않은 경우). 의sql_inheritance구성 옵션). 그러나 쓰기*추가 토토 사이트 추천이 추가될 것임을 강조하는 데 유용할 수 있습니다. 검색했습니다.
조인된 테이블은 다른 두 개(실제 또는 파생) 특정 조인 유형의 규칙에 따라 테이블. 내부, 외부 및 교차 조인을 사용할 수 있습니다. 일반적인 구문 조인된 테이블은 다음과 같습니다.
T1 join_type T2 [ join_condition ]
모든 유형의 조인은 함께 연결되거나 중첩될 수 있습니다. 또는 둘 다T1그리고T2테이블을 조인할 수 있습니다. 괄호는 다음과 같습니다. 주변에서 사용됨가입제어 절 가입 주문. 괄호가 없으면,가입절은 왼쪽에서 오른쪽으로 중첩됩니다.
조인 유형
T1교차 조인T2
다음의 가능한 모든 행 조합에 대해T1그리고T2(즉, 데카르트 곱), 조인된 토토 사이트 추천에는 행이 포함됩니다. 의 모든 열로 구성됨T1다음에 모든 열이 옵니다.T2. 만약에 토토 사이트 추천에는 각각 N 및 M개의 행이 있으며, 조인된 토토 사이트 추천은 N * M개의 행이 있습니다.
발신T1교차 조인T2다음과 동일함발신T1내부 가입하다T2참으로 설정(아래 참조). 또한 다음과 같습니다.발신T1, T2.
참고:이 후자의 동등성은 정확히 언제 적용되지 않습니다. 두 개 이상의 토토 사이트 추천이 나타납니다. 왜냐하면가입쉼표보다 더 긴밀하게 바인딩됩니다. 예를 들어발신T1교차 조인T2내부 조인T3켜짐조건다음과 동일하지 않습니다발신T1, T2내부 조인T3켜짐조건왜냐하면조건참조 가능T1첫 번째 경우에는 있지만 두 번째 경우에는 그렇지 않습니다.
T1 { [내부] |  왼쪽 | 맞다 | 가득한  [외부]  가입T2켜짐boolean_expression
T1 { [내부] |  왼쪽 | 맞다 | 가득한  [외부]  가입T2사용 중(열 목록 조인 )
T1자연스러운  [내부] |  왼쪽 | 맞다 | 가득한  [OUTER]  가입T2
말씀내부그리고외부모든 형태에서 선택사항입니다.내부기본값입니다.왼쪽, 오른쪽및전체외부 조인을 암시합니다.
그조인 조건다음에 지정됨켜짐또는사용 중절 또는 단어에 의해 암시적으로자연스러운. 조인 조건에 따라 두 소스 테이블의 행이 결정됩니다. 다음으로 간주됩니다."일치", 설명대로 아래에서 자세히 설명합니다.
적격한 조인의 가능한 유형은 다음과 같습니다:
T1의 각 행 R1에 대해 조인된 테이블에는 각 행에 대한 행이 있습니다. R1과의 조인 조건을 만족하는 T2에서.
먼저 내부 조인이 수행됩니다. 그런 다음 T1의 각 행에 대해 T2의 어떤 행과도 조인 조건을 만족하지 않습니다. 행은 T2의 열에 Null 값으로 추가됩니다. 그리하여 합류한 테이블에는 항상 T1의 각 행에 대해 하나 이상의 행이 있습니다.
먼저 내부 조인이 수행됩니다. 그런 다음 T2의 각 행에 대해 T1의 어떤 행과도 조인 조건을 만족하지 않습니다. 행은 T1의 열에 Null 값으로 추가됩니다. 이것은 왼쪽 조인의 반대: 결과 테이블에는 항상 행이 있습니다. T2의 각 행에 대해.
먼저 내부 조인이 수행됩니다. 그런 다음 T1의 각 행에 대해 T2의 어떤 행과도 조인 조건을 만족하지 않습니다. 행은 T2의 열에 Null 값으로 추가됩니다. 또한 각 행마다 T1의 어떤 행과도 조인 조건을 만족하지 않는 T2의 행, T1의 열에 null 값이 있는 조인된 행이 추가됩니다.
그ON절은 가장 일반적인 종류입니다. 조인 조건: 동일한 부울 값 표현식을 사용합니다. a에서 사용되는 종류어디절. 한 쌍 행 수T1그리고T2다음과 일치하는 경우켜짐표현식은 true로 평가됩니다.
그사용 중절은 다음과 같은 약어입니다. 두 가지 모두에 해당하는 특정 상황을 활용할 수 있습니다. 조인 측면에서는 조인 열에 대해 동일한 이름을 사용합니다. 그것 쉼표로 구분된 공유 열 이름 목록을 가져와서 각각에 대한 동등 비교를 포함하는 조인 조건입니다. 예를 들어 가입T1그리고T2함께사용 중 (a, b)조인 조건 생성ONT1.a =T2.a ANDT1.b =T2.b.
또한 다음의 출력은다음을 사용하여 가입중복 열을 억제합니다. 두 열을 모두 인쇄할 필요가 없습니다. 일치하는 열은 동일한 값을 가져야 하기 때문입니다. 하는 동안가입하세요다음의 모든 열을 생성합니다.T1다음의 모든 열이 이어짐T2, 가입 사용나열된 각 열에 대해 하나의 출력 열을 생성합니다. 쌍(나열된 순서대로), 그 뒤에 나머지 열이 옵니다.T1, 그 뒤에 나머지 항목이 옵니다. 의 열T2.
마지막으로,자연스러운는의 약어입니다.사용 중: 그것은 a를 형성합니다사용 중모든 열 이름으로 구성된 목록 두 입력 토토 사이트 추천 모두에 나타납니다. 마찬가지로사용 중, 이 열은 출력에 한 번만 나타납니다. 토토 사이트 추천. 공통 열 이름이 없는 경우,자연 조인다음과 같이 행동합니다가입 ... 사실로 설정, 교차곱 조인을 생성합니다.
참고: 사용 중합리적으로 안전합니다 나열된 것만 이후 조인된 관계의 열 변경에서 열이 결합되었습니다.자연이다 스키마가 두 관계 중 하나로 변경되므로 훨씬 더 위험합니다. 일치하는 새 열 이름이 나타나게 만드는 원인은 다음과 같습니다. 새로운 열도 결합하려면 조인하세요.
이것을 합치려면 토토 사이트 추천이 있다고 가정합니다.t1:
번호 | 이름 -----+------ 1 | 에이 2 | 비 3 | 기음
그리고t2:
번호 | 값 ------+------- 1 | 트리플 엑스 3 | 이야 5 | 쿨쿨
그러면 다양한 조인에 대해 다음과 같은 결과를 얻습니다.
= SELECT * FROM t1 CROSS JOIN t2;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   1 | |   3 | 이야
   1 | |   5 | 쿨쿨
   2 | 비 |   1 | 트리플 엑스
   2 | 비 |   3 | 이야
   2 | 비 |   5 | 쿨쿨
   3 | c |   1 | 트리플 엑스
   3 | c |   3 | 이야
   3 | c |   5 | 쿨쿨
(9행)= SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   3 | c |   3 | 이야
(2행)= SELECT * FROM t1 INNER JOIN t2 USING (num);번호 | 이름 | 값
------+------+-------
   1 | | 트리플 엑스
   3 | c | 이야
(2행)= SELECT * FROM t1 NATURAL INNER JOIN t2;번호 | 이름 | 값
------+------+-------
   1 | | 트리플 엑스
   3 | c | 이야
(2행)= SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   2 | 비 |     |
   3 | c |   3 | 이야
(3행)= SELECT * FROM t1 LEFT JOIN t2 USING (num);번호 | 이름 | 값
------+------+-------
   1 | | 트리플 엑스
   2 | 비 |
   3 | c | 이야
(3행)= SELECT * FROM t1 오른쪽 JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   3 | c |   3 | 이야
     |      |   5 | 쿨쿨
(3행)= SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;번호 | 이름 | 숫자 | 값
------+------+------+-------
   1 | |   1 | 트리플 엑스
   2 | 비 |     |
   3 | c |   3 | 이야
     |      |   5 | 쿨쿨
(4행)
다음으로 지정된 조인 조건ON또한 직접적으로 관련되지 않은 조건을 포함할 수 있습니다. 가입하다. 이는 일부 쿼리에 유용할 수 있지만 신중하게 생각해보세요. 예를 들어:
= SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';번호 | 이름 | 숫자 | 값 ------+------+------+------- 1 | | 1 | 트리플 엑스 2 | 비 | | 3 | c | | (3행)
다음에 제한을 두는 것에 주목하세요.어디절이 다른 결과를 생성합니다.
= SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num WHERE t2.value = 'xxx';번호 | 이름 | 숫자 | 값 ------+------+------+------- 1 | | 1 | 트리플 엑스 (1행)
이것은 다음에 제한이 있기 때문입니다.ON절이 처리되었습니다이전조인, 제한사항 에 배치됨어디에서절이 처리되었습니다이후조인. 그렇죠 내부 조인에서는 중요하지 않지만 외부 조인에서는 매우 중요합니다. 조인합니다.
토토 사이트 추천 및 복잡한 토토 사이트 추천에 임시 이름을 부여할 수 있습니다. 파생 토토 사이트 추천에 대한 참조에 사용되는 참조 나머지 쿼리입니다. 이것을 a라고 합니다.토토 사이트 추천 별명.
테이블 별칭을 생성하려면 다음을 작성하십시오.
발신토토 사이트 추천_참조AS별칭
또는
발신토토 사이트 추천_참조 별칭
그AS키워드는 선택적 노이즈입니다.별칭어떤 식별자든 가능합니다.
테이블 별칭의 일반적인 적용은 짧은 할당입니다 조인 절을 읽기 쉽게 유지하기 위해 긴 테이블 이름에 대한 식별자입니다. 예를 들어:
SELECT * FROM some_very_long_table_name s JOIN another_fairly_long_name a ON s.id = a.num;
별칭은 다음과 같은 테이블 참조의 새 이름이 됩니다. 현재 쿼리가 관련되어 있습니다. 해당 쿼리를 참조하는 것은 허용되지 않습니다. 쿼리의 다른 곳에서 원래 이름으로 테이블을 삭제합니다. 따라서 이는 유효하지 않음:
SELECT * FROM my_table AS m WHERE my_table.a 5; -- 잘못된
테이블 별칭은 주로 표기상의 편의를 위한 것이지만 테이블을 자체적으로 조인할 때 이를 사용하는 데 필요합니다. 예:
SELECT * FROM people AS mother JOIN people AS child ON mother.id = child.mother_id;
또한 테이블 참조가 다음과 같은 경우 별칭이 필요합니다. 하위 쿼리(참조섹션 7.2.1.3).
괄호는 모호성을 해결하는 데 사용됩니다. 다음에서 예를 들어 첫 번째 문은 별칭을 할당합니다.b두 번째 인스턴스로내_토토 사이트 추천, 그러나 두 번째 문은 별칭을 할당합니다. 조인 결과:
SELECT * FROM my_table AS a CROSS JOIN my_table AS b ... SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...
테이블 별칭의 또 다른 형태는 테이블에 임시 이름을 제공합니다. 테이블의 열과 테이블 자체:
발신토토 사이트 추천_참조 [AS] 별칭 ( 열1 [, 열2 [, ...]] )
실제 테이블보다 적은 수의 열 별칭이 지정된 경우 열의 경우 나머지 열의 이름은 바뀌지 않습니다. 이 구문은 특히 셀프 조인이나 하위 쿼리에 유용합니다.
별칭이 a의 출력에 적용될 때가입절, 별칭은 원래 이름을 숨깁니다. 내에서가입. 예를 들어:
SELECT a.* FROM my_table AS a JOIN your_table AS b ON ...
유효한 SQL이지만:
SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c
유효하지 않습니다. 테이블 별칭a아님 별칭 외부에 표시됨c.
파생 테이블을 지정하는 하위 쿼리는 다음으로 묶어야 합니다. 괄호 및반드시수 테이블 별칭 이름을 할당했습니다(예:섹션 7.2.1.2). 예를 들어:
FROM (SELECT * FROM table1) AS alias_name
이 예는 다음과 같습니다.테이블1 AS에서 별칭_이름. 더 흥미로운 사례는 다음과 같이 축소될 수 없습니다. 일반 조인은 하위 쿼리에 그룹화 또는 집합.
하위 쿼리는 다음과 같을 수도 있습니다.값목록:
FROM (VALUES ('앤', '스미스'), ('밥', '존스'), ('조', '블로우'))
     AS 이름(이름, 성)
다시 말하지만, 테이블 별칭이 필요합니다. 별칭 이름을 의 열값목록은 선택사항입니다. 하지만 좋은 습관입니다. 자세한 내용은 참조섹션 7.7.
테이블 함수는 일련의 행을 생성하는 함수입니다. 기본 데이터 유형(스칼라 유형) 또는 복합 데이터 유형 중 하나 (테이블 행). 에서 테이블, 뷰 또는 하위 쿼리처럼 사용됩니다.발신쿼리의 절입니다. 반환된 열 테이블 함수별은 다음에 포함될 수 있습니다.선택, 가입, 또는어디테이블, 뷰, 또는 하위 쿼리 열입니다.
토토 사이트 추천 함수가 기본 데이터 유형을 반환하는 경우 단일 결과 열 이름이 함수 이름과 일치합니다. 함수가 복합 유형의 경우 결과 열은 유형의 개별 속성입니다.
테이블 함수는 다음에서 별칭을 지정할 수 있습니다.발신절이지만 별칭 없이 그대로 둘 수도 있습니다. 만약 함수는에서 사용됩니다.발신다음과 함께 절 별칭이 없으면 함수 이름이 결과 테이블로 사용됩니다. 이름.
일부 예:
CREATE TABLE foo(foid int, foosubid int, fooname 텍스트);
함수 생성 getfoo(int)는 setof foo를 $$로 반환합니다.
    SELECT * FROM foo WHERE fooid = $1;
$$ 언어 SQL;
SELECT * FROM getfoo(1) AS t1;
SELECT * FROM foo에서
    foosubid가 있는 곳(
                        foosid 선택
                        getfoo(foo.foooid) z에서
                        여기서 z.foid = foo.foid
                      );
CREATE VIEW vw_getfoo AS SELECT * FROM getfoo(1);
SELECT * vw_getfoo에서;
어떤 경우에는 테이블 함수를 정의하는 것이 유용합니다. 호출 방법에 따라 다른 열 세트를 반환합니다. 에게 이를 지원하는 경우 테이블 함수는 다음을 반환하도록 선언할 수 있습니다. 유사형기록. 그런 기능이 있을 때 쿼리에 사용되는 경우 예상되는 행 구조는 시스템이 구문 분석 및 계획 방법을 알 수 있도록 쿼리 자체 쿼리. 다음 예를 고려해보세요.
선택 *
    FROM dblink('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc')
      AS t1(이름, prosrc 텍스트)
    'bytea%'와 같은 이름이 있는 곳;
그postgresql : 문서 : 9.3 : 와이즈 토토함수 (의 일부)postgresql : 문서 : 9.3 : 토토 사이트 추천모듈)은 다음을 실행합니다. 원격 쿼리. 복귀를 선언합니다기록이것은 모든 종류의 쿼리에 사용될 수 있기 때문입니다. 실제 열 세트 파서가 알 수 있도록 호출 쿼리에 지정해야 합니다. 예를 들어, 뭐*다음으로 확장되어야 합니다.
다음에 나타나는 하위 쿼리발신될 수 있습니다 키워드 앞에측면. 이것 이전에 제공된 열을 참조할 수 있습니다.발신항목. (없이측면, 각 하위 쿼리는 독립적으로 평가됩니다. 따라서 다른 항목을 상호 참조할 수 없습니다.발신항목.)
다음에 나타나는 테이블 함수발신할 수 있다 키워드 앞에도 와야 합니다.측면, 그러나 기능의 경우 키워드는 선택 사항입니다. 함수의 인수에는 이전에 제공된 열에 대한 참조가 포함될 수 있습니다.발신어쨌든 항목입니다.
A 측면항목이 최상위 수준에 나타날 수 있습니다. 에서발신목록 또는 내부가입나무. 후자의 경우 다음을 참조할 수도 있습니다. a의 왼쪽에 있는 모든 항목가입그것은 오른쪽에 있습니다.
때 a발신항목에 포함측면상호 참조, 평가는 다음과 같이 진행됩니다. 다음과 같습니다.의 각 행에 대해발신항목 상호 참조된 열 또는 행 집합 제공 다수의발신열을 제공하는 항목, 그만큼측면항목은 이를 사용하여 평가됩니다. 행 또는 행 세트의 열 값. 결과 행은 다음과 같습니다. 평소와 같이 계산된 행과 결합됩니다. 이것은 열 소스의 각 행 또는 행 집합에 대해 반복됩니다. 테이블.
사소한 예측면is
SELECT * FROM foo, LATERAL (SELECT * FROM bar WHERE bar.id = foo.bar_id) ss;
이것은 정확히 동일하기 때문에 특별히 유용하지 않습니다. 결과는 더 일반적입니다.
SELECT * FROM foo, bar WHERE bar.id = foo.bar_id;
측면주로 다음과 같은 경우에 유용합니다.
행을 계산하려면 상호 참조 열이 필요합니다.
합류했습니다. 일반적인 애플리케이션은
세트 반환 기능. 예를 들어, 다음과 같이 가정합니다.정점(다각형)정점 집합을 반환합니다.
다각형을 사용하면 다각형의 서로 가까운 꼭지점을 식별할 수 있습니다.
다음을 사용하여 테이블에 저장됩니다.
선택 p1.id, p2.id, v1, v2
FROM 다각형 p1, 다각형 p2,
     측면 정점(p1.poly) v1,
     측면 정점(p2.poly) v2
WHERE (v1 <- v2) < 10 AND p1.id != p2.id;
이 쿼리는 작성할 수도 있습니다.
SELECT p1.id, p2.id, v1, v2
다각형 p1에서 CROSS JOIN LATERAL 정점(p1.poly) v1,
     다각형 p2 CROSS JOIN LATERAL 정점(p2.poly) v2
WHERE (v1 <- v2) < 10 AND p1.id != p2.id;
또는 다른 여러 동등한 공식에서. (이미 그랬듯이 언급된측면키워드는 이 예에서는 불필요하지만 명확성을 위해 사용합니다.)
종종 특히 유용한 경우가 많습니다.왼쪽
가입하다에측면하위 쿼리를 실행하면
다음과 같은 경우에도 소스 행이 결과에 나타납니다.측면하위 쿼리는 해당 행을 생성하지 않습니다. 을 위한
예를 들어, 만약get_product_names()제조업체에서 만든 제품 이름을 반환하지만 일부
우리 테이블의 제조업체는 현재 제품을 생산하지 않습니다.
어떤 것이 다음과 같은지 알아보세요.
선택 m.이름 FROM 제조업체 m LEFT JOIN LATERAL get_product_names(m.id) pname ON true pname이 NULL인 경우;
의 구문은WHERE 절is
어디에서검색_조건
어디에서검색_조건아무거나 값 표현(참조PostgreSQL : 문서 : 9.3 : 값 메이저 토토 사이트식36764_36797부울.
처리 후발신절 완료되면 파생된 가상 테이블의 각 행을 비교하여 확인합니다. 검색조건. 조건의 결과가 참일 경우, 행은 출력 테이블에 유지됩니다. 그렇지 않으면(즉, 결과가 false 또는 null)은 삭제됩니다. 검색 조건은 일반적으로 에서 생성된 테이블의 열을 하나 이상 참조합니다.발신절; 이는 필수는 아니지만 그렇지 않으면어디에서절은 공정할 것입니다 쓸모 없는.
참고:내부 조인의 조인 조건은 다음과 같이 작성할 수 있습니다. 중 하나어디에서절 또는가입절. 예를 들어, 이 토토 사이트 추천은 표현식은 동일합니다:
FROM a, b WHERE a.id = b.id AND b.val 5그리고:
FROM a INNER JOIN b ON (a.id = b.id) WHERE b.val 5또는 어쩌면:
자연 조인 b WHERE b.val 5이들 중 당신이 사용하는 것은 주로 스타일의 문제입니다. 그만큼가입구문발신절은 아마도 다른 SQL로 이식 가능하지 않을 것입니다. 데이터베이스 관리 시스템은 SQL 표준에 속하지만 외부 조인의 경우 선택의 여지가 없습니다. 반드시 다음에서 수행되어야 합니다.발신절. 그만큼켜짐또는사용 중의 절 외부 조인은아님a와 동일함어디에서조건, 왜냐하면 일치하지 않는 입력 행의 경우 다음과 같이 행이 추가됩니다. 최종 결과에서 행을 제거합니다.
다음은 몇 가지 예입니다.어디에서절:
c1 5인 fdt에서 ... 선택 SELECT ... FROM fdt WHERE c1 IN (1, 2, 3) SELECT ... FROM fdt WHERE c1 IN(t2에서 c1 선택) SELECT ... FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) SELECT ... FROM fdt WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100 SELECT ... FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 fdt.c1)
fdt다음에서 파생된 테이블입니다발신절. 충족하지 않는 행 의 검색 조건어디에서절은 에서 제거됨fdt. 의 사용에 주목하세요 스칼라 하위 쿼리를 값 표현식으로 사용합니다. 다른 검색어와 마찬가지로 하위 쿼리는 복잡한 토토 사이트 추천 표현식을 사용할 수 있습니다. 공지 사항도 어떻게fdt은 하위 쿼리에서 참조됩니다. 적격c1asfdt.c1다음의 경우에만 필요합니다.c1또한 파생 입력에 있는 열의 이름입니다. 하위 쿼리의 테이블입니다. 그러나 열 이름을 한정하면 명확성이 높아집니다. 필요하지 않은 경우에도 마찬가지입니다. 이 예에서는 열이 외부 쿼리의 명명 범위는 내부 쿼리로 확장됩니다.
통과 후어디필터, 파생 입력 테이블은 다음을 사용하여 그룹화될 수 있습니다.그룹별절 및 그룹 제거 를 사용하는 행가지고 있는 중절.
선택select_list발신 ...
    [어디에서...]
    그룹 기준grouping_column_reference [, grouping_column_reference]...
그그룹별 절은 테이블에서 다음과 같은 행을 그룹화하는 데 사용됩니다. 나열된 모든 열에 동일한 값이 있습니다. 그 순서는 나열된 열은 중요하지 않습니다. 효과는 결합하는 것입니다. 공통 값을 갖는 각 행 집합을 하나의 그룹 행으로 묶습니다. 그룹의 모든 행을 나타냅니다. 이는 제거하기 위해 수행됩니다. 출력의 중복성 및/또는 적용되는 집계 계산 이 그룹. 예를 들어:
= SELECT * FROM test1;x | 와이 ---+--- | 3 c | 2 비 | 5 | 1 (4행)= test1 GROUP BY x에서 x 선택;x --- 에이 비 기음 (3행)
두 번째 쿼리에서는 쓸 수 없었습니다.SELECT * FROM test1 GROUP BY x, 없기 때문에 열의 단일 값y그럴 수도 있지 각 그룹과 연결됩니다. 그룹화 기준 열은 다음과 같습니다. 선택 목록에는 단일 값이 있으므로 선택 목록에서 참조됩니다. 각 그룹.
일반적으로 토토 사이트 추천이 그룹화되어 있으면 나열되지 않은 열은 안에그룹별다음을 제외하고는 참조할 수 없습니다. 집계 표현. 집계 표현식의 예 이다:
= SELECT x, sum(y) FROM test1 GROUP BY x;x | 합집합 ---+----- | 4 비 | 5 c | 2 (3행)
여기합은 집계 함수입니다. 전체 그룹에 대해 단일 값을 계산합니다. 추가 정보 사용 가능한 집계 함수에 대한 내용은 다음에서 찾을 수 있습니다.섹션 9.20.
팁:집계 표현식 없이 효과적으로 그룹화 열의 고유 값 집합을 계산합니다. 이것은 또한 를 사용하여 달성독특절(참조섹션 7.3.3).
여기 또 다른 예가 있습니다: 각각의 총 판매량을 계산합니다 제품(모든 제품의 총 판매량이 아님):
SELECT product_id, p.name, (sum(s.units) * p.price) AS 판매
    FROM 제품 p LEFT JOIN 판매 s USING (product_id)
    GROUP BY product_id, p.name, p.price;
이 예에서는 열제품_ID, p.이름및p.가격반드시에 있어야 합니다.그룹별절은 다음에서 참조되므로 쿼리 선택 목록(아래 참조). 칼럼s.units다음에 있을 필요는 없습니다.그룹별집합에서만 사용되므로 목록에 표시됩니다. 표현 (합계(...))는 다음을 나타냅니다. 제품 판매. 각 제품에 대해 쿼리는 제품의 모든 판매에 대한 요약 행입니다.
제품 테이블이 다음과 같이 설정되어 있다면,제품_ID이 기본 키라면 다음과 같습니다. 그룹화하기에 충분함제품_ID위에서 예를 들어, 이름과 가격은 다음과 같습니다.기능적으로 종속됨제품 ID 등 이름과 가격 가치에 대해 모호함이 없을 것입니다. 각 제품 ID 그룹에 대해 반환합니다.
엄격한 SQL에서는,그룹별그룹만 가능 소스 토토 사이트 추천의 열을 기준으로 하지만포스트그레SQL또한 허용하도록 확장그룹별선택 항목의 열별로 그룹화 목록. 단순한 열 이름 대신 값 표현식으로 그룹화 또한 허용됩니다.
테이블이 다음을 사용하여 그룹화된 경우그룹 에 의해, 그러나 특정 그룹에만 관심이 있습니다.가지고 있는 중절은 다음과 같이 사용할 수 있습니다.어디절, 결과에서 그룹을 제거합니다. 구문은 다음과 같습니다.
선택select_list발신 ... [어디에서 ...] 그룹 기준 ... HAVINGboolean_expression
의 표현식가지고 있는 중절은 가능 그룹화된 표현식과 그룹화되지 않은 표현식 모두 참조 (반드시 집계 함수가 필요함).
예:
= SELECT x, sum(y) FROM test1 GROUP BY x HAVING sum(y) 3;x | 합집합 ---+----- | 4 비 | 5 (2행)= SELECT x, sum(y) FROM test1 GROUP BY x HAVING x < 'c';x | 합집합 ---+----- | 4 비 | 5 (2행)
다시, 보다 현실적인 예:
SELECT product_id, p.name, (sum(s.units) * (p.price - p.cost)) AS 이익
    FROM 제품 p LEFT JOIN 판매 s USING (product_id)
    WHERE s.date  CURRENT_DATE - 간격 '4주'
    GROUP BY product_id, p.name, p.price, p.cost
    HAVING sum(p.price * s.units)  5000;
위의 예에서,어디에서절 그룹화되지 않은 열을 기준으로 행을 선택하는 경우(표현식 지난 4주 동안의 판매에만 적용됩니다), 반면가지고 있는 중절은 출력을 다음으로 제한합니다. 총 매출이 5000을 넘는 그룹입니다. 표현이 반드시 모든 부분에서 동일할 필요는 없습니다. 쿼리입니다.
쿼리에 집계 함수 호출이 포함되어 있지만 포함되어 있지 않은 경우그룹별절, 그룹화가 계속 발생합니다. 결과 단일 그룹 행입니다(또는 단일 행인 경우 전혀 행이 아닐 수도 있습니다). 그런 다음 다음으로 제거됩니다.가지고 있는 중). 마찬가지다 a가 포함되어 있으면 true가지고 있는 중절, 짝수 집계 함수 호출이 없는 경우 또는그룹 에 의해절.
쿼리에 창 기능이 포함된 경우(참조섹션 3.5, 섹션 9.21그리고섹션 4.2.8), 이러한 함수는 그룹화, 집계 후에 평가됩니다.가지고 있는 중필터링이 수행됩니다. 즉, 만약 쿼리는 모든 집계를 사용합니다.그룹별, 또는가지고 있는 중, 그러면 창 함수는 원래 토토 사이트 추천이 아닌 그룹 행입니다. 행발신/어디에서.
다중 창 기능을 사용하면 모든 창 구문적으로 동등한 함수파티션 기준그리고주문 기준창 정의의 절은 평가가 보장됩니다. 데이터에 대한 단일 전달로. 그러므로 그들은 같은 것을 보게 될 것이다 정렬 순서는 다음과 같은 경우에도 마찬가지입니다.주문 기준그렇습니다 순서를 고유하게 결정하지 않습니다. 그러나 어떠한 보장도 하지 않습니다 서로 다른 기능의 평가에 대해파티션 기준또는주문 기준사양. (이러한 경우 일반적으로 정렬 단계가 필요합니다. 창 함수 평가 패스 사이의 정렬은 다음과 같습니다. 행의 순서를 유지한다고 보장되지는 않습니다.주문 기준동등한 것으로 간주됩니다.)
현재 창 기능에는 항상 미리 정렬된 데이터가 필요하며, 따라서 쿼리 출력은 다음 중 하나에 따라 정렬됩니다. 창 기능'파티션 에 의해/주문 기준절. 그렇지 않다 그러나 이에 의존하는 것이 좋습니다. 명시적인 최상위 수준을 사용하세요.주문 기준절을 확인하려면 결과는 특정 방식으로 정렬됩니다.