| 포스트그레SQL 8.3.23 문서 | ||||
|---|---|---|---|---|
| 이전 | 빠르게 뒤로 | 4장. SQL 구문 | 빨리 감기 | PostgreSQL : 문서 : 8.3 : 토토 커뮤니티 정의 |
값 토토 꽁 머니식은 다음과 같은 다양한 상황에서 사용됩니다. 의 대상 목록에서선택명령, 새 열 값으로삽입또는업데이트또는 검색 조건에서 명령의 수. 값 토토 꽁 머니식의 결과는 때때로 a라고 불렀다스칼라와 구별하기 위해 테이블 토토 꽁 머니식(테이블)의 결과입니다. 가치 따라서 토토 꽁 머니식도 호출됩니다.스칼라 토토 꽁 머니(또는 간단히토토 꽁 머니). 토토 꽁 머니식 구문은 다음을 허용합니다. 산술을 사용하여 기본 부품의 값 계산, 논리, 집합 및 기타 연산.
값 토토 꽁 머니식은 다음 중 하나입니다:
상수 또는 리터럴 값.
열 참조입니다.
본문의 위치 매개변수 참조 함수 정의 또는 준비된 문.
첨자 토토 꽁 머니식입니다.
필드 선택 토토 꽁 머니식입니다.
연산자 호출입니다.
함수 호출입니다.
집계 토토 꽁 머니식.
타입 캐스트.
스칼라 하위 쿼리.
배열 생성자.
행 생성자.
이 목록 외에도 다수의 구성이 있습니다 토토 꽁 머니식으로 분류될 수 있지만 어떤 토토 꽁 머니식도 따르지 않는 일반적인 구문 규칙. 이들은 일반적으로 다음과 같은 의미를 갖습니다. 함수 또는 연산자에 대한 내용은 해당 항목에 설명되어 있습니다. 위치스포츠 토토 : 문서 : 8.3 : 기능 및 연산자. 예는 다음과 같습니다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]
마지막 예의 괄호는 필수입니다. 참조PostgreSQL : 문서 : 8.3 : 토토 사이트자세한 내용은 배열.
식이 복합 유형의 값을 생성하는 경우(행 유형), 다음을 통해 행의 특정 필드를 추출할 수 있습니다. 쓰기
토토 꽁 머니.필드명
일반적으로 행토토 꽁 머니괄호로 묶어야 하지만 토토 꽁 머니식을 선택할 때 괄호를 생략할 수 있습니다. from은 단지 테이블 참조 또는 위치 매개변수입니다. 에 대한 예:
mytable.mycolumn $1.일부열 (행함수(a,b)).col3
(따라서 한정된 열 참조는 실제로 단지 필드 선택 구문의 특별한 경우입니다.)
연산자에는 세 가지 가능한 구문이 있습니다. 호출:
| 토토 꽁 머니 연산자 토토 꽁 머니(바이너리 중위어 연산자) |
| 연산자 토토 꽁 머니(단항 접두사 연산자) |
| 토토 꽁 머니 연산자(단항 접미사 연산자) |
연산자(스키마.운영자 이름)
어떤 특정 연산자가 존재하며 단항 연산자인지 여부 또는 바이너리는 다음에 의해 정의된 연산자에 따라 달라집니다. 시스템 또는 사용자.스포츠 토토 : 문서 : 8.3 : 기능 및 연산자내장 연산자를 설명합니다.
함수 호출의 구문은 함수의 이름입니다 (스키마 이름으로 한정될 수 있음), 그 뒤에 괄호로 묶인 인수 목록:
함수 ([토토 꽁 머니 [, 토토 꽁 머니 ... ]] )
예를 들어, 다음은 다음의 제곱근을 계산합니다. 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.9그리고PostgreSQL :), 집계는 일반적으로 다음 행에 대해 평가됩니다. 하위 쿼리. 그러나 집계의 경우 예외가 발생합니다. 인수에는 외부 수준 변수만 포함됩니다. 그런 다음 가장 가까운 외부 수준에 속하며 평가됩니다. 해당 쿼리의 행에 대해. 집계 토토 꽁 머니식은 다음과 같습니다. 전체는 나타나는 하위 쿼리에 대한 외부 참조입니다. 그 중 하나의 평가에 대해 상수로 작용합니다. 하위 쿼리. 결과에만 나타나는 것에 대한 제한 목록 또는가지고 있는 중절 적용 대상: 집계가 속한 쿼리 수준과 관련하여.
참고: PostgreSQL현재는 지원하지 않습니다독특입력이 두 개 이상인 경우 토토 꽁 머니.
유형 캐스트는 하나의 데이터 유형에서 다음 데이터 유형으로의 변환을 지정합니다. 또 다른.PostgreSQL수락 유형 캐스트에 해당하는 두 가지 구문:
캐스트(토토 꽁 머니AS유형 ) 토토 꽁 머니::유형
그캐스트구문은 SQL을 따릅니다. 구문은::역사적임PostgreSQL사용법.
캐스트가 알려진 값 토토 꽁 머니식에 적용될 때 유형은 런타임 유형 변환을 나타냅니다. 출연진은 적절한 유형 변환 작업이 수행된 경우에만 성공합니다. 정의되었습니다. 이는 의 사용과 미묘하게 다르다는 점에 유의하세요. 다음과 같이 상수로 캐스팅합니다.섹션 4.1.2.5. 장식되지 않은 문자열 리터럴에 적용된 캐스트 리터럴에 대한 유형의 초기 할당을 나타냅니다. 상수 값이므로 모든 유형에 대해 성공합니다(만약 문자열 리터럴의 내용은 다음에 대해 허용되는 입력 구문입니다. 데이터 유형).
명시적인 유형 캐스팅은 일반적으로 없는 경우 생략될 수 있습니다. 값 토토 꽁 머니식이 생성해야 하는 유형에 대한 모호성 (예를 들어 테이블 열에 할당된 경우) 는 이러한 경우 시스템은 자동으로 유형 캐스트를 적용합니다. 단, 자동 시전은 다음과 같은 시전에만 수행됩니다. 표시됨"암시적으로 적용해도 괜찮습니다"에 시스템 카탈로그. 다른 캐스트는 명시적으로 호출해야 합니다. 캐스팅 구문. 이 제한은 다음을 방지하기 위한 것입니다. 자동으로 적용되면서 놀라운 전환이 발생했습니다.
다음을 사용하여 유형 캐스트를 지정하는 것도 가능합니다. 함수형 구문:
유형 이름 ( 토토 꽁 머니 )
그러나 이것은 이름이 다음과 같은 유형에만 작동합니다. 함수 이름으로 유효합니다. 예를 들어,배정밀도이런 식으로 사용할 수는 없지만 동등한float8할 수 있습니다. 또한, 이름간격, 시간및타임스탬프할 수 있다 큰따옴표로 묶인 경우에만 이런 방식으로 사용됩니다. 구문 충돌. 따라서 함수와 같은 사용 캐스트 구문으로 인해 불일치가 발생하므로 아마도 새로운 애플리케이션에서는 피할 수 있습니다.
참고:함수와 유사한 구문은 사실 함수 호출. 두 가지 표준 캐스트 구문 중 하나가 런타임 변환을 수행하는 데 사용되며 내부적으로 등록된 함수를 호출하여 변환을 수행합니다. 작성자: 규칙에 따라 이러한 변환 함수는 동일한 이름을 갖습니다. 출력 유형으로 지정되므로"함수와 유사한 구문"그 이상은 아닙니다 기본 변환 함수를 직접 호출합니다. 물론 이것은 휴대용이 아닙니다. 응용 프로그램은 의존해야합니다. 자세한 내용은 참조PostgreSQL : 문서.
스칼라 하위 쿼리는 일반 쿼리입니다.선택정확하게 반환되는 괄호 안의 쿼리 하나의 행과 하나의 열. (참조스포츠 토토 : 문서 : 8.3 : 쿼리쿼리 작성에 대한 정보.) The선택쿼리가 실행되고 단일이 반환됩니다. value는 주변 값 토토 꽁 머니식에 사용됩니다. 그것은 둘 이상의 행을 반환하는 쿼리를 사용하는 동안 오류가 발생했습니다. 스칼라 하위 쿼리로 하나 이상의 열. (그러나 만약, 그 동안 특정 실행 시 하위 쿼리는 행을 반환하지 않습니다. 오류; 스칼라 결과는 null로 간주됩니다.) 하위 쿼리는 주변 쿼리의 변수를 참조하여 작동합니다. 하위 쿼리를 평가하는 동안 상수로 사용됩니다. 참조 또한PostgreSQL : 문서 : 8.3 : 하위 토토 사이트 추천 표현식용 하위 쿼리와 관련된 다른 토토 꽁 머니식입니다.
예를 들어, 다음은 가장 큰 도시 인구를 찾습니다. 각 주에서:
이름 선택, (도시에서 최대(팝) 선택, WHERE 도시.주 = 주.이름)
상태에서;
배열 생성자는 배열을 만드는 토토 꽁 머니식입니다 해당 구성원 요소의 값에서 값을 얻습니다. 간단한 배열 생성자는 키워드로 구성됩니다.어레이, 왼쪽 대괄호[, 하나 이상의 토토 꽁 머니식(쉼표로 구분) 배열 요소 값의 경우 마지막으로 오른쪽 사각형 브래킷]. 예를 들면:
배열 선택[1,2,3+4]; 배열 --------- 1,2,7
배열 요소 유형은 구성원의 공통 유형입니다. 토토 꽁 머니식은 와 동일한 규칙을 사용하여 결정됩니다.유니온또는사례구조물(참조PostgreSQL :).
배열을 중첩하여 다차원 배열 값을 구축할 수 있습니다. 생성자. 내부 생성자에서 키워드는어레이생략 가능합니다. 예를 들어, 이는 동일한 결과를 생성합니다.
배열 선택[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
결과로부터 배열을 구성하는 것도 가능합니다 하위 쿼리의 이 형식에서는 배열 생성자가 작성됩니다. 키워드로어레이뒤에 괄호로 묶인(괄호로 묶지 않은) 하위 쿼리입니다. 예를 들면:
SELECT ARRAY(SELECT oid FROM pg_proc WHERE proname LIKE 'bytea%');
?열?
------------------------------------------------
2011,1954,1948,1952,1951,1244,1950,2005,1949,1953,2006,31
하위 쿼리는 단일 열을 반환해야 합니다. 결과 1차원 배열은 각 행에 대한 요소를 갖습니다. 하위 쿼리 결과, 요소 유형이 요소 유형과 일치함 하위 쿼리의 출력 열입니다.
다음으로 구축된 배열 값의 첨자어레이항상 1로 시작합니다. 더 알아보기 배열에 대한 자세한 내용은 참조PostgreSQL :.
행 생성자는 행 값을 구성하는 토토 꽁 머니식입니다. 해당 멤버의 값에서 (복합 값이라고도 함) 필드. 행 생성자는 키워드로 구성됩니다.ROW, 왼쪽 괄호, 0개 이상 행 필드 값에 대한 토토 꽁 머니식(쉼표로 구분) 마지막으로 오른쪽 괄호입니다. 예를 들면:
SELECT ROW(1,2.5,'테스트입니다');
핵심 단어ROW다음의 경우 선택사항입니다. 목록에 토토 꽁 머니식이 두 개 이상 있습니다.
행 생성자는 다음 구문을 포함할 수 있습니다.행값.*, 행의 요소 목록으로 확장됩니다. 값은 다음과 같습니다..*구문은 a의 최상위 수준에서 사용됩니다.선택목록. 예를 들어 테이블t열이 있습니다f1그리고f2, 이것들은 동일합니다:
t에서 행 선택(t.*, 42); t에서 행 선택(t.f1, t.f2, 42);
참고:이전PostgreSQL8.2, 그.*구문이 확장되지 않았으므로 쓰기ROW(t.*, 42)두 개의 필드를 생성했습니다 첫 번째 필드가 다른 행 값인 행입니다. 새로운 일반적으로 행동이 더 유용합니다. 오래된 것이 필요하다면 중첩된 행 값의 동작, 내부 행 값 쓰기 없이.*, 예를 들어ROW(t, 42).
기본적으로 a에 의해 생성된 값은ROW토토 꽁 머니식은 익명 레코드 유형입니다. 필요한 경우 명명된 복합 유형으로 캐스팅할 수 있습니다. 테이블의 행 유형 또는로 생성된 복합 유형다음으로 유형 생성. 명시적 캐스트는 다음과 같습니다. 모호함을 피하기 위해 필요합니다. 예를 들면:
테이블 생성 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.20. 행 생성자 에서 설명한 대로 하위 쿼리와 관련하여 사용할 수도 있습니다.PostgreSQL : 문서 : 8.3 : 하위 토토 사이트 추천 표현식.
하위 토토 꽁 머니식의 평가 순서는 정의되지 않았습니다. 에서 특히, 연산자나 함수의 입력은 반드시 왼쪽에서 오른쪽으로 또는 기타 고정된 방향으로 평가됩니다. 주문하세요.
또한, 토토 꽁 머니식의 결과가 다음과 같을 수 있다면 그 중 일부만 평가하여 결정한 다음 다른 부분을 평가하여 결정합니다. 하위 토토 꽁 머니식은 전혀 평가되지 않을 수 있습니다. 예를 들어, 만약 한 사람이 썼습니다:
참 또는 somefunc()을 선택하세요;
그런 다음somefunc()아마도) 전혀 호출되지 않습니다. 한 사람이라도 마찬가지일 것이다. 썼다:
somefunc() 또는 true를 선택하세요.
이것은 왼쪽에서 오른쪽으로와 동일하지 않습니다."단락"부울의 일부 프로그래밍 언어에서 발견되는 연산자입니다.
결과적으로 측면과 함께 함수를 사용하는 것은 현명하지 않습니다. 복잡한 토토 꽁 머니의 일부로 효과. 특히 부작용이나 평가 순서에 의존하는 것은 위험합니다.어디에서그리고가지고 있는 중절, 그 절은 다음과 같습니다. 실행 개발의 일부로 광범위하게 재처리됨 계획. 부울 토토 꽁 머니식(그리고/또는/아님37704_37818
평가 순서를 강제하는 것이 필수적인 경우, 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.3 : 토토 커뮤니티 정의 |
| 어휘 구조 | 위로 | 데이터 정의 |