| 포스트그레SQL 8.4.22 문서 | ||||
|---|---|---|---|---|
| 이전 | 빠르게 뒤로 | 4장. SQL 구문 | 빨리 감기 | PostgreSQL : 문서 : 8.4 : 스포츠 토토 베트맨 정의 |
값 토토 핫식은 다음과 같은 다양한 상황에서 사용됩니다. 의 대상 목록에서선택명령, 새 열 값으로삽입또는업데이트또는 검색 조건에서 명령의 수. 값 토토 핫식의 결과는 때때로 a라고 불렀다스칼라와 구별하기 위해 테이블 토토 핫식(테이블)의 결과입니다. 가치 따라서 토토 핫식도 호출됩니다.스칼라 토토 핫(또는 간단히토토 핫). 토토 핫식 구문은 다음을 허용합니다. 산술을 사용하여 기본 부품의 값 계산, 논리, 집합 및 기타 연산.
값 토토 핫식은 다음 중 하나입니다:
상수 또는 리터럴 값
열 참조
본문의 위치 매개변수 참조 함수 정의 또는 준비된 명령문
첨자 토토 핫식
필드 선택 토토 핫식
연산자 호출
함수 호출
집계 토토 핫식
창 함수 호출
A 유형 캐스트
스칼라 하위 쿼리
배열 생성자
행 생성자
이 목록 외에도 다수의 구성이 있습니다 토토 핫식으로 분류될 수 있지만 어떤 토토 핫식도 따르지 않는 일반적인 구문 규칙. 이들은 일반적으로 다음과 같은 의미를 갖습니다. 함수 또는 연산자에 대한 내용은 해당 항목에 설명되어 있습니다. 위치와이즈 토토 : 문서 : 8.4 : 기능 및 연산자. 예는 다음과 같습니다NULL임절.
우리는 이미 상수에 대해 논의했습니다.섹션 4.1.2. 다음 섹션에서는 나머지 옵션에 대해 설명합니다.
열은 다음 형식으로 참조될 수 있습니다:
상관관계.열 이름
상관관계이름은 테이블(스키마 이름으로 한정될 수 있음) 또는 별칭 a를 통해 정의된 테이블발신절 또는 핵심 단어 중 하나신규또는오래된. (신규그리고오래된재작성 규칙에만 나타날 수 있습니다. 다른 상관 이름은 모든 SQL에서 사용될 수 있습니다. 문.) 상관 이름과 구분 점은 다음과 같습니다. 열 이름이 모든 테이블에서 고유한 경우 생략됩니다. 현재 쿼리에서 사용 중입니다. (또한 참조제7장.)
위치 매개변수 참조는 값을 나타내는 데 사용됩니다. 이는 SQL 문에 외부적으로 제공됩니다. 매개변수는 SQL 함수 정의 및 준비된 쿼리에 사용됩니다. 일부 클라이언트 라이브러리는 데이터 값을 별도로 지정하는 것도 지원합니다. 매개변수가 사용되는 경우 SQL 명령 문자열에서 라인 밖의 데이터 값을 참조합니다. 의 형태 매개변수 참조는 다음과 같습니다.
$번호
예를 들어, 함수의 정의를 생각해 보세요.부서, 다음과 같이:
CREATE FUNCTION 부서(텍스트) RETURNS 부서
AS $$ SELECT * FROM dept WHERE 이름 = $1 $$
언어 SQL;
여기$1다음 값을 참조합니다. 함수가 다음과 같을 때마다 첫 번째 함수 인수 호출되었습니다.
식이 배열 유형의 값을 산출하는 경우, 배열 값의 특정 요소는 다음을 통해 추출할 수 있습니다. 쓰기
토토 핫[아래첨자]
또는 여러 인접 요소(an"배열 슬라이스")를 작성하여 추출할 수 있습니다.
토토 핫[lower_subscript:upper_subscript]
(여기서는 괄호[ ]의미입니다 문자 그대로 나타납니다.) 각아래첨자그 자체가 토토 핫식입니다. 정수 값을 산출해야 합니다.
일반적으로 배열토토 핫괄호로 묶어야 하지만 괄호는 토토 핫식을 생략할 수 있습니다. 아래 첨자는 열 참조 또는 위치 매개변수일 뿐입니다. 또한 원본이 있을 때 여러 첨자를 연결할 수 있습니다. 배열은 다차원입니다. 예를 들면:
mytable.arraycolumn[4] mytable.two_d_column[17][34] $1[10:42] (배열함수(a,b))[42]
마지막 예의 괄호는 필수입니다. 참조토토 사이트 순위 43_96자세한 내용은 배열.
식이 복합 유형의 값을 생성하는 경우(행 유형), 다음을 통해 행의 특정 필드를 추출할 수 있습니다. 쓰기
토토 핫.필드명
일반적으로 행토토 핫17278_17454
mytable.mycolumn $1.일부열 (행함수(a,b)).col3
(따라서 한정된 열 참조는 실제로는 필드 선택 구문의 특별한 경우입니다.) 중요한 특별한 경우는 테이블 열에서 필드를 추출하는 것입니다. 복합 유형:
(compositecol).somefield (mytable.compositecol).somefield
여기에는 이를 표시하기 위해 괄호가 필요합니다.복합 콜열 이름은 테이블이 아닙니다. 이름이나 그 사람마이테이블테이블입니다 두 번째 경우에는 스키마 이름이 아닙니다.
연산자에는 세 가지 가능한 구문이 있습니다. 호출:
| 토토 핫 연산자 토토 핫(바이너리 중위어 연산자) |
| 연산자 토토 핫(단항 접두사 연산자) |
| 토토 핫 연산자(단항 접미사 연산자) |
연산자(스키마.운영자 이름)
어떤 특정 연산자가 존재하며 단항 연산자인지 여부 또는 바이너리는 다음에 의해 정의된 연산자에 따라 달라집니다. 시스템 또는 사용자.와이즈 토토 : 문서 : 8.4 : 기능 및 연산자내장 연산자를 설명합니다.
함수 호출의 구문은 함수의 이름입니다 (스키마 이름으로 한정될 수 있음), 그 뒤에 괄호로 묶인 인수 목록:
함수_이름 ([토토 핫 [, 토토 핫 ... ]] )
예를 들어, 다음은 다음의 제곱근을 계산합니다. 2:
sqrt(2)
내장 함수 목록은 다음에 있습니다.9장. 다른 기능은 다음과 같이 추가할 수 있습니다. 사용자.
안집계 토토 핫식을 나타냄 행 전체에 집계 함수 적용 쿼리로 선택되었습니다. 집계 함수는 여러 항목을 줄입니다. 합계 또는 평균과 같은 단일 출력 값에 대한 입력 입력. 집계 토토 핫식의 구문은 다음 중 하나입니다. 다음:
aggregate_name (토토 핫 [ , ... ] ) aggregate_name(전체토토 핫 [ , ... ] ) aggregate_name(독특토토 핫) aggregate_name ( * )
어디에서aggregate_name은 이전에 정의된 집계(스키마로 한정될 수 있음) 이름) 및토토 핫아무거나 자체적으로 집계를 포함하지 않는 값 토토 핫식 토토 핫식 또는 창 함수 호출.
집계 토토 핫식의 첫 번째 형태는 집계를 호출합니다.
주어진 토토 핫식이 산출되는 모든 입력 행에 걸쳐
null이 아닌 값. (실제로는 집계함수에 달려있습니다.
null 값을 무시할지 여부 — 그러나 모든 표준은
그렇습니다.) 두 번째 형식은 첫 번째 형식과 동일합니다.전체기본값입니다. 세 번째 형태
null이 아닌 모든 고유한 값에 대한 집계를 호출합니다.
입력 행에 있는 토토 핫식입니다. 마지막 양식은
null 또는 null 여부에 관계없이 각 입력 행에 대해 한 번씩 집계됩니다.
널이 아닌 값; 특별한 입력 값이 지정되지 않았기 때문에
일반적으로 다음 경우에만 유용합니다.개수(*)집계 함수.
예를 들어,개수(*)수율 총 입력 행 수;수(f1)입력 행 수를 산출합니다.f1null이 아닙니다.개수(고유 f1)개별 개수를 산출합니다. null이 아닌 값f1.
사전 정의된 집계 함수는 다음에 설명되어 있습니다.섹션 9.18. 기타 집계 기능은 사용자가 추가할 수 있습니다.
집계 토토 핫식은 결과 목록에만 나타날 수 있습니다. 또는가지고 있는 중a의 절선택명령. 다른 곳에서는 금지되어 있습니다 다음과 같은 절어디, 왜냐면 그건 절은 결과가 나오기 전에 논리적으로 평가됩니다. 집계가 형성됩니다.
하위 쿼리에 집계 토토 핫식이 나타나는 경우(참조섹션 4.2.10그리고PostgreSQL :), 집계는 일반적으로 다음 행에 대해 평가됩니다. 하위 쿼리. 그러나 집계의 경우 예외가 발생합니다. 인수에는 외부 수준 변수만 포함됩니다. 그런 다음 가장 가까운 외부 수준에 속하며 평가됩니다. 해당 쿼리의 행에 대해. 집계 토토 핫식은 다음과 같습니다. 전체는 나타나는 하위 쿼리에 대한 외부 참조입니다. 그 중 하나의 평가에 대해 상수로 작용합니다. 하위 쿼리. 결과에만 나타나는 것에 대한 제한 목록 또는가지고 있는절 적용 대상 집계가 속한 쿼리 수준과 관련하여.
참고: PostgreSQL현재는 지원하지 않습니다독특입력이 두 개 이상인 경우 토토 핫.
A 창 함수 호출를 나타냄 일부 부분에 집계형 함수 적용 쿼리에 의해 선택된 행 중 일반 집계와는 다르게 함수 호출은 선택한 그룹화와 관련이 없습니다. 행을 단일 출력 행으로 — 각 행은 개별적으로 유지됩니다. 쿼리 출력. 그러나 창 기능은 스캔할 수 있습니다. 현재 행 그룹의 일부가 될 모든 행 그룹화 사양에 따라 (파티션 기준목록) 창 함수 호출. 창 함수 호출의 구문은 다음 중 하나입니다. 다음:
함수_이름 ([토토 핫 [, 토토 핫 ... ]]) 이상window_name 함수_이름 ([토토 핫 [, 토토 핫 ... ]]) 이상 (window_definition ) 함수_이름( * ) 이상window_name 함수_이름( * ) 이상 (window_definition )
어디에서window_definition있음 구문
[ existing_window_name] [ 파티션 기준토토 핫[, ...] ] [주문 방법토토 핫[ ASC | 설명 | 사용연산자] [ NULLS 첫 번째 | 마지막 ] [, ...] ] [frame_clause ]
및 선택사항frame_clause다음 중 하나일 수 있음
범위 제한 없는 선행 경계가 없는 선행 행과 현재 행 사이의 범위 무한한 선행과 무한한 다음 사이의 범위 행의 경계가 없는 선행 경계가 없는 선행 행과 현재 행 사이의 행 경계 없는 선행과 경계 없는 다음 사이의 행
여기,토토 핫를 나타냄 자체적으로 창을 포함하지 않는 모든 값 토토 핫식 함수 호출.파티션 기준그리고주문 기준목록에는 기본적으로 동일한 구문 및 의미그룹별그리고주문 기준전체의 절 쿼리는 토토 핫식이 항상 다음과 같다는 점을 제외하고는 토토 핫식이며 출력 열 이름이나 숫자일 수 없습니다.window_name는 다음에 대한 참조입니다. 쿼리의에 정의된 명명된 창 사양창절. 또는 전체window_definition내에서 주어질 수 있습니다 괄호(이름이 지정된 항목을 정의할 때와 동일한 구문 사용) 창에서창절; 참조하세요스포츠 토토 : 문서 : 8.4 : select참조 페이지 자세한 내용은. 그 점을 지적할 가치가 있습니다.wname 이상정확히는 다음과 동일하지 않습니다.이상 (wname); 후자는 암시한다 창 정의를 복사하고 수정하면 됩니다. 참조된 창 사양에 다음이 포함된 경우 거부됩니다. 프레임 절.
그프레임_절지정 를 구성하는 행 집합창 프레임, 프레임에 작용하는 창 기능용 전체 파티션 대신. 기본 프레이밍 옵션은 다음과 같습니다.범위가 무한한 선행입니다. 와 동일범위가 무한함 이전 및 현재 행; 그것은 다음을 통해 행을 선택합니다 현재 행의 마지막 피어주문 으로순서(행이 없는 경우 모든 행을 의미함)주문 기준). 옵션제한되지 않은 선행 및 제한되지 않은 사이의 범위 다음그리고제한되지 않은 행 사이 선행 및 무한한 후속또한 동일합니다: 항상 파티션의 모든 행을 선택합니다. 마지막으로,앞으로 바운드되지 않은 행또는 그 장황한 토토 핫제한되지 않은 행 사이 이전 및 현재 행다음까지의 모든 행을 선택하세요. 현재 행(중복 여부에 관계 없음) 이 옵션은 주의하세요 다음과 같은 경우 구현에 따른 결과를 생성할 수 있습니다.주문 기준순서는 행의 순서를 지정하지 않습니다. 독특하게.
내장된 창 기능은 다음에 설명되어 있습니다.표 9-44. 사용자가 다른 창 기능을 추가할 수 있습니다. 또한, 어떤 내장 또는 사용자 정의 집계 함수를 창 기능.
다음을 사용하는 구문*다음 용도로 사용됩니다. 매개변수가 없는 집계 함수를 창 함수로 호출 예를 들어count(*) OVER (PARTITION BY x 주문순서: y). *관습적으로는 그렇지 않습니다. 집계되지 않은 창 기능에 사용됩니다. 집계 창 함수는 일반 집계 함수와 달리 허용되지 않습니다.독특내에서 사용됩니다. 함수 인수 목록.
창 함수 호출은 다음에서만 허용됩니다.선택목록 및주문 으로쿼리의 절.
창 기능에 대한 자세한 내용은 다음에서 찾을 수 있습니다.480060000048006000006000스포츠 토토48006000006000004800500004800600000600000480048005000000006그리고섹션 7.2.4.
유형 변환은 하나의 데이터 유형에서 다음 데이터 유형으로의 변환을 지정합니다. 또 다른.포스트그레SQL수락 유형 캐스트에 해당하는 두 가지 구문:
캐스트(토토 핫AS유형 ) 토토 핫::유형
그캐스트구문은 SQL을 따릅니다. 구문은::역사적임포스트그레SQL사용.
캐스트가 알려진 값 토토 핫식에 적용될 때 유형은 런타임 유형 변환을 나타냅니다. 출연진은 적절한 유형 변환 작업이 수행된 경우에만 성공합니다. 정의되었습니다. 이는 의 사용과 미묘하게 다르다는 점에 유의하세요. 다음과 같이 상수로 캐스팅합니다.섹션 4.1.2.7. 장식되지 않은 문자열 리터럴에 적용된 캐스트 리터럴에 대한 유형의 초기 할당을 나타냅니다. 상수 값이므로 모든 유형에 대해 성공합니다(만약 문자열 리터럴의 내용은 다음에 대해 허용되는 입력 구문입니다. 데이터 유형).
명시적인 유형 캐스팅은 일반적으로 없는 경우 생략될 수 있습니다. 값 토토 핫식이 생성해야 하는 유형에 대한 모호성 (예를 들어 테이블 열에 할당된 경우) 는 이러한 경우 시스템은 자동으로 유형 캐스트를 적용합니다. 단, 자동 시전은 다음과 같은 시전에만 수행됩니다. 표시됨"암시적으로 적용해도 괜찮습니다"에 시스템 카탈로그. 다른 캐스트는 명시적으로 호출해야 합니다. 캐스팅 구문. 이 제한은 다음을 방지하기 위한 것입니다. 자동으로 적용되면서 놀라운 전환이 발생했습니다.
다음을 사용하여 유형 캐스트를 지정하는 것도 가능합니다. 함수형 구문:
유형 이름 ( 토토 핫 )
그러나 이것은 이름이 다음과 같은 유형에 대해서만 작동합니다. 함수 이름으로 유효합니다. 예를 들어,배정밀도이런 식으로 사용할 수는 없지만 동등한float8할 수 있습니다. 또한, 이름간격, 시간및타임스탬프할 수 있다 큰따옴표로 묶인 경우에만 이런 방식으로 사용됩니다. 구문 충돌. 따라서 함수와 같은 사용 캐스트 구문으로 인해 불일치가 발생하므로 아마도 피했다.
참고:함수와 유사한 구문은 사실 단지 함수 호출. 두 가지 표준 캐스트 구문 중 하나가 런타임 변환을 수행하는 데 사용되며 내부적으로 등록된 함수를 호출하여 변환을 수행합니다. 작성자: 규칙에 따라 이러한 변환 함수는 동일한 이름을 갖습니다. 출력 유형으로 지정되므로"함수와 유사한 구문"그 이상은 아닙니다 기본 변환 함수를 직접 호출합니다. 물론 이것은 휴대용이 아닙니다. 응용 프로그램은 의존해야합니다. 자세한 내용은 참조PostgreSQL : 문서.
스칼라 하위 쿼리는 일반적인 것입니다.선택정확하게 반환되는 괄호 안의 쿼리 하나의 행과 하나의 열. (참조와이즈 토토 : 문서 : 8.4 : 쿼리쿼리 작성에 대한 정보.) The선택쿼리가 실행되고 단일이 반환됩니다. value는 주변 값 토토 핫식에 사용됩니다. 그것은 둘 이상의 행을 반환하는 쿼리를 사용하는 동안 오류가 발생했습니다. 스칼라 하위 쿼리로 하나 이상의 열. (그러나 만약, 그 동안 특정 실행 시 하위 쿼리는 행을 반환하지 않습니다. 오류; 스칼라 결과는 null로 간주됩니다.) 하위 쿼리는 주변 쿼리의 변수를 참조하여 작동합니다. 하위 쿼리를 평가하는 동안 상수로 사용됩니다. 참조 또한PostgreSQL : 문서 : 8.4 : 하위 토토 베이 표현식용 하위 쿼리와 관련된 다른 토토 핫식입니다.
예를 들어, 다음은 가장 큰 도시 인구를 찾습니다. 각 주에서:
이름 선택, (도시에서 최대(팝) 선택, WHERE 도시.주 = 주.이름)
상태에서;
배열 생성자는 배열을 만드는 토토 핫식입니다 멤버 요소의 값을 사용하여 값을 지정합니다. 간단한 배열 생성자는 키워드로 구성됩니다.어레이, 왼쪽 대괄호[, 토토 핫식 목록(쉼표로 구분) 배열 요소 값의 경우 마지막으로 오른쪽 사각형 브래킷]. 예를 들면:
배열 선택[1,2,3+4]; 배열 --------- 1,2,7
기본적으로 배열 요소 유형은 다음의 일반적인 유형입니다. 멤버 토토 핫식은 와 동일한 규칙을 사용하여 결정됩니다.유니온또는사례구조물(참조PostgreSQL :). 명시적으로 캐스팅하여 이를 재정의할 수 있습니다. 배열 생성자를 원하는 유형으로 설정합니다. 예를 들면 다음과 같습니다.
배열 선택[1,2,22.7]::정수[]; 배열 ---------- 1,2,23
이것은 각 토토 핫식을 배열 요소 유형을 개별적으로 지정합니다. 캐스팅에 대한 자세한 내용은 다음을 참조하세요.섹션 4.2.9.
다차원 배열 값은 배열을 중첩하여 구축할 수 있습니다. 생성자. 내부 생성자에서 키워드는어레이생략 가능합니다. 예를 들어, 이는 동일한 결과를 생성합니다.
배열 선택[ARRAY[1,2], ARRAY[3,4]];
배열
---------------
1,2,3,4
다차원 배열은 직사각형이어야 하므로 내부 동일한 수준의 생성자는 다음의 하위 배열을 생성해야 합니다. 동일한 치수. 외부에 적용된 모든 캐스트어레이생성자는 다음으로 자동 전파됩니다. 모든 내부 생성자.
다차원 배열 생성자 요소는 무엇이든 될 수 있습니다. sub-뿐만 아니라 적절한 종류의 배열을 생성합니다.어레이구조물. 예를 들면:
테이블 생성 arr(f1 int[], f2 int[]);
INSERT INTO arr VALUES (ARRAY[[1,2],[3,4]], ARRAY[[5,6],[7,8]]);
배열 선택[f1, f2, '9,10,11,12'::int[]] FROM arr;
배열
------------------------------------------------
1,2,3,4,5,6,7,8,9,10,11,12
빈 배열을 구성할 수 있지만 불가능하기 때문에 유형이 없는 배열을 가지려면 명시적으로 캐스팅해야 합니다. 원하는 유형으로 빈 배열을 만듭니다. 예를 들면:
선택 배열[]::integer[]; 배열 -------
결과로부터 배열을 구성하는 것도 가능합니다 하위 쿼리의 이 형식에서는 배열 생성자가 작성됩니다. 키워드로어레이뒤에 괄호로 묶인(괄호로 묶지 않은) 하위 쿼리입니다. 예를 들면:
SELECT ARRAY(SELECT oid FROM pg_proc WHERE proname LIKE 'bytea%');
?열?
------------------------------------------------
2011,1954,1948,1952,1951,1244,1950,2005,1949,1953,2006,31
하위 쿼리는 단일 열을 반환해야 합니다. 결과 1차원 배열은 각 행에 대한 요소를 갖습니다. 하위 쿼리 결과, 요소 유형이 요소 유형과 일치함 하위 쿼리의 출력 열입니다.
행 생성자는 행 값을 구성하는 토토 핫식입니다. (복합 값이라고도 함) 해당 멤버의 값 사용 필드. 행 생성자는 키워드로 구성됩니다.ROW, 왼쪽 괄호, 0개 이상 행 필드 값에 대한 토토 핫식(쉼표로 구분) 마지막으로 오른쪽 괄호입니다. 예를 들면:
SELECT ROW(1,2.5,'테스트입니다');
핵심 단어ROW다음의 경우 선택사항입니다. 목록에 토토 핫식이 두 개 이상 있습니다.
행 생성자는 다음 구문을 포함할 수 있습니다.행값.*, 행의 요소 목록으로 확장됩니다. 값은 다음과 같습니다..*구문은 a의 최상위 수준에서 사용됩니다.선택목록. 예를 들어 테이블t열이 있음f1그리고f2, 이것들은 동일합니다:
t에서 행 선택(t.*, 42); t에서 행 선택(t.f1, t.f2, 42);
참고:이전포스트그레SQL8.2, 그.*구문이 확장되지 않았으므로 쓰기ROW(t.*, 42)두 개의 필드를 생성했습니다 첫 번째 필드가 다른 행 값인 행입니다. 새로운 일반적으로 행동이 더 유용합니다. 오래된 것이 필요하다면 중첩된 행 값의 동작, 내부 행 값 쓰기 없이.*, 예를 들어ROW(t, 42).
기본적으로 a에 의해 생성된 값은ROW토토 핫식은 익명 레코드 유형입니다. 필요한 경우 명명된 복합 유형으로 캐스팅할 수 있습니다. 테이블의 행 유형 또는로 생성된 복합 유형다음으로 유형 생성. 명시적 캐스트는 다음과 같습니다. 모호함을 피하기 위해 필요합니다. 예를 들면:
CREATE TABLE mytable(f1 int, f2 float, f3 text);
CREATE FUNCTION getf1(mytable)은 int AS 'SELECT $1.f1' LANGUAGE SQL을 반환합니다.
-- getf1()이 하나만 존재하므로 캐스트가 필요하지 않습니다.
SELECT getf1(ROW(1,2.5,'이것은 테스트입니다'));
getf1
-------
1
(1줄)
CREATE TYPE myrowtype AS (f1 int, f2 텍스트, f3 숫자);
CREATE FUNCTION getf1(myrowtype) RETURNS int AS 'SELECT $1.f1' LANGUAGE SQL;
-- 이제 호출할 함수를 나타내는 캐스트가 필요합니다.
SELECT getf1(ROW(1,2.5,'이것은 테스트입니다'));
오류: getf1(레코드) 함수가 고유하지 않습니다.
SELECT getf1(ROW(1,2.5,'이것은 테스트입니다.')::mytable);
getf1
-------
1
(1줄)
SELECT getf1(CAST(ROW(11,'이것은 테스트입니다.',2.5) AS myrowtype));
getf1
-------
11
(1행)
행 생성자는 다음과 같은 복합 값을 만드는 데 사용될 수 있습니다. 복합형 테이블 컬럼에 저장되거나 복합 매개변수를 받아들이는 함수. 또한, 그것은 두 행 값을 비교하거나 다음을 사용하여 행을 테스트할 수 있습니다.NULL임또는아님 NULL, 예:
SELECT ROW(1,2.5,'테스트입니다') = ROW(1, 3, '같지 않음'); SELECT ROW(table.*) IS NULL FROM 테이블; -- 모두 null 행을 감지
자세한 내용은 참조섹션 9.21. 행 생성자 에서 설명한 대로 하위 쿼리와 관련하여 사용할 수도 있습니다.PostgreSQL : 문서 : 8.4 : 하위 토토 베이 표현식.
하위 토토 핫식의 평가 순서는 정의되지 않았습니다. 에서 특히, 연산자나 함수의 입력은 반드시 왼쪽에서 오른쪽으로 또는 기타 고정된 방향으로 평가됩니다. 주문하세요.
또한, 토토 핫식의 결과가 다음과 같을 수 있다면 그 중 일부만 평가하여 결정한 다음 다른 부분을 평가하여 결정합니다. 하위 토토 핫식은 전혀 평가되지 않을 수 있습니다. 예를 들어, 만약 한 사람이 썼습니다:
참 OR somefunc()을 선택하세요;
그런 다음somefunc()아마도) 전혀 호출되지 않습니다. 한 사람이라도 마찬가지일 것이다. 썼다:
somefunc() 또는 true를 선택하세요.
이것은 왼쪽에서 오른쪽으로와 동일하지 않습니다."단락"부울의 일부 프로그래밍 언어에서 발견되는 연산자입니다.
결과적으로 측면과 함께 함수를 사용하는 것은 현명하지 않습니다. 복잡한 토토 핫의 일부로 효과. 특히 부작용이나 평가 순서에 의존하는 것은 위험합니다.어디그리고가지고 있는 중절, 그 절은 다음과 같습니다. 실행 개발의 일부로 광범위하게 재처리됨 계획. 부울 토토 핫식(그리고/또는/아님45340_45454
평가 순서를 강제하는 것이 필수적인 경우, a사례구조(참조섹션 9.16)을 사용할 수 있습니다. 에 대한 예를 들어, 이는 회피하려는 신뢰할 수 없는 방법입니다. a에서 0으로 나누기어디에서절:
선택 ... x 0 AND y/x 1.5;
그러나 이것은 안전합니다:
SELECT ... WHERE CASE WHEN x 0 THEN y/x 1.5 ELSE false END;
A 사례이것에 사용된 구성 패션은 최적화 시도를 무산시키므로 필요할 때 수행됩니다. (이 특별한 예에서는 글을 써서 문제를 회피하는 것이 더 좋습니다y 1.5*x대신.)
| 이전 | 집 | PostgreSQL : 문서 : 8.4 : 스포츠 토토 베트맨 정의 |
| 어휘 구조 | 위로 | 데이터 정의 |