값 토토 베이은 다양한 상황에서 사용됩니다. 의 대상 목록에서select명령, 새 열 값으로삽입또는업데이트또는 a의 검색 조건에서 명령 수. 값 토토 베이의 결과는 때때로입니다 a스칼라, 구별 테이블 토토 베이식 (테이블)의 결과. 값 따라서 토토 베이은라고도합니다.스칼라 토토 베이(또는 간단히토토 베이). 토토 베이식 구문이 허용합니다 산술을 사용하여 원시 부품의 값 계산, 논리, 세트 및 기타 작업.
값 토토 베이식은 다음 중 하나입니다.
상수 또는 문자 그대로 값; 보다섹션 1.1.2.
열 참조.
a의 본문에서 위치 매개 변수 참조 기능 선언.
운영자 호출.
함수 호출.
집계 토토 베이.
유형 캐스트.
스칼라 하위 쿼리.
괄호 안의 또 다른 값 토토 베이식, 그룹에 유용합니다 하위 토토 베이 및 우선 순위를 무시합니다.
이 목록 외에도 많은 구성이 있습니다. 그것은 토토 베이으로 분류 될 수 있지만 아무것도 따르지 않습니다. 일반 구문 규칙. 이것들은 일반적으로 a의 의미를 가지고 있습니다 기능 또는 연산자이며 적절한 것으로 설명됩니다 위치와이즈 토토 : 문서 : 7.3 : 기능 및 와이즈 토토. 예는 그만큼is null절.
우리는 이미 상수에 대해 논의했습니다섹션 1.1.2. 그만큼 다음 섹션에서 나머지 옵션에 대해 논의합니다.
열은 양식에서 참조 할 수 있습니다
상관 관계.ColumnName
또는
상관 관계.ColumnName[첨자]
(여기, 괄호[]문자 그대로 나타납니다.)
상관 관계는 a의 이름입니다 테이블 (자격이있을 가능성) 또는 A의 수단From절 또는 키 단어NEW또는old. (NEWandold재 작성 규칙으로 만 표시 될 수 있습니다. 다른 상관 관계 이름은 모든 SQL에서 사용할 수 있습니다. 명령문.) 상관 이름과 분리 점은 다음과 같습니다 열 이름이 모든 테이블에서 고유 한 경우 생략 현재 쿼리에서 사용됩니다. (참조4 장.)
if열배열입니다 유형, 그런 다음 선택 사항첨자특정 요소를 선택하거나 선택합니다 배열의 요소. 첨자가 제공되지 않으면 전체 배열이 선택됩니다. (보다PostgreSQL :배열에 대한 자세한 내용.)
위치 매개 변수 참조는 a를 나타내는 데 사용됩니다 SQL 문에 외부로 제공되는 매개 변수. 매개 변수는 SQL 기능 정의 및 준비에 사용됩니다. 쿼리. 매개 변수 참조의 형태는 다음과 같습니다.
$번호
예를 들어 함수의 정의를 고려하십시오부서
, as
함수 부서 만들기 (텍스트)는 부서를 반환합니다 'select * from dept where where name = $ 1' 언어 SQL;
여기$ 1기능이 호출 될 때의 첫 번째 함수 인수.
연산자에게는 3 개의 가능한 구문이 있습니다 기도:
토토 베이 운영자 토토 베이(바이너리치기 연산자) |
운영자 토토 베이(단수 접두사 연산자) |
토토 베이 운영자(unery postfix 연산자) |
연산자 (스키마.OperatorName)
어떤 특정 사업자가 존재하고 단독인지 여부 또는 이진은 시스템 또는 사용자.와이즈 토토 : 문서 : 7.3 : 기능 및 와이즈 토토내장 운영자를 설명합니다.
함수 호출의 구문은 함수의 이름입니다. (스키마 이름으로 자격이있을 수 있음) 괄호 안에 밀폐 된 인수 목록 :
기능([토토 베이[, 토토 베이 ... ]])
예를 들어, 다음은 제곱근을 계산합니다 2 :
sqrt (2)
내장 기능 목록이6 장. 다른 기능은 추가 할 수 있습니다 사용자.
an집계 토토 베이행에 걸쳐 집계 기능의 적용 쿼리에 의해 선택되었습니다. 집계 함수는 다중 감소를 감소시킵니다 합 또는 평균과 같은 단일 출력 값에 대한 입력 입력. 집계 토토 베이의 구문은 수행원:
Aggregate_name(토토 베이)Aggregate_name(All토토 베이)Aggregate_name(고유 한토토 베이)aggregate_name( *)
여기서Aggregate_nameis 이전에 정의 된 집계 (자격을 갖춘 이름) 및토토 베이모든 값입니다 자체가 아닌 토토 베이은 집계를 포함합니다 토토 베이.
첫 번째 골재 토토 베이 형태는 집계를 호출합니다
주어진 토토 베이식이
널 값이 아닌 값. (실제로는 집계 기능에 달려 있습니다
널 값을 무시할 것인지 아닌지 --- 그러나 모든 표준
두 번째 형태는 첫 번째 형태와 동일합니다.all기본값입니다. 세 번째 형태
모든 뚜렷한 비 널 값에 대한 집계를 호출합니다.
입력 행에서 발견 된 토토 베이. 마지막 양식은 다음을 호출합니다
널 또는 널에 관계없이 각 입력 행에 대해 한 번 집계
null 값이 아닌 값; 특정 입력 값이 지정되지 않으므로
일반적으로에만 유용합니다.count ()
집계 기능.
예를 들어count (*)총 입력 행 수;count (f1)입력 행의 수를 산출합니다.F1is null;count (별개의 f1)고유 한 수를 산출합니다 의 비 널 값F1.
사전 정의 된 집계 함수는에 설명되어 있습니다.섹션 6.14. 다른 집계 사용자가 함수를 추가 할 수 있습니다.
유형 캐스트는 하나의 데이터 유형에서 변환을 지정합니다. 또 다른.PostgreSQL수락 유형 캐스트에 대한 두 개의 동등한 구문 :
cast (토토 베이astype)토토 베이::타입
the캐스트구문은 SQL을 준수합니다. 의 구문::역사적PostgreSQL사용법.
캐스트가 알려진 값의 값 토토 베이에 적용되는 경우 유형, 런타임 유형 변환을 나타냅니다. 캐스트는 할 것이다 적절한 유형 변환 기능이있는 경우에만 성공하십시오 사용 가능. 이것은 사용과 미묘하게 다릅니다. 상수가있는 캐스트,섹션 1.1.2.4. 캐스트가 불완전한 문자 문자 그대로 적용됩니다 문자 그럴에 유형의 초기 할당을 나타냅니다. 일정한 값, 따라서 모든 유형에 대해 성공할 것입니다 ( 문자열 리터럴의 내용은 허용 가능한 입력 구문입니다. 데이터 유형).
명시 적 유형 캐스트는 일반적으로 없으면 생략 할 수 있습니다. 값 토토 베이식이 생성 해야하는 유형에 대한 모호성 (예를 들어, 테이블 열에 할당 될 때); 그만큼 시스템은 이러한 경우에 주조 된 유형을 자동으로 적용합니다. 그러나 자동 캐스팅은 캐스트에 대해서만 수행됩니다. 두드러진"암시 적으로 적용해도"in 시스템이 카탈로그합니다. 다른 캐스트는 명시 적으로 호출되어야합니다 캐스팅 구문. 이 제한은 방지하기위한 것입니다 조용히 적용되는 놀라운 전환.
함수와 같은 구문 :
typename(토토 베이)
그러나 이것은 이름도있는 유형에 대해서만 작동합니다. 함수 이름으로 유효합니다. 예를 들어,이중 정밀이런 식으로 사용할 수는 없지만 동등한float8can. 또한 이름간격, TIME및타임 스탬프can 이 패션에서만 두 번 인용되는 경우에만 사용됩니다. 구문 갈등. 따라서 함수와 같은 사용 캐스트 구문은 불일치로 이어질 것입니다 새로운 응용 프로그램에서는 피합니다. (함수와 같은 구문이 있습니다 사실 기능 호출. 두 표준 캐스트 중 하나 일 때 구문은 런타임 변환을 수행하는 데 사용됩니다. 내부적으로 등록 된 기능을 호출하여 수행합니다 변환. 컨벤션에 따르면, 이러한 전환 기능은 다음과 같습니다 출력 유형과 같은 이름이지만 이것은 휴대용 응용 프로그램은 의존해야합니다.)
스칼라 하위 쿼리는 평범합니다select정확히 반환되는 괄호 안의 쿼리 열 하나의 열이 하나입니다. (보다배트맨 토토 : 문서 : 7.3 : 쿼리쿼리 작성에 대한 정보.)select쿼리가 실행되고 단일이 반환됩니다 값은 주변 값 토토 베이식에 사용됩니다. 그것은 오류는 둘 이상의 행 이상을 반환하는 쿼리를 사용하는 오류입니다. 스칼라 하위 쿼리로서 하나의 열보다. (그러나 만약 특별한 실행, 하위 쿼리는 행이없고, 오류; 스칼라 결과는 널로 사용됩니다.) 하위 쿼리는 주변 쿼리의 변수를 참조하여 작동합니다. 하위 쿼리의 하나의 평가 중 상수로. 보다 또한PostgreSQL : 문서 : 7.3 : 하위 쿼리 사설 토토식.
예를 들어, 다음은 가장 큰 도시 인구를 찾습니다 각 주에서 :
이름을 선택하십시오. 주에서;
하위 토토 베이의 평가 순서는 정의되지 않습니다. ~ 안에 특히, 연산자 또는 함수의 입력은 반드시 왼쪽에서 오른쪽으로 또는 다른 고정에서 평가되었습니다 주문하다.
토토 베이의 결과가있을 수 있다면 그것의 일부만 평가하여 결정한 다음 다른 부분을 평가하여 결정합니다. 하위 토토 베이은 전혀 평가되지 않을 수 있습니다. 예를 들어, if 한 사람은 |
true 또는 somefunc (); 선택
thesomefunc ()전혀 부름받지 않습니다. 하나도 마찬가지입니다 썼다
몇 가지 푸치 () 또는 true;를 선택하십시오.
이것은 왼쪽에서 오른쪽과 동일하지 않다는 점에 유의하십시오"단락"25077_25149
결과적으로 측면과 기능을 사용하는 것은 현명하지 않습니다. 복잡한 토토 베이의 일부로서의 효과. 특히 그렇습니다 부작용 또는 평가 순서에 의존하는 데 위험합니다여기서및그 조항이기 때문에 조항 실행 개발의 일부로 광범위하게 재 처리되었습니다 계획. 부울 토토 베이 (and/또는/아님조합) 그 조항에서 부울 법에 의해 허용되는 모든 방식으로 재구성 대수학.
평가 순서를 강제로 강제하는 것이 필수적이면 ACASE구성 (참조섹션 6.12)를 사용할 수 있습니다. 을 위한 예를 들어, 이것은 피하려고 시도하는 신뢰할 수없는 방법입니다. a에서 분할여기서절 :
선택 ... 여기서 x < 0 및 y/x 1.5;
하지만 안전합니다 :
선택 ... x < 0 일 때의 경우 y/x 1.5 else false end;
aCASE이것에 사용 된 구성 패션은 최적화 시도를 물리 칠 것이므로 필요할 때 완료.
이전 | 홈 | PostgreSQL : 문서 : 7.3 : 토토 꽁 머니 정의 |
SQL 구문 | up | 데이터 정의 |