[[recursive]With_Query[, ...]]
[모두 | 뚜렷한 [on (표현 [, ...] ) ] ]
* | 표현[[as]output_name] [, ...]
[ 에서from_item[, ...] ]
[ 어디조건]
[그룹 by표현[, ...]]
[hade조건[, ...]]
[ 창문Window_nameas (Window_definition) [, ...]]
[Union | 교차 | [모두 | 별개의 ]롤 토토]
[주문 방법표현[asc | desc | 사용운영자] [nulls 첫 번째 | 마지막 ] [, ...] ]
[ 한계count| 모두 ]
[오프셋시작[행 | 행]]]
[Fetch 첫 번째 | 다음 [count] 행 | 줄 전용]
[update | 키 업데이트 없음 | 공유 | 핵심 공유 [oftable_name[, ...]] [nowait] [...]]여기서from_item다음 중 하나일 수 있습니다.[만]table_name[ * ] [ [ AS ]alias [ ( column_alias[, ...])]]
[측면] (롤 토토) [as]별명 [ ( column_alias [, ...] ) ]
with_query_name[[as]alias [ ( column_alias[, ...])]]]
[측면]function_name ( [ 인수[, ...]) [as]별명 [ ( column_alias [, ...] | column_definition[, ...])]
[측면]함수_이름 ( [ 인수[, ...] ] ) AS (column_definition [, ...] )
from_item[자연]join_type from_item[ 켜짐join_condition| 사용 ( 사용join_column [, ...] ) ]
andWith_Queryis :
with_query_name [ ( column_name[, ...])] as (롤 토토 | 값 | 삽입 | 업데이트 | 삭제)
테이블 [만]테이블_이름 [ * ]롤 토토0 이상에서 행을 검색합니다 테이블. 의 일반적인 처리롤 토토다음과 같습니다.
with목록은입니다 계산. 이들은 효과적으로 임시 테이블 역할을합니다 참조From목록. 에이with두 번 이상 참조되는 쿼리발신는 한 번만 계산됩니다. (보다with clause아래.)
From목록은입니다 계산. (의 각 요소From목록 실제 또는 가상 테이블입니다.) 둘 이상의 요소가 지정된 경우 에서From목록, 그들은 교차 조합입니다 함께. (보다절아래.)
여기서조항이 지정되어 있습니다 조건을 충족하지 않는 행은 산출. (보다여기서 절아래.)
그룹 by조항이 지정되어 있습니다. 출력은 하나 또는 더 많은 가치. 인 경우절은 현재, 주어진 조건을 만족하지 않는 그룹을 제거합니다. 상태. (보다그룹 별 그룹and조항아래.)
실제 출력 행은를 사용하여 계산됩니다.롤 토토선택한 각 행에 대한 출력 표현식 또는 행 그룹. (보다목록 선택아래.)
별도의 선택복제본을 제거합니다 결과의 행.별개의 선택지정된 모든 표현식에서 일치하는 행을 제거합니다.모두 선택(기본값)는 모두를 반환합니다 중복을 포함한 후보 행. (보다고유 한 절아래.)
연산자 사용Union, 교차및제외, 하나 이상의 출력롤 토토진술 단일 결과 세트를 형성하기 위해 결합 할 수 있습니다. 그만큼Union연산자는 하나 또는 하나의 모든 행을 반환합니다 두 결과 세트 모두. 그만큼교차연산자는 두 결과 세트 모두에 엄격하게있는 모든 행을 반환합니다. 그만큼제외운영자는 그 행을 반환합니다 첫 번째 결과 세트에 있지만 두 번째 결과는 아닙니다. 세 가지 모두에서 케이스, 중복 행이 제거되지 않으면all지정되어 있습니다. 소음 단어별도의명시 적으로 지정하도록 추가 할 수 있습니다 중복 행을 제거합니다. 주석별도의비록 기본 동작이지만all기본값은입니다.롤 토토자체. (보다Union 조항, INTERSECT 조항및절을 제외하고아래.)
IF주문 by절이 지정되었습니다. 반환된 행은 지정된 순서로 정렬됩니다. 만약에주문 by이 제공되지 않으면 행이 반환됩니다. 시스템이 가장 빨리 생산할 수 있다고 판단하는 주문. (보다주문별 주문아래.)
Limit(또는첫 번째 페치) 또는오프셋조항이 지정되어 있습니다.선택진술 결과 행의 서브 세트 만 반환합니다. (보다LIMIT 조항아래.)
if업데이트, 키 업데이트 없음, 공유또는KEY SHARE지정되어 있습니다.롤 토토명령문은 선택한 행을 잠그고 있습니다 동시 업데이트. (보다잠금 조항아래.)
당신은 있어야합니다롤 토토각각의 특권 a에 사용 된 열롤 토토명령. 사용 의키 업데이트 없음, 업데이트, 공유또는KEY SHARE요구업데이트권한도 포함됩니다(적어도 하나의 열에 대해). 선택한 각 테이블).
thewith절을 통해 지정할 수 있습니다 이름으로 참조 할 수있는 하나 이상의 하위 쿼리 기본 쿼리. 하위 쿼리는 효과적으로 임시 테이블 역할을합니다 또는 기본 쿼리 지속 시간에 대한 뷰. 각 하위 쿼리는 할 수 있습니다 A롤 토토, 값, 삽입, 업데이트또는삭제진술. 데이터 수정 문을 작성할 때 (삽입, 업데이트또는삭제) inwith, A 포함하는 것이 일반적입니다.반환절. 의 출력입니다.반환, not기본 테이블 성명서가 수정하는 것은 임시 테이블을 형성합니다. 기본 쿼리에서 읽으십시오. 만약에돌아오는 중is 생략, 명세서는 여전히 실행되지만 출력이 없습니다. 따라서 기본 쿼리에 의해 테이블로 참조 할 수 없습니다.
이름 (스키마 자격이없는) 이름은 각각에 대해 지정되어야합니다with쿼리. 선택적으로 열 목록 이름을 지정할 수 있습니다. 이것이 생략되면 열 이름이 있습니다 하위 쿼리에서 추론.
만약재귀지정되어 있습니다.선택서브 쿼리 자체 이름. 그러한 하위 퀘스트에는 양식이 있어야합니다
non_recursive_term유니온 [ 전체 | 별개의 ]recursive_term
재귀적 자기 참조는 오른쪽에 나타나야 합니다. 의 쪽Union. 하나의 재귀 만 자체 참조는 쿼리 당 허용됩니다. 재귀 데이터 수정 진술은 지원되지 않지만 결과를 사용할 수 있습니다. 재귀롤 토토데이터 수정의 쿼리 성명. 보다PostgreSQL : 문서 : 9.3 : 사설 토토와 함께 (공통 테이블 표현식)예.
또 다른 효과재귀with쿼리를 주문할 필요가 없습니다 : 쿼리 나중에 목록에있는 다른 것을 참조 할 수 있습니다. (하지만, 순환 참조 또는 상호 재귀는 구현되지 않습니다.) 없이재귀, with쿼리는 형제 자매 만 참조 할 수 있습니다with이전의 쿼리with목록.
주요 속성with쿼리입니다 기본 쿼리의 실행 당 한 번만 평가됩니다. 기본 쿼리가 두 번 이상 참조하더라도. ~ 안에 특히, 데이터 수정 진술은 실행되도록 보장됩니다 기본 쿼리가 읽는지 여부에 관계없이 한 번만 한 번만 전부 또는 모든 출력.
기본 쿼리 및with쿼리 모두 (개념적으로) 동시에 실행됩니다. 이것은 그것을 암시합니다 데이터 수정 문의 효과with쿼리의 다른 부분에서는 볼 수 없습니다. 읽는 것 외에는반환출력. 그러한 데이터 수정 문이 두 가지를 수정하려고 시도한 경우 같은 행, 결과는 지정되지 않습니다.
From조항은 하나 이상을 지정합니다 소스 테이블선택. 다중 인 경우 출처가 지정되고 결과는 직교 제품입니다 (Cross 모든 출처의 가입). 그러나 일반적으로 자격 조건은 다음과 같습니다 추가 (v.여기서) 반환 된 것을 제한하려면 직교 제품의 작은 부분 집합에 행.
theFrom절을 포함 할 수 있습니다 다음 요소 :
기존 테이블의 이름 (선택적으로 스키마 자격) 또는 보다. 만약에만앞에 지정되어 있습니다 테이블 이름, 해당 테이블 만 스캔됩니다. 만약에전용는 지정되지 않았으며 표 및 모든 것입니다 후손 테이블 (있는 경우)이 스캔됩니다. 선택적으로,*테이블 이름으로 지정할 수 있습니다 명시 적으로 자손 테이블이 포함되어 있음을 나타냅니다.
대체 이름From항목 별칭을 포함합니다. 별명은 간결하거나 제거하기 위해 사용됩니다 selfjoins에 대한 모호성 (동일한 테이블이 다중 스캔되는 곳 타임스). 별칭이 제공되면 실제를 완전히 숨 깁니다. 표 또는 기능의 이름; 예를 들어 주어진FOO에서 foo as f, 나머지롤 토토이것을 참조해야 합니다From항목 asfnotfoo. 별칭을 쓰면 열 별칭 목록을 작성하여 대체 이름을 제공할 수도 있습니다. 이상의 테이블 열.
하위-롤 토토에 나타날 수 있습니다절. 이것은 마치 마치 행동합니다 출력은이 기간 동안 임시 테이블로 생성되었습니다. 하나의롤 토토명령. 주목하십시오 보결-롤 토토주변을 둘러싸고 있어야합니다 괄호 및 별칭필수그것을 제공하십시오. 에이값명령도 여기에서 사용할 수 있습니다.
A with쿼리는 서면으로 참조됩니다 마치 쿼리 이름이 테이블 이름 인 것처럼 이름이 있습니다. (안에 사실,with쿼리는 실제 테이블을 숨 깁니다 기본 쿼리 목적에 대해 동일한 이름입니다. 만약에 필수, 당신은 같은 이름의 실제 테이블을 참조 할 수 있습니다. 스키마-테이블 이름을 알 수 있습니다.) 별명을 제공 할 수 있습니다. 테이블과 마찬가지로.
함수 호출이에 나타날 수 있습니다절. (이것은 결과를 반환하는 함수에 특히 유용합니다. 설정하지만 모든 기능을 사용할 수 있습니다.) 이는 마치 출력인 것처럼 작동합니다. 이번 싱글 기간 동안 임시 테이블로 생성되었습니다.롤 토토명령. 별칭도 사용할 수 있습니다. 별칭이 작성되면 열 별명 목록도 하나 이상의 속성에 대한 대체 이름을 제공합니다. 함수의 복합 반환 유형. 함수가 정의 된 경우 반환대로레코드데이터 유형, 그 다음 별칭 또는 키워드as있어야합니다. 양식의 열 정의 목록이 뒤 따릅니다( column_name data_type [, ... ] ). 열 정의 목록은 일치해야합니다 함수에 의해 반환 된 실제 숫자 및 열 유형.
[내부] 조인
왼쪽 [외부] 조인
오른쪽 [외부] 조인
전체 [외부] 조인
교차 조인
용내부and외부조인 유형, 조인 조건은 다음과 같아야 합니다. 지정됨, 즉 정확히 다음 중 하나임천연, 켜짐join_condition또는사용 ( 사용join_column [, ...]). 의미는 아래를 참조하십시오. 을 위한크로스 조인,이 조항 중 어느 것도 나타날 수 없습니다.
A Join조항 결합 2From편의상 참조할 항목 처럼"테이블", 실제로는 가능하지만 어떤 유형이든From항목. 괄호를 사용하십시오 둥지 순서를 결정하는 데 필요한 경우. 없을 때 괄호,Joins 왼쪽에서 오른쪽으로. ~ 안에 모든 경우Join보다 더 단단히 바인딩합니다 쉼표 분리From-목록 항목.
크로스 조인및내부 조인간단한 직교 제품을 생산합니다 두 테이블을 최상위로 나열하는 것과 동일한 결과 의발신, 그러나 Join에 의해 제한됩니다 조건 (있는 경우).크로스 조인IS 동등한내부 조인 켜짐(TRUE)그건 즉, 제한에 의해 행이 제거되지 않습니다. 이러한 조인 유형은 당신이 할 수 없는 일을 하지 않기 때문에 표기상의 편리함 일반으로and여기서.
왼쪽 외부 조인자격을 갖춘 직교 제품 (즉, 전달하는 모든 결합 행 조건에 가입), 왼쪽 테이블에있는 각 행의 사본 1 개 가입을 통과 한 오른쪽 줄은 없었습니다. 상태. 이 왼쪽 줄은 오른쪽 열에 null 값을 삽입하여 테이블에 결합했습니다. 만 참고Join조항 자체 어떤 행이 일치하는지 결정하는 동안 조건이 고려됩니다. 외부 조건은 나중에 적용됩니다.
반대로오른쪽 외부 조인반환 모든 결합 된 행, 각각의 타의 추종을 불허하는 오른쪽 행에 한 줄 하나 (왼쪽의 널로 연장). 이것은 단지 표기법입니다 편의성, 당신은 그것을 a로 변환 할 수 있기 때문에왼쪽 외부 조인왼쪽과 오른쪽을 전환하여 테이블.
전체 외부 조인결합 된 모든 것을 반환합니다 줄, 각각의 왼쪽 줄에 대한 행 1 행 (연장 오른쪽의 널) (왼쪽의 널로 연장).
join_condition는 표현입니다 유형의 가치 결과부울(유사한여기서절) 조인의 행은 일치하는 것으로 간주됩니다.
양식의 조항사용 중( a, b, ... )on Left_table.a = right_table.a 및 left_table.b = right_table.b .... 또한,사용 중각 쌍 중 하나만 암시합니다 동등한 열의 가입 출력에 포함됩니다. 둘 다.
자연a의 속기입니다.사용두 열의 모든 열을 언급하는 목록 이름이 일치하는 테이블. 공통 컬럼이 없는 경우 이름,천연on true.
the측면키워드가 앞에있을 수 있습니다 보결-롤 토토 From항목. 이것은 서브를 허용합니다.롤 토토참조하다 열로From나타나는 항목 전 전From목록. (없이측면, 각 하위-선택는 독립적으로 평가되므로 할 수 없습니다 기타 교차 참조From항목.)
측면앞에도 a 기능 전화From항목이지만이 경우 함수 표현식이 더 일찍발신어떤 경우에도 항목.
A 측면항목은 최상위로 나타날 수 있습니다 에서From목록 또는 aJoin트리. 후자의 경우에도 참조 할 수 있습니다 A 왼쪽에있는 모든 항목Join오른쪽에 있습니다.
언제From항목 포함측면상호 참조, 평가는 다음과 같이 진행됩니다. 다음과 같습니다.의 각 행에 대해From항목 교차 참조 열 또는 행 세트를 제공합니다 다수의From열을 제공하는 항목, 그만큼측면항목은이를 사용하여 평가됩니다 열 또는 행 세트의 열 값. 결과 행은입니다 그들이 계산 한 행과 평소와 같이 합류했습니다. 이것은 열 소스에서 각 행 또는 행 세트에 대해 반복 테이블 (들).
열 소스 테이블 (들)이어야합니다내부또는왼쪽측면항목은 그렇지 않습니다 각 행 세트를 계산할 잘 정의 된 행 세트 그만큼측면항목. 따라서 a 와 같은 구성X오른쪽 측면 조인Y는 구문 적으로 유효하며 그렇지 않습니다 실제로 허용Y참조X.
선택 사항여기서절은 일반 양식
여기서조건
여기서조건유형의 결과로 평가하는 표현부울. 이 조건을 충족하지 않는 행 출력에서 제거됩니다. 행은 조건을 만족시킵니다 실제 행 값이 대체되면 true가 반환되는 경우 모든 변수 참조.
선택 사항그룹 by절은 일반 양식
그룹 by표현 [, ...]
그룹별단일에 응축됩니다 그룹화 된 동일한 값을 공유하는 모든 선택된 행을 행 표현.표현가 될 수 있습니다 입력 열 이름 또는 출력의 이름 또는 서수 번호 열 (롤 토토목록 항목) 또는 임의 입력-열 값으로부터 형성된 표현. 모호한 경우 a그룹 by이름은 다음으로 해석됩니다 출력 열 이름이 아닌 입력 콜럼 이름.
집계 함수는 사용되는 경우 모든 것에 대해 계산됩니다. 각 그룹을 구성하고 각각에 대해 별도의 값을 생성합니다. 그룹 (없는 동안그룹 by, an 집계는 선택한 모든 것에 걸쳐 계산 된 단일 값을 생성합니다. 줄). 언제그룹 by존재하지 않습니다 유효롤 토토표현식 목록 집계 함수 내 또는 그룹화되지 않은 열은 그룹화 된 것에 따라 기능적으로 의존합니다 열, 그렇지 않으면 둘 이상의 가능성이 있기 때문입니다. 그룹화되지 않은 열에 대한 반환 값. 기능적 의존성 그룹화 된 열 (또는 그 하위 집합)이 기본 인 경우 존재합니다. 그룹화되지 않은 열이 포함 된 테이블 키.
선택 사항절은 일반 양식
조건
어디조건와 동일합니다 에 지정됨어디에서절.
다음을 수행하는 그룹 행을 제거합니다. 조건을 만족하지 않습니다.가지고 있는 중IS 와 다릅니다여기서: 여기서응용 프로그램 이전에 개별 행을 필터링합니다. 의그룹 bywhile다음에 의해 생성된 그룹 행을 필터링합니다.그룹 by. 참조 된 각 열조건명확하게 참조해야합니다 참조가 집계 내에 나타나지 않는 한 그룹화 열 기능.
의 존재쿼리를 돌립니다 없는 경우에도 그룹화 된 쿼리로그룹 에 의해절. 이는 쿼리할 때 발생하는 것과 동일합니다. 집계 함수가 포함되어 있지만 포함되어 있지 않음그룹 에 의해절. 선택된 모든 행은 a를 형성하는 것으로 간주됩니다 단일 그룹 및롤 토토List and절은 참조 만 참조 할 수 있습니다 집계 함수 내의 열. 그러한 쿼리는 a를 방출합니다 단일 행 인 경우조건입니다 사실, 제로 행이 사실이 아니라면
선택사항창절은 일반 양식
창Window_nameas (Window_definition ) [, ...]
여기서Window_name이름입니다 에서 참조 할 수 있습니다.Over조항 또는 후속 창 정의 및window_definitionis
[ 기존_window_name] [파티션표현[, ...]] [주문표현[ASC | desc | 사용연산자] [nulls 첫 번째 | 마지막 ] [, ...] ] [frame_clause ]
IF an기존_window_nameIS 지정된 것은의 이전 항목을 참조해야합니다.창목록; 새 창은 파티셔닝을 복사합니다 해당 항목의 조항 및 주문 조항이있는 경우. ~ 안에 이 경우 새 창이 자체를 지정할 수 없습니다파티션 by조항 및 지정할 수 있습니다주문 by복사 된 창이없는 경우에만 하나. 새 창은 항상 자체 프레임 절을 사용합니다. 복사 창은 프레임 조항을 지정해서는 안됩니다.
의 요소파티션 by목록 a와 거의 같은 방식으로 해석됩니다.그룹 별 그룹를 제외하고 그들은 항상 단순한 표현이며 결코 이름이 아니거나 출력 열의 수. 또 다른 차이점은 이것입니다 표현에는 집계 기능 호출이 포함될 수 있습니다 정기적으로 허용그룹별절. 그들 그룹화 후 윈도우가 발생하기 때문에 여기에서 허용됩니다 집합.
마찬가지로,의 요소와 마찬가지로주문 by목록은 AN의 요소와 거의 같은 방식으로 해석됩니다주문 작성 절, 표현이 항상 간단하게 취해진다는 점을 제외하고 표현식 및 출력 열의 이름 또는 번호는 절대 없습니다.
선택 사항프레임_절정의창 프레임창용 프레임에 의존하는 기능(모두가 그렇지는 않음). 창틀 쿼리의 각 행에 대한 관련 행 집합입니다(현재 행). 그만큼frame_clause
범위 | 줄frame_start범위 | 줄 사이의frame_start그리고frame_end
여기서frame_start및frame_end|
미리 알려지지 않은value선행 현재 행value다음 무한한 추종
ifframe_end생략되었습니다 기본값으로현재 행. 제한이 있습니다 저것frame_start제한 없는 팔로우, frame_end될 수 없습니다미리 알려지지 않은및frame_end선택은 이전에 나타날 수 없습니다 위의 목록보다frame_start선택 - 예를 들어현재 행 사이의 범위 그리고value선행그렇지 않습니다 허용된.
기본 프레임 옵션은입니다.범위 미리 알려지지 않은, 이는와 동일합니다.전례와 현재 행 사이의 범위; 파티션 시작의 모든 행으로 프레임을 설정합니다. 현재 행의 마지막 동료를 통해주문 by주문 (모든 행이있는 경우 모든 행을 의미합니다 아니요주문). 일반적으로미리 알려지지 않은는 프레임이 시작되는 것을 의미합니다 파티션의 첫 번째 줄, 그리고 마찬가지로무한한 추종는 프레임이 다음을 끝내는 것을 의미합니다 파티션의 마지막 줄 (범위또는행모드). 안에행모드,현재 열프레임이 현재 행으로 시작되거나 끝을 의미합니다. 그러나에서범위모드 프레임을 의미합니다 현재 행의 첫 번째 또는 마지막 피어로 시작하거나 끝납니다.주문 by주문. 그만큼value 선행andvalue 다음케이스는 현재 허용됩니다행모드. 그들은 프레임을 나타냅니다 전후에 많은 행을하는 행으로 시작하거나 끝납니다. 현재 행.value반드시 변수를 포함하지 않는 정수 표현식, 집계 함수 또는 창 함수. 값은 null이거나 부정적인; 그러나 현재 행을 선택하는 0일 수 있습니다. 그 자체.
행옵션이 가능합니다 이면 예측할 수없는 결과를 생성합니다.주문 에 의해주문은 행을 고유하게 주문하지 않습니다. 그만큼범위옵션은 행을 보장하도록 설계되었습니다 의 동료입니다.주문 by주문은입니다 똑같이 처리; 두 개의 피어 행은 둘 다 또는 둘 다 액자.
A의 목적창절은 다음과 같습니다 동작을 지정창 함수쿼리의 항목에 나타남목록 선택또는주문별 주문. 이것들 함수는 다음을 참조할 수 있습니다.창절 해당 항목의 이름순 항목Over조항. 에이창절 항목은 다음과 같을 필요는 없습니다. 그러나 어디에서나 참조됩니다. 쿼리에서 사용되지 않으면 그냥 무시했습니다. 아무 것도 없이 윈도우 기능을 사용할 수 있습니다.창창문 이후 전혀 조항 함수 호출은 창 정의를 직접 지정할 수 있습니다Over절. 그러나창조항은 동일한 창에 입력을 저장합니다 둘 이상의 창 함수에 정의가 필요합니다.
the롤 토토목록 (키워드 사이롤 토토및From) 의 출력 행을 형성하는 표현식을 지정합니다.롤 토토진술. 표현은 (보통 do)에서 계산 된 열을 참조하십시오.From절.
테이블에서와 마찬가지로 A의 모든 출력 열이 있습니다.롤 토토이름이 있습니다. 단순하게롤 토토이 이름은 열에 레이블을 붙이는 데 사용됩니다 디스플레이 용이지만선택is 더 큰 쿼리의 하위 쿼리, 이름은 더 큰 쿼리에서 볼 수 있습니다. 하위 쿼리가 생성 한 가상 테이블의 열 이름으로 출력 열에 사용할 이름을 지정하려면 쓰기as output_name칼럼의 표현. (생략 할 수 있습니다as, 그러나 원하는 출력 이름이 일치하지 않는 경우에만PostgreSQL키워드 (참조부록 C). 보호를 위해 향후 키워드 추가에 대해서는 권장됩니다 당신은 항상 쓰기as또는 이중 쿼트 출력 이름.) 열 이름을 지정하지 않으면 이름이 에 의해 자동으로 선택됨PostgreSQL. 열의 표현이 a 간단한 열 참조 그러면 선택한 이름은 그와 동일합니다. 칼럼의 이름. 더 복잡한 경우 함수 또는 유형 이름이 중고 또는 시스템이와 같은 생성 된 이름으로 되돌아 갈 수 있습니다.? 컬럼?.
출력 열 이름을 사용하여 열을 참조 할 수 있습니다. 가치주문and그룹 by클로즈이지만어디또는조항; 거기에서 대신 표현을 작성해야합니다.
표현식 대신,*할 수 있습니다 출력 목록에 모든 열에 대한 속기로 작성되었습니다. 선택된 행. 또한 쓸 수 있습니다table_name.*as 그 테이블에서 나오는 열에 대한 속기. 이것에서 사례로 새 이름을 지정할 수 없습니다.as; 출력 열 이름은 테이블 열 이름.
만약별도의 선택지정되어 있습니다 결과 세트에서 중복 행이 제거됩니다 (한 행은 유지됩니다. 중복의 각 그룹에서).모두 선택반대를 지정합니다. 모든 행은 유지됩니다. 그것은 기본입니다.
별개의 선택 (표현 [, ...] )만 유지합니다 주어진 표현식이 평가되는 각 행 집합의 첫 번째 행 동등하다. 그만큼별개의표현이 있습니다 for와 같은 규칙을 사용하여 해석주문 에 의해(위 참조)."먼저 열"각 세트의 각 세트의 경우 예측할 수 없습니다주문 기준원하는 행을 보장하는 데 사용됩니다 먼저 나타납니다. 예를 들어:
(위치) 위치, 시간, 보고서에서 별개의 선택을 선택하십시오
Weather_Reports에서
위치별로 주문, 시간 desc;
각 위치에 대한 최신 날씨 보고서를 검색합니다. 하지만 우리가 사용하지 않았다면주문 기준강제 각 위치에 대한 내림차순 시간 값, 우리는 각 위치에 대한 예측할 수없는 시간의 보고서.
the구별 ON표현은해야합니다 가장 왼쪽 일치주문 by표현 (들). 그만큼주문 by절에는 일반적으로 다음이 포함됩니다. 원하는 우선 순위를 결정하는 추가 표현식 각각의 행별개의그룹.
theUnion절은이 장군을 가지고 있습니다 형태:
롤 토토_statement유니온 [ 전체 | 별개의 ]롤 토토_statement
롤 토토_statement롤 토토주문 by, Limit, 키 업데이트 없음, 업데이트, 공유또는KEY SHARE절. (주문 에 의해andLimita 괄호로 둘러싸인 경우 하위 표현. 없이 괄호,이 조항은 그만큼Union오른쪽 입력이 아닙니다 표현.)
the유니온운영자는 세트를 계산합니다 관련 줄의 노동 조합롤 토토문장. 행은 두 개의 집합 합집합에 있습니다. 결과 집합 중 하나 이상에 나타나는 경우 결과 집합입니다. 그만큼 둘롤 토토의 직접 피연산자Union생산해야합니다 동일한 수의 열과 해당 열이 호환 데이터 유형.
결과의 결과Union에는 포함되어 있지 않습니다 가 아닌 한 중복 행all옵션 지정됩니다.all제거를 방지합니다 복제. (그러므로,유니온 전체이다 일반적으로 다음보다 훨씬 빠릅니다.Union; 사용전체가능할 때)별개의명시 적으로 지정하도록 작성할 수 있습니다 중복 행을 제거하는 기본 동작.
다중Union동일하게 운영자롤 토토진술은 왼쪽으로 평가됩니다 괄호로 달리 명시되지 않는 한.
현재,키 업데이트 없음, 업데이트, 용 공유하다andKEY SHARE할 수 없습니다 A에 대해 지정Union결과 또는 A의 모든 입력유니온.
theIntersect절은이 장군을 가지고 있습니다 형태:
롤 토토_statement교차 [All | 별개의 ]롤 토토_statement
롤 토토_statement선택다음이 없는 문주문 by, Limit, 키 업데이트 없음, 업데이트, 공유또는KEY SHARE절.
the교차운영자는 세트를 계산합니다 관련 줄의 교차점롤 토토진술. 행이 교차로에 있습니다 두 결과 세트 모두에 나타나면 두 가지 결과 세트.
결과교차그렇지 않습니다 가 아닌 한 중복 행을 포함합니다.all옵션이 지정되어 있습니다. 와 함께all, 그 행 가지다m왼쪽 테이블의 복제 그리고n오른쪽 테이블의 중복 MIN ( 나타납니다.m,n) 결과 세트의 시간 시간.별개의명시 적으로 지정하도록 작성할 수 있습니다 중복 행을 제거하는 기본 동작.
다중Intersect같은롤 토토문은 왼쪽으로 평가됩니다. 괄호로 다르게 지정되지 않는 한 오른쪽으로.교차|Union. 즉,연합 b 교차 c|연합(B 교차 C).
현재,키 업데이트 없음, 업데이트, for 공유하다andKEY SHARE할 수 없습니다 에 대해 지정Intersect결과 또는의 입력에 대해Intersect.
그제외절은이 장군이 있습니다 형태:
롤 토토_statement[모두 | 별개의 ]롤 토토_statement
롤 토토_statement선택다음이 없는 문주문 by, 제한, 키 업데이트 없음, 업데이트, 공유 용또는KEY SHARE절.
the제외연산자 세트를 계산합니다 왼쪽 결과에있는 행선택진술은 오른쪽의 결과는 아닙니다 하나.
결과제외가 포함되어 있지 않습니다 가 아닌 한 중복 행all옵션 지정됩니다. 와 함께all,있는 행m왼쪽 테이블의 복제 및n오른쪽 테이블에 중복됨 최대(로 표시됩니다.m-n, 0) 결과 세트에서 횟수별개의명시 적으로 지정하도록 작성할 수 있습니다 중복 행을 제거하는 기본 동작.
다중제외동일하게 연산자롤 토토명령문은 왼쪽으로 평가됩니다 괄호가 달리 지시하지 않는 한 맞습니다.제외다음과 같은 수준으로 바인딩됩니다.유니온.
현재,키 업데이트 없음, 업데이트, 공유하다andKEY SHARE할 수 없습니다 에 대해 지정제외결과 또는 의 입력에 대해제외.
선택 사항주문 by절은 이것을 가지고 있습니다 일반 양식 :
주문 by표현[ASC | desc | 사용연산자] [nulls 첫 번째 | 마지막 ] [, ...]
the주문 by절로 인해 결과가 발생함 지정된 표현식에 따라 정렬할 행입니다. 두 개라면 행은 가장 왼쪽 표현식에 따라 동일합니다. 다음 표현식 등에 따라 비교됩니다. 그렇다면 지정된 모든 표현식에 따라 동일하면 다음으로 반환됩니다. 구현에 따른 순서입니다.
각표현이름이 될 수 있습니다 또는 출력 열의 서수 번호 (롤 토토목록 항목) 또는 임의의 항목일 수 있습니다. 입력 열 값으로 구성된 표현식입니다.
서수 번호는 서수를 나타냅니다 (왼쪽에서 오른쪽으로) 출력 열의 위치. 이 기능을 사용하면 가능합니다 없는 열을 기준으로 주문을 정의합니다. 독특한 이름. 이것은 절대적으로 필요하지 않습니다 항상를 사용하여 출력 열에 이름을 할당 할 수 있습니다as절.
에서 임의의 표현식을 사용할 수도 있습니다주문 by열을 포함한 절 에 나타나지 않음롤 토토출력 목록. 따라서 다음 진술은 유효합니다.
유통 업체에서 이름을 선택하여 코드별로 주문;
이 기능의 한계는입니다.주문 bya의 결과에 적용되는 절유니온, Intersect, 또는제외절은 다음 항목만 지정할 수 있습니다. 표현식이 아닌 열 이름이나 번호를 출력합니다.
IF an주문 by표현은 간단합니다 출력 열 이름과 입력 열과 일치하는 이름 이름,주문 by이것을 다음과 같이 해석할 것입니다. 출력 열 이름. 이는 선택의 반대입니다.그룹 by같은 상황에서. 이 불일치는 SQL과 호환됩니다. 기준.
선택적으로 키워드를 추가 할 수 있습니다ASC(오름차순) 또는desc(하강) 에서의 표현주문 by절. 그렇지 않다면 지정,ASC기본적으로 가정됩니다. 또는 특정 주문 연산자 이름을 지정할 수 있습니다 에서사용절. 주문 연산자 일부 B- 트리 운영자보다 덜 또는 더 큰 멤버 여야합니다. 가족.ASC일반적으로에 해당합니다.사용 <및desc일반적으로사용. (그러나 사용자 정의 데이터의 제작자 유형은 기본 정렬 순서가 무엇인지 정확히 정의 할 수 있습니다. 다른 이름을 가진 연산자에 해당 할 수 있습니다.)
if널 마지막널 값이 지정되어 있습니다 널 비 널 값을 모두 정렬하십시오. 만약에널 첫 번째지정되어 있고, 널 값은 모든 null 이전에 정렬됩니다 값. 둘 다 지정되지 않으면 기본 동작은입니다.NULL이 마지막임언제ASCis 지정 또는 묵시적,NULL이 먼저임언제desc지정되어 있습니다 (따라서 기본값은 다음과 같습니다 널이 널이 아닌 것보다 더 큰 것처럼 행동하십시오). 언제사용기본 NULLS 순서가 지정되어 있습니다 연산자가 덜 또는 더 큰지에 따라 다릅니다. 연산자.
주문 옵션은 표현에만 적용됩니다. 따르다; 예를 들어X, y desc 주문다음과 같은 의미는 아닙니다주문별 주문 desc, y desc.
문자-스트링 데이터는 콜라이트에 따라 정렬됩니다 정렬되는 열에 적용됩니다. 그것은 필요에 따라 무시할 수 있습니다 a를 포함하여Collate절의 조항표현, 예를 들어MyColumn의 주문 "en_us". 자세한 내용 정보 참조섹션 4.2.10그리고토토 꽁 머니 : 문서 : 9.3 : Collation Support.
theLimit절은 두 가지로 구성됩니다 독립적 인 하위 조명 :
Limit개수| 모두시작
count최대 값을 지정합니다 반환 할 행 수, 동안시작건너 뛰는 행의 수를 지정합니다 줄을 반환하기 전에. 둘 다 지정되면시작시작하기 전에 행이 건너 뜁니다 계산count반품.
count표현 null로 평가하면로 취급됩니다.제한 모두, 즉 제한 없음. 만약에시작null로 평가하면와 동일하게 취급됩니다.오프셋 0.
SQL : 2008은 동일하게 달성하기 위해 다른 구문을 도입했습니다 결과, 어느PostgreSQL또한 지원합니다. 그것은:
오프셋시작행 | 줄개수] 행 | 줄 전용
이 구문에서시작또는count값은 다음에서 필요합니다. 표준은 리터럴 상수, 매개변수 또는 변수 이름입니다. 으로PostgreSQL확장, 기타 표현은 허용되지만 일반적으로 동봉해야합니다. 모호성을 피하기위한 괄호. 만약에counta에서 생략되었습니다.Fetch절, 기본값은 1입니다.Rowand행뿐만 아니라첫 번째and다음이 조항의 영향에 영향을 미치지 않는 소음 단어입니다. 표준에 따르면오프셋조항은 앞에 와야합니다.fetch절 둘 다 존재한다면; 하지만PostgreSQL는 Laxer이며 둘 중 하나입니다 주문하다.
사용시Limit, 좋은 생각입니다 사용 사용주문 기준결과를 고유 한 순서로 결과로 결과. 그렇지 않으면 당신은 얻을 것입니다 쿼리 행의 예측할 수없는 하위 집합 - 당신은 열 번째로 20 줄, 10 ~ 20 행 어떤 주문? 지정하지 않는 한 주문을 모릅니다주문 by.
쿼리 플래너가Limit쿼리 계획을 생성 할 때 계정이므로 무엇에 따라 다른 계획 (다른 행 주문을 생성) 당신은에 사용합니다Limitand오프셋. 따라서 다른 사용Limit/오프셋값으로 쿼리 결과의 다른 서브 세트 선택일관되지 않은 결과를 제공합니다그렇지 않은 경우 다음을 사용하여 예측 가능한 결과 순서를 적용합니다.주문 by. 이것은 버그가 아닙니다. 그것은 타고난 것입니다 SQL이 제공을 약속하지 않는다는 사실의 결과 다음을 제외하고는 특정 순서로 쿼리 결과를 반환합니다.주문순서를 제한하는 데 사용됩니다.
동일한 반복 실행도 가능Limit다른 하위 집합을 반환하는 쿼리 테이블의 행(가 없는 경우)주문 에 의해결정 론적 서브 세트의 선택을 시행합니다. 다시, 이것은 버그가 아닙니다. 결과의 결정론은 단순히 보장되지 않습니다 그런 경우.
업데이트, no 키 업데이트, for share그리고KEY SHAREare잠금 조항; 그들은 방법에 영향을 미칩니다롤 토토잠금 테이블에서 얻은 줄.
잠금 조항에는 일반적인 양식이 있습니다.
for잠금 강도[oftable_name[, ...] ] [ 지금 기다리세요 ]
여기서lock_strength하나 일 수 있습니다 의
업데이트 키 업데이트가 없습니다 공유하다 핵심 공유
업데이트줄을 검색합니다 그만큼롤 토토진술은 다음과 같이 잠겨 있습니다 그러나 업데이트를 위해. 이것은 그들을 수정하지 못하게합니다 현재 트랜잭션이 종료 될 때까지 다른 트랜잭션에 의해 삭제됩니다. 즉, 시도하는 다른 거래업데이트, 삭제, 업데이트 선택, NO를 선택하십시오 키 업데이트, 공유 선택또는키 공유 선택이 행의 것입니다 현재 트랜잭션이 끝날 때까지 차단됩니다. 그만큼업데이트잠금 모드도 획득합니다삭제줄에 그리고 또한업데이트특정 열의 값을 수정합니다. 현재에 고려 된 열 세트업데이트CASE는 고유 한 색인이있는 것입니다 외국 키에 사용할 수있는 것 (따라서 부분 색인 및 표현 적 인덱스는 고려되지 않지만 이는 변경 될 수 있습니다. 미래. 또한,업데이트, 삭제또는선택을 선택하십시오 업데이트다른 트랜잭션에서 이미 선택한 것을 잠겼습니다 행 또는 줄,업데이트 선택기다릴 것입니다 다른 거래가 완료되고 잠금 및 업데이트 된 행을 반환하십시오 (행이 삭제 된 경우 행이 없음). 이내에 에이64697_64714또는SERIALIZALE거래는 오류가 발생합니다 트랜잭션 이후로 잠겨 줄 행이 변경되면 던졌습니다. 시작. 추가 논의는 참조메이저 토토 사이트 : 문서 : 9.3 : 동시성 제어.
키 업데이트 없음비슷하게 동작, 획득 한 자물쇠가 약한 것을 제외하고 :이 잠금 장치는 차단되지 않습니다키 공유 선택시도하는 명령 같은 행에 잠금을 얻습니다. 이 잠금 모드도 획득됩니다 어떤업데이트획득하지 않는업데이트잠금.
공유제외하고 비슷하게 동작합니다 각각의 독점적 잠금이 아닌 공유를 얻는다는 검색된 행. 공유 잠금 장치는 다른 트랜잭션을 차단합니다 실행할 수 있는업데이트, 삭제, 업데이트 선택또는키 업데이트 없음 선택이 행에서, 그러나 그들이 수행하는 것을 막지는 않습니다공유 선택또는선택 주요 공유.
KEY SHARE비슷하게 동작공유, 잠금 장치가 약한 경우를 제외하고 :업데이트를 위해 선택차단되었지만키 업데이트 없음 선택. 키 공유 잠금은 다른 트랜잭션을 수행하지 못하면삭제또는 어떤업데이트키 값을 변경하지만 다른 사람은 아닙니다업데이트키 업데이트 없음 선택, 선택 공유용또는키 선택 공유하다.
운영이 다른 거래를 기다리는 것을 방지합니다. 커밋, 사용nowait옵션. 와 함께nowait,이 명령문은 오류를보고합니다. 선택한 행을 잠글 수없는 경우 기다리는 대신 즉시. 참고nowait만 적용됩니다 로드 레벨 잠금 장치에-필수행 공유하다테이블 레벨 잠금은 여전히 평범한 방식으로 사용됩니다 (참조메이저 토토 사이트 : 문서 : 9.3 : 동시성 제어). 사용할 수 있습니다잠금withnowait옵션 먼저, 테이블 레벨 잠금 장치없이 획득 해야하는 경우 대기 중.
특정 테이블이 잠금 조항에 명명 된 경우 행만 그 테이블에서 나오는 것은 잠겨 있습니다. 에 사용 된 다른 테이블롤 토토평소와 같이 간단히 읽습니다. 잠금 테이블 목록이없는 조항은 성명. 잠금 조항이보기 또는 하위 쿼리에 적용되는 경우 보기 또는 하위 쿼리에 사용되는 모든 테이블에 영향을 미칩니다. 그러나 이것들 조항은 적용되지 않습니다with쿼리 기본 쿼리에 의해 참조됩니다. 행 잠금을 원한다면 A 내에서with쿼리, 잠금을 지정하십시오 내의 조항함께쿼리.
다중 잠금 조항이 필요한 경우 작성할 수 있습니다. 다른 테이블에 대해 다른 잠금 동작을 지정하십시오. 만약 동일한 테이블이 하나 이상의 잠금 조항은 마치 마치 만 지정된 것처럼 처리됩니다. 가장 강한 것. 마찬가지로 테이블은로 처리됩니다.nowait그것이 조항에 지정된 경우 영향을 미칩니다.
잠금 절은 반환된 컨텍스트에서 사용할 수 없습니다. 행은 개별 테이블 행과 명확하게 식별될 수 없습니다. ~을 위한 예를 들어 집계와 함께 사용할 수 없습니다.
잠금 조항이 a의 최상위 레벨에 나타날 때롤 토토쿼리, 잠긴 행이 정확히 있습니다 쿼리에 의해 반환되는 것; 조인 쿼리의 경우 잠긴 행은 반환 된 결합 행에 기여하는 행입니다. ~ 안에 추가, 쿼리 기준으로 쿼리 조건을 만족시키는 행 스냅 샷은 잠겨 있지만 반환되지는 않지만 스냅 샷 이후 업데이트되었고 더 이상 쿼리를 만족하지 않습니다. 정황. aLimit잠금을 사용합니다 한계를 만족시키기 위해 충분한 행이 반환되면 정지합니다 (그러나 줄이 건너 뛰는 줄은오프셋의지 잠겨 있습니다). 마찬가지로, 잠금 조항이 커서에서 사용되는 경우 쿼리, 커서에 의해 실제로 행하는 행만 실제로 가져 오거나 밟았습니다. 잠겨 있습니다.
잠금 조항이 서브에 나타날 때롤 토토, 잠겨있는 행은 그로 반환 된 행입니다 하위 쿼리의 외부 쿼리. 이것은보다 적은 행을 포함 할 수 있습니다 하위 쿼리 만 검사하면 조건이 있기 때문에 제안 할 것입니다 외부 쿼리에서 하위 정체. 예를 들어,
롤 토토 * from (롤 토토 * from mytable for update) ss where col1 = 5;
col1 = 5, 비록 그 조건은 텍스트로 내 안에 있지 않더라도 하위 쿼리.
이전 릴리스가 업그레이드되는 잠금을 유지하지 못했습니다. 나중에 저장 포인트. 예를 들어,이 코드 :
시작; mytable에서 *를 선택하십시오. 여기서 key = 1 업데이트; SavePoint S; mytable set을 업데이트 ... 여기서 key = 1; s; 롤백
보존하지 못할 것입니다업데이트이후의 잠금롤백으로. 이것은 그랬습니다 릴리스 9.3에서 고정
| 주의 |
|
a 가능합니다.롤 토토명령 에서 달리기Committed 읽기거래 격리 수준 및 사용주문 by및 a 순서대로 행을 반환하기위한 잠금 조항. 이건이기 때문입니다.주문 by먼저 적용됩니다. 명령 결과를 정렬하지만 잠금을 얻으려고 차단할 수 있습니다. 하나 이상의 행. 일단롤 토토차단 해제, 주문 열 값 중 일부는 수정 된 행은 순서대로 표시되는 것으로 보입니다. (원래 열 값 측면에서 순서대로 있지만). 이것은를 배치함으로써 필요에 따라 일할 수 있습니다.업데이트/공유하위 쿼리의 조항 예 롤 토토 * from (롤 토토 * from mytable for update) ss order column1; 이것은의 모든 행을 잠그게 할 것임을 주목합니다.mytable, 반면에업데이트상단 레벨에서는 실제로 반환 된 것만 잠겨 있습니다. 줄. 이것은 상당한 성능 차이를 만들 수 있습니다. 특히주문 by결합되었습니다 와 함께Limit또는 기타 제한. 그래서 이것은 기술이 순서의 동시 업데이트 인 경우에만 권장됩니다. 열이 예상되고 엄격하게 정렬 된 결과가 필요합니다. at반복 가능한 읽기또는SERIALIZABLE트랜잭션 격리 수준입니다 직렬화 실패를 유발합니다 (ASQLSTATEof'40001'), 그러니까 이 아래에서는 순서가 잘못된 행을 받을 가능성이 없습니다. 격리 수준. |
테이블에 가입하려면영화테이블과 함께유통 업체:
F.Title, F.Did, D.Name, F.Date_Prod, F.Kind를 선택하십시오
유통 업체 D, 필름 f
여기서 f.did = d.did
제목 | | 이름 | date_prod | 친절한
------------------+-----+-----------------------------------
세 번째 사람 | 101 | 영국 사자 | 1949-12-23 | 드라마
아프리카 여왕 | 101 | 영국 사자 | 1951-08-11 | 로맨틱
...
열을 합산하려면Len73181_73222종류:
SELECT 종류, 합계(len) AS 전체 FROM 영화 GROUP BY 종류; 종류 | 총 --------+------- 액션 | 07:34 코미디 | 02:58 드라마 | 14:28 뮤지컬 | 06:42 로맨틱 | 04:38
열을 합산하려면Len73524_73562종류5 시간 미만의 그룹 총액 :
Total으로 SONT, SUM (LEN)을 선택하십시오
영화에서
친절하게 그룹
합 (Len) <interval '5 시간';
친절 | 총
----------+-------
코미디 | 02:58
낭만적 인 | 04:38
다음 두 예제는 동일하게 정렬하는 방법입니다. 두 번째 열의 내용에 따른 개별 결과 (이름):
유통 업체에서 이름별로 선택하십시오. 배급 자 주문 *을 선택하여 2; | 이름 -----+------------------- 109 | 20 세기 폭스 110 | 바이에른 아틀리에 101 | 영국 사자 107 | 콜롬비아 102 | 장 루크 고다드 113 | 루소 영화 104 | MOSFILM 103 | 최고의 106 | 도호 105 | 연합 예술가 111 | 월트 디즈니 112 | 워너 브라더스 108 | 서부 제국
다음 예제는 테이블의 결합을 얻는 방법을 보여줍니다유통 업체및배우, 결과를 시작한 결과로 제한합니다 각 테이블에 문자 w가 있습니다. 독특한 행만 원합니다 키워드all생략되었습니다.
유통 업체 : 배우 :
| 이름 ID | 이름
-----+-----------------+------------------
108 | 서쪽으로 1 | 우디 앨런
111 | 월트 디즈니 2 | 워렌 비티
112 | 워너 브라더스 3 | 월터 마타 우
... ...
유통 업체를 선택하십시오
유통 업체로부터
장소는 'W%'와 같은 이름
노동 조합
actors.name을 선택하십시오
배우로부터
여기서 행위자. 이름은 'w%';
이름
---------------
월트 디즈니
월터 마타 우
워너 브라더스
워렌 비티
서부 제국
우디 앨런
이 예제는에서 함수를 사용하는 방법을 보여줍니다.From열이 있거나없는 조항 정의 목록 :
기능 분배기 생성 (int) 배급 자 세트를 $$로 반환합니다
배급 자에서 *를 선택하십시오.
$$ 언어 SQL;
배급 자에서 *를 선택하십시오 (111);
| 이름
-----+----------
111 | 월트 디즈니
function distributors_2 (int) 작성 레코드를 $$로 반환합니다
배급 자에서 *를 선택하십시오.
$$ 언어 SQL;
배급소에서 *를 선택하십시오 _2 (111) AS (f1 int, f2 text);
F1 | F2
-----+----------
111 | 월트 디즈니
이 예제는 간단한 사용 방법을 보여줍니다with절 :
t as (
generate_series (1, 3)에서 random ()를 x로 선택하십시오.
))
*에서 *를 선택하십시오
모두
*에서 *를 선택하십시오
엑스
-------------------
0.534150459803641
0.520092216785997
0.0735620250925422
0.534150459803641
0.520092216785997
0.0735620250925422
with쿼리 한 번만 평가하여 두 세트의 세트를 얻었습니다. 랜덤 값.
이 예제재귀to 직원 Mary의 모든 부하 직원 (직접 또는 간접)을 찾으십시오. 그리고 그들의 간접 수준, 직접 부하 직원 :
재귀 적 Epployee_recursive (거리, Employee_name, Manager_Name) AS (
1, Employee_name, manager_name을 선택하십시오
직원으로부터
여기서 manager_name = 'Mary'
모두
er.distance + 1, e.employee_name, e.manager_name을 선택하십시오
Employee_Recursive er, Employee e
er.employee_name = e.manager_name
))
Employee_Recursive의 Employee_name을 선택하십시오.
전형적인 형태의 재귀 쿼리 : 초기 조건, 그 뒤에Union, 이어서 쿼리의 재귀 부분. 재귀 부분이 쿼리는 결국 튜플을 반환하지 않습니다. 그렇지 않으면 쿼리는 무한히 반복합니다. (보다PostgreSQL : 문서 : 9.3 : 사설 토토와 함께 (공통 테이블 표현식)더 많은 예를 보려면)
이 예제측면a
정리 함수get_product_names ()의 각 행 당제조업체테이블 :
M.Name AS MNAME, PNAME를 선택하십시오 제조업체 M, 측면 get_product_names (m.id) pname;
현재 제품이없는 제조업체는 나타나지 않습니다 결과적으로 내부 결합이기 때문에. 우리가 포함시키고 싶었다면 결과에서 그러한 제조업체의 이름, 우리는 할 수 있습니다 :
M.Name AS Mname, Pname을 선택하십시오 제조업체로부터 m 왼쪽에 가입하면 측면 get_product_names (m.id) pname on true;
물론롤 토토문은 다음과 같습니다 SQL 표준과 호환됩니다. 하지만 몇 가지 확장 기능이 있으며 일부 누락된 기능.
PostgreSQL하나를 생략 할 수 있습니다 그만큼From절. 간단합니다 간단한 표현의 결과를 계산하는 데 사용하십시오.
롤 토토 2+2;
?열?
---------
4
다른SQL데이터베이스 더미 한 열 테이블을 소개하는 것 외에는이를 수행 할 수 없습니다. 무엇을 해야하는지선택.
aFrom절은 그렇지 않습니다 지정된 쿼리는 데이터베이스 테이블을 참조 할 수 없습니다. 을 위한 예를 들어 다음 쿼리는 유효하지 않습니다.
유통 업체를 선택하십시오.* 배급자 .name = '서쪽으로';
PostgreSQL이전에 출시됩니다 8.1은이 양식의 쿼리를 수락하고 암시 적 항목을 추가합니다. 쿼리From각 표에 대한 조항 쿼리에 의해 참조됩니다. 이것은 더 이상 허용되지 않습니다.
SQL 표준에서 선택적인 키워드as출력 열 이름 전에 생략 할 수 있습니다 새 열 이름이 유효한 열 이름 일 때마다 예약 된 키워드와 동일).PostgreSQL약간 더 제한적입니다 :as새 열 이름이 필요합니다 예약 여부에 관계없이 모든 키워드와 일치합니다. 권장 연습 사용하는 것입니다as또는 이중 쿼트 출력 열 향후 키워드와의 가능한 충돌을 방지하기 위해 이름 추가.
inFrom항목, 표준 및포스트그레SQL허용asan an 예약되지 않은 키워드. 그러나 이것은 출력 열에 비현실적입니다 구문의 모호성으로 인해 이름.
SQL 표준에는 테이블 이름 주위에 괄호가 필요합니다. 글쓰기전용, 예를 들어선택 *에서만 (tab1), Only (tab2) 어디서 .... 포스트그레SQL이것을 고려합니다 선택 사항이 될 괄호.
포스트그레SQL후행 허용*명시 적으로 지정하도록 작성됩니다 비만아이 포함 행동 테이블. 표준은 이것을 허용하지 않습니다.
(이 점은를 지원하는 모든 SQL 명령에 동일하게 적용전용옵션.)
PostgreSQL함수를 허용합니다 전화를 걸어 전화하십시오.발신목록. SQL 표준에서는 필요합니다 그러한 함수 호출을 서브에서 랩핑하려면롤 토토; 즉, 구문Fromfunc(...) 별명거의 동일합니다측면에서 (롤 토토펑크(...)) 별명. 참고측면는 암시적인 것으로 간주됩니다. 이것은 표준이 필요하기 때문에측면Unnest ()항목 inFrom. PostgreSQL대접Unnest ()다른 설정과 동일합니다 기능.
SQL-92 표준에서는,주문 by조항은 출력 열 이름 또는 숫자 만 사용할 수 있지만 A그룹 by절은 표현 만 사용할 수 있습니다 입력 열 이름에 따라.PostgreSQL이 조항들 각각을 연장합니다 다른 선택도 허용합니다 (그러나 표준을 사용합니다. 모호성이있는 경우 해석).PostgreSQL또한 두 절 모두 지정할 수 있습니다 임의의 표현. 표현식에 나타나는 이름이 나타납니다 항상 출력-컬럼이 아닌 입력 콜럼 이름으로 간주됩니다. 이름.
SQL : 1999 및 나중에는 약간 다른 정의를 사용합니다. SQL-92와 완전히 호환되는 것은 아닙니다. 그러나 대부분의 경우PostgreSQL해석주문 by또는그룹 에 의해SQL:1999와 같은 방식으로 표현됩니다.
클로즈Limit및오프셋are포스트그레SQL-specific 구문, 또한MySQL. SQL:2008 표준에는 조항을 소개했습니다오프셋 ... 페치 첫 번째 | 다음 ...위에 표시된 것과 같은 동일한 기능의 경우제한 조항. 이 구문은 다음에서도 사용됩니다.IBM DB2. (응용 프로그램Oracle관련된 해결 방법을 자주 사용하십시오 자동 생성Rownum열, PostgreSQL에서는 사용할 수 없으며 효과를 구현합니다. 이 조항.)
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| 보안 라벨 | up | 선택 |