4.1. 어휘 구조#

SQL 입력은 다음의 시퀀스로 구성됩니다.명령. 명령은 다음의 순서로 구성됩니다.토큰, 세미콜론()으로 종료됨;). 입력 스트림이 끝나면 명령도 종료됩니다. 유효한 토큰은 특정 명령의 구문에 따라 다릅니다.

토큰은 다음과 같습니다.키워드, 안식별자, 아인용된 식별자, 아리터럴(또는 상수) 또는 특수 문자 기호. 토큰은 일반적으로 공백(공백, 탭, 줄 바꿈)으로 구분되지만 모호성이 없는 경우에는 그럴 필요가 없습니다(일반적으로 특수 문자가 다른 토큰 유형에 인접한 경우에만 해당됩니다).

예를 들어, 다음은 (구문적으로) 유효한 SQL 입력입니다:

SELECT * FROM MY_TABLE;
업데이트 MY_TABLE SET A = 5;
MY_TABLE 값에 삽입(3, '안녕하세요');

이것은 한 줄에 하나씩 세 개의 명령으로 구성된 시퀀스입니다(필수는 아니지만 한 줄에 두 개 이상의 명령이 있을 수 있으며 명령은 여러 줄에 걸쳐 유용하게 분할될 수 있습니다).

추가로,댓글SQL 입력에서 발생할 수 있습니다. 이는 토큰이 아니며 사실상 공백과 동일합니다.

SQL 구문은 어떤 토큰이 명령을 식별하는지, 어떤 토큰이 피연산자 또는 매개변수인지에 관해 일관성이 없습니다. 처음 몇 개의 토큰은 일반적으로 명령 이름이므로 위 예에서는 일반적으로 a선택, 안업데이트그리고삽입명령. 그러나 예를 들어업데이트명령에는 항상 다음이 필요합니다.SET특정 위치에 나타나는 토큰과 이 특정 변형삽입또한 다음이 필요합니다완전해지려면. 각 명령의 정확한 구문 규칙은 다음에 설명되어 있습니다.젠 토토 PostgreSQL : 문서 : 18 : Part VI. 참조.

4.1.1. 식별자 및 키워드#

다음과 같은 토큰선택, 업데이트또는위의 예에는 다음의 예가 있습니다.키워드, 즉 SQL 언어에서 고정된 의미를 갖는 단어입니다. 토큰MY_TABLE그리고A다음의 예입니다식별자. 사용되는 명령에 따라 테이블, 열 또는 기타 데이터베이스 개체의 이름을 식별합니다. 따라서 간단히 호출되기도 합니다.이름. 키워드와 식별자는 동일한 어휘 구조를 가지고 있습니다. 즉, 언어를 모르면 토큰이 식별자인지 키워드인지 알 수 없습니다. 전체 키워드 목록은 다음에서 찾을 수 있습니다.부록 C.

SQL 식별자와 키워드는 문자()로 시작해야 합니다a-z, 발음 구별 부호가 있는 문자 및 비라틴어 문자도 포함) 또는 밑줄(_). 식별자 또는 키워드의 후속 문자는 문자, 밑줄, 숫자()일 수 있습니다.0-9) 또는 달러 기호($). SQL 표준 문자에 따라 식별자에는 달러 기호가 허용되지 않으므로 달러 기호를 사용하면 애플리케이션의 이식성이 떨어질 수 있습니다. SQL 표준은 숫자를 포함하거나 밑줄로 시작하거나 끝나는 키워드를 정의하지 않으므로 이 형식의 식별자는 향후 표준 확장과 충돌할 가능성으로부터 안전합니다.

시스템은 다음 이상을 사용하지 않습니다.NAMEDATALEN-1바이트의 식별자. 더 긴 이름은 명령에 쓸 수 있지만 잘립니다. 기본적으로,NAMEDATALEN은 64이므로 최대 식별자 길이는 63바이트입니다. 이 제한에 문제가 있는 경우, 다음을 변경하여 늘릴 수 있습니다.NAMEDATALEN상수src/include/pg_config_manual.h.

키워드와 따옴표가 없는 식별자는 대소문자를 구분하지 않습니다. 그러므로:

MY_TABLE 세트 A 업데이트 = 5;

동등하게 다음과 같이 쓸 수 있습니다.

업데이트 my_Table Set a = 5;

자주 사용되는 관례는 키워드를 대문자로, 이름을 소문자로 쓰는 것입니다. 예:

UPDATE my_table SET a = 5;

두 번째 종류의 식별자가 있습니다: the구분된 식별자또는인용된 식별자. 임의의 문자 시퀀스를 큰따옴표()로 묶어서 구성됩니다."). 구분 식별자는 항상 식별자이지 키워드가 아닙니다. 그래서"선택"이름이 지정된 열이나 테이블을 참조하는 데 사용될 수 있습니다.선택, 반면에 인용되지 않은선택는 키워드로 간주되므로 테이블이나 열 이름이 필요한 곳에 사용하면 구문 분석 오류가 발생합니다. 이 예는 다음과 같이 인용된 식별자를 사용하여 작성할 수 있습니다.

업데이트 "my_table" SET "a" = 5;

인용된 식별자에는 코드 0이 있는 문자를 제외한 모든 문자가 포함될 수 있습니다. (큰따옴표를 포함하려면 큰따옴표 두 개를 쓰십시오.) 이를 통해 공백이나 앰퍼샌드가 포함된 테이블이나 열 이름 등 다른 방법으로는 불가능한 테이블 이름이나 열 이름을 구성할 수 있습니다. 길이 제한은 여전히 ​​적용됩니다.

식별자를 인용하면 대소문자를 구분하는 반면, 인용되지 않은 이름은 항상 소문자로 접혀집니다. 예를 들어 식별자FOO, foo"foo"다음과 같은 것으로 간주됩니다.PostgreSQL하지만"푸"그리고"FOO"이 세 가지와 서로 다릅니다. (따옴표가 없는 이름을 소문자로 접기PostgreSQL은 따옴표가 없는 이름을 대문자로 변환해야 한다는 SQL 표준과 호환되지 않습니다. 따라서,foo다음과 동일해야 합니다"FOO"아님"foo"표준에 따릅니다. 이식 가능한 애플리케이션을 작성하려면 항상 특정 이름을 인용하거나 인용하지 않는 것이 좋습니다.)

따옴표 붙은 식별자의 변형을 사용하면 코드 포인트로 식별되는 이스케이프된 유니코드 문자를 포함할 수 있습니다. 이 변형은 다음으로 시작합니다.유&(대문자 또는 소문자 U 다음에 앰퍼샌드가옴) 여는 큰따옴표 바로 앞, 사이에 공백 없음, 예를 들어U&"foo". (이로 인해 연산자가 모호해집니다.&. 이 문제를 방지하려면 연산자 주위에 공백을 사용하십시오.) 따옴표 안에 유니코드 문자는 백슬래시 뒤에 4자리 16진수 코드 포인트 번호를 작성하거나 백슬래시 뒤에 더하기 기호 뒤에 6자리 16진수 코드 포인트 번호를 작성하여 이스케이프 형식으로 지정할 수 있습니다. 예를 들어 식별자"데이터"다음과 같이 쓸 수 있습니다

U&"d\0061t\+000061"

다음의 덜 사소한 예는 러시아어 단어를 씁니다슬론(코끼리) 키릴 문자:

U&"\0441\043B\043E\043D"

백슬래시와 다른 이스케이프 문자를 원할 경우 다음을 사용하여 지정할 수 있습니다.UESCAPE스포츠 토토 결과 뒤의 절, 예:

U&"d!0061t!+000061" UESCAPE '!'

이스케이프 문자는 16진수, 더하기 기호, 작은따옴표, 큰따옴표 또는 공백 문자를 제외한 모든 단일 문자일 수 있습니다. 이스케이프 문자는 큰따옴표가 아닌 작은따옴표로 작성됩니다.UESCAPE.

식별자에 이스케이프 문자를 문자 그대로 포함하려면 두 번 쓰십시오.

4자리 또는 6자리 이스케이프 형식을 사용하여 UTF-16 서로게이트 쌍을 지정하여 U+FFFF보다 큰 코드 포인트로 문자를 구성할 수 있지만, 6자리 형식을 사용할 수 있으므로 기술적으로는 이것이 필요하지 않습니다. (대리 쌍은 직접 저장되지 않고 단일 코드 포인트로 결합됩니다.)

서버 인코딩이 utf-8이 아닌 경우, 이러한 이스케이프 시퀀스 중 하나로 식별되는 유니코드 코드 포인트는 실제 서버 인코딩으로 변환됩니다. 불가능할 경우 오류가 보고됩니다.

4.1.2. 상수#

세 가지 종류가 있습니다암시적으로 유형이 지정된 상수inPostgreSQL: 스포츠 토토 결과, 비트 스포츠 토토 결과 및 숫자. 명시적 유형을 사용하여 상수를 지정할 수도 있으며, 이를 통해 시스템에서 보다 정확하게 표현하고 보다 효율적으로 처리할 수 있습니다. 이러한 대안은 다음 하위 섹션에서 논의됩니다.

4.1.2.1. 스포츠 토토 결과 상수#

SQL의 스포츠 토토 결과 상수는 작은따옴표()로 묶인 임의의 문자 시퀀스입니다.'), 예를 들어'이것은 스포츠 토토 결과입니다'. 스포츠 토토 결과 상수 내에 작은따옴표 문자를 포함하려면 두 개의 인접한 작은따옴표를 쓰십시오(예:'다이앤'의 말'. 참고하세요아님큰따옴표 문자와 동일(").

공백으로만 구분된 두 개의 스포츠 토토 결과 상수적어도 하나의 줄 바꿈 포함은 스포츠 토토 결과이 하나의 상수로 작성된 것처럼 연결되어 효과적으로 처리됩니다. 예를 들어:

'foo' 선택
'술집';

다음과 같습니다:

'foobar' 선택;

그러나:

'foo' '바' 선택;

은 유효한 구문이 아닙니다. (이 약간 기괴한 동작은 다음에 의해 지정됩니다.SQL; PostgreSQL표준을 따르고 있습니다.)

4.1.2.2. C 스타일 이스케이프를 사용한 스포츠 토토 결과 상수#

포스트그레SQL또한 허용탈출스포츠 토토 결과 상수는 SQL 표준의 확장입니다. 이스케이프 스포츠 토토 결과 상수는 문자를 작성하여 지정됩니다.E(대문자 또는 소문자) 여는 작은따옴표 바로 앞, 예:이푸'. (행 전체에 걸쳐 이스케이프 스포츠 토토 결과 상수를 계속하는 경우 다음과 같이 작성하십시오.E첫 번째 여는 따옴표 앞에만.) 이스케이프 스포츠 토토 결과 내에서 백슬래시 문자(\)는 C와 유사한 시작백슬래시 이스케이프시퀀스, 여기서 백슬래시와 다음 문자의 조합은 다음과 같이 특수 바이트 값을 나타냅니다.표 4.1.

표 4.1. 백슬래시 이스케이프 시퀀스

백슬래시 이스케이프 시퀀스 해석
\b 백스페이스
\f 양식 피드
\n 개행
\r 캐리지 리턴
\t
\o, \oo, \오우 (o = 0–7) 8진수 바이트 값
\xh, \x (h= 0–9, A–F) 16진수 바이트 값
\uxxxx, \Uxxxxxxxx (x= 0–9, A–F) 16 또는 32비트 16진수 유니코드 문자 값

백슬래시 뒤에 오는 다른 모든 문자는 문자 그대로 간주됩니다. 따라서 백슬래시 문자를 포함하려면 두 개의 백슬래시(\\). 또한 다음과 같이 작성하여 이스케이프 스포츠 토토 결과에 작은따옴표를 포함할 수 있습니다.\', 일반적인 방법 외에''.

특히 8진수 또는 16진수 이스케이프를 사용할 때 생성한 바이트 시퀀스가 ​​서버 문자 집합 인코딩에서 유효한 문자를 구성하는 것은 귀하의 책임입니다. 유용한 대안은 유니코드 이스케이프 또는 대체 유니코드 이스케이프 구문을 사용하는 것입니다.섹션 4.1.2.3; 그러면 서버는 문자 변환이 가능한지 확인합니다.

주의

구성 매개변수인 경우standard_conforming_stringsis꺼짐그러면PostgreSQL은 일반 및 이스케이프 스포츠 토토 결과 상수 모두에서 백슬래시 이스케이프를 인식합니다. 그러나 현재로서는PostgreSQL9.1, 기본값은켜짐, 즉 백슬래시 이스케이프는 이스케이프 스포츠 토토 결과 상수에서만 인식됩니다. 이 동작은 표준을 더 잘 준수하지만 백슬래시 이스케이프가 항상 인식되었던 기록 동작에 의존하는 애플리케이션을 중단시킬 수 있습니다. 해결 방법으로 이 매개변수를 다음과 같이 설정할 수 있습니다.꺼짐, 하지만 백슬래시 이스케이프 사용을 피하는 것이 좋습니다. 특수 문자를 나타내기 위해 백슬래시 이스케이프를 사용해야 하는 경우 스포츠 토토 결과 상수를E.

추가로standard_conforming_strings, 구성 매개변수escape_string_warning그리고백슬래시_quote스포츠 토토 결과 상수에서 백슬래시 처리를 관리합니다.

코드 0이 있는 문자는 스포츠 토토 결과 상수에 포함될 수 없습니다.

4.1.2.3. 유니코드 이스케이프가 포함된 스포츠 토토 결과 상수#

포스트그레SQL또한 코드 포인트로 임의의 유니코드 문자를 지정할 수 있는 스포츠 토토 결과에 대한 또 다른 유형의 이스케이프 구문을 지원합니다. 유니코드 이스케이프 스포츠 토토 결과 상수는 다음으로 시작합니다.유&(대문자 또는 소문자 U 다음에 앰퍼샌드가 뒤따름) 여는 따옴표 바로 앞, 사이에 공백 없음, 예를 들어U&'foo'. (이로 인해 연산자가 모호해집니다.&. 이 문제를 방지하려면 연산자 주위에 공백을 사용하십시오.) 따옴표 안에 유니코드 문자는 백슬래시 뒤에 4자리 16진수 코드 포인트 번호를 작성하거나 백슬래시 뒤에 더하기 기호 뒤에 6자리 16진수 코드 포인트 번호를 작성하여 이스케이프 형식으로 지정할 수 있습니다. 예를 들어, 스포츠 토토 결과'데이터'다음과 같이 쓸 수 있습니다

U&'d\0061t\+000061'

다음의 덜 사소한 예는 러시아어 단어를 씁니다슬론(코끼리) 키릴 문자:

U&'\0441\043B\043E\043D'

백슬래시와 다른 이스케이프 문자를 원할 경우 다음을 사용하여 지정할 수 있습니다.UESCAPE스포츠 토토 결과 뒤의 절, 예:

U&'d!0061t!+000061' UESCAPE '!'

이스케이프 문자는 16진수, 더하기 기호, 작은따옴표, 큰따옴표 또는 공백 문자 이외의 단일 문자일 수 있습니다.

스포츠 토토 결과에 이스케이프 문자를 포함하려면 두 번 쓰십시오.

4자리 또는 6자리 이스케이프 형식을 사용하여 UTF-16 서로게이트 쌍을 지정하여 U+FFFF보다 큰 코드 포인트로 문자를 구성할 수 있지만, 6자리 형식을 사용할 수 있으므로 기술적으로는 이것이 필요하지 않습니다. (대리 쌍은 직접 저장되지 않고 단일 코드 포인트로 결합됩니다.)

서버 인코딩이 utf-8이 아닌 경우, 이러한 이스케이프 시퀀스 중 하나로 식별되는 유니코드 코드 포인트는 실제 서버 인코딩으로 변환됩니다. 불가능할 경우 오류가 보고됩니다.

또한 스포츠 토토 결과 상수에 대한 유니코드 이스케이프 구문은 구성 매개변수가 다음과 같은 경우에만 작동합니다.standard_conforming_strings켜져 있습니다. 그렇지 않으면 이 구문이 SQL 문을 구문 분석하는 클라이언트를 혼란스럽게 하여 SQL 주입 및 유사한 보안 문제가 발생할 수 있기 때문입니다. 매개변수가 off로 설정된 경우 이 구문은 오류 메시지와 함께 거부됩니다.

4.1.2.4. 달러 인용 스포츠 토토 결과 상수#

스포츠 토토 결과 상수를 지정하는 표준 구문은 일반적으로 편리하지만, 원하는 스포츠 토토 결과에 작은따옴표가 많이 포함되어 있으면 각각을 두 배로 늘려야 하기 때문에 이해하기 어려울 수 있습니다. 이러한 상황에서 더 읽기 쉬운 쿼리를 허용하려면,PostgreSQL다른 방법을 제공합니다.달러 인용, 스포츠 토토 결과 상수를 작성합니다. 달러로 묶인 스포츠 토토 결과 상수는 달러 기호($), 선택사항태그0개 이상의 문자, 또 다른 달러 기호, 스포츠 토토 결과 내용을 구성하는 임의의 문자 시퀀스, 달러 기호, 이 달러 인용문을 시작한 동일한 태그 및 달러 기호. 예를 들어, 스포츠 토토 결과을 지정하는 두 가지 방법이 있습니다.다이앤의 말달러 인용 사용:

$$다이앤의 말$$
$SomeTag$Dianne의 말$SomeTag$

달러로 묶인 스포츠 토토 결과 내에서는 이스케이프할 필요 없이 작은따옴표를 사용할 수 있습니다. 실제로 달러로 묶인 스포츠 토토 결과 내부의 어떤 문자도 이스케이프되지 않습니다. 스포츠 토토 결과 내용은 항상 문자 그대로 기록됩니다. 백슬래시는 여는 태그와 일치하는 시퀀스의 일부가 아닌 한 특별하지 않으며 달러 기호도 아닙니다.

각 중첩 수준에서 서로 다른 태그를 선택하여 달러 인용 스포츠 토토 결과 상수를 중첩할 수 있습니다. 이는 함수 정의를 작성할 때 가장 일반적으로 사용됩니다. 예를 들어:

$기능$
시작하다
    RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);
끝;
$기능$

여기서 순서$q$[\t\r\n\v\\]$q$달러로 묶인 리터럴 스포츠 토토 결과을 나타냅니다.[\t\r\n\v\\], 함수 본문이 실행될 때 인식됩니다.PostgreSQL. 그러나 시퀀스가 ​​외부 달러 인용 구분 기호와 일치하지 않기 때문에$기능$, 외부 스포츠 토토 결과에 관한 한 상수 내에 문자가 몇 개 더 있을 뿐입니다.

달러 인용된 스포츠 토토 결과의 태그가 있는 경우 달러 기호를 포함할 수 없다는 점을 제외하면 인용되지 않은 식별자와 동일한 규칙을 따릅니다. 태그는 대소문자를 구분하므로$tag$String 콘텐츠$tag$맞습니다만$TAG$스포츠 토토 결과 콘텐츠$tag$그렇지 않습니다.

키워드 또는 식별자 다음에 오는 달러로 묶인 스포츠 토토 결과은 공백으로 구분되어야 합니다. 그렇지 않으면 달러 인용 구분 기호가 이전 식별자의 일부로 간주됩니다.

달러 인용은 SQL 표준의 일부는 아니지만, 표준을 준수하는 작은 따옴표 구문보다 복잡한 스포츠 토토 결과 리터럴을 작성하는 데 더 편리한 방법인 경우가 많습니다. 절차적 함수 정의에서 종종 필요한 것처럼 다른 상수 내에서 스포츠 토토 결과 상수를 나타낼 때 특히 유용합니다. 작은따옴표 구문을 사용하면 위 예의 각 백슬래시는 4개의 백슬래시로 작성되어야 하며, 이는 원래 스포츠 토토 결과 상수를 구문 분석할 때 2개의 백슬래시로 줄어들고, 함수 실행 중에 내부 스포츠 토토 결과 상수가 다시 구문 분석되면 1개로 줄어듭니다.

4.1.2.5. 비트 스포츠 토토 결과 상수#

비트 스포츠 토토 결과 상수는 다음이 포함된 일반 스포츠 토토 결과 상수처럼 보입니다.B(대문자 또는 소문자) 여는 따옴표 바로 앞(공백 없음), 예:B'1001'. 비트 스포츠 토토 결과 상수 내에서 허용되는 유일한 문자는 다음과 같습니다.0그리고1.

또는 비트 스포츠 토토 결과 상수는 선행 문자를 사용하여 16진수 표기법으로 지정할 수 있습니다.X(대문자 또는 소문자), 예:X'1FF'. 이 표기법은 각 16진수에 대해 4개의 이진수를 갖는 비트 스포츠 토토 결과 상수와 동일합니다.

두 가지 형태의 비트 스포츠 토토 결과 상수는 일반 스포츠 토토 결과 상수와 동일한 방식으로 여러 줄에 걸쳐 계속될 수 있습니다. 비트열 상수에는 달러 인용을 사용할 수 없습니다.

4.1.2.6. 숫자 상수#

숫자 상수는 다음과 같은 일반적인 형식으로 허용됩니다:

숫자
숫자.[숫자][e[+-]숫자]
[숫자].숫자[e[+-]숫자]
숫자e[+-]숫자

어디에서숫자은 하나 이상의 십진수(0~9)입니다. 소수점을 사용하는 경우 최소한 하나의 숫자가 소수점 앞이나 뒤에 있어야 합니다. 지수 표시() 뒤에는 최소한 하나의 숫자가 와야 합니다.e)(있는 경우). 아래 설명된 대로 시각적 그룹화에 사용할 수 있는 밑줄을 제외하고 상수에는 공백이나 기타 문자가 포함될 수 없습니다. 선행하는 더하기 또는 빼기 기호는 실제로 상수의 일부로 간주되지 않습니다. 상수에 적용되는 연산자입니다.

다음은 유효한 숫자 상수의 몇 가지 예입니다:


42
3.5
4.
.001
5e2
1.925e-3

추가로, 십진수가 아닌 정수 상수는 다음 형식으로 허용됩니다:

0x16진수0o옥트숫자0bbindigits

어디에서16진수하나 이상의 16진수(0-9, A-F)입니다.옥트숫자은 하나 이상의 8진수(0-7)이고bindigits은 하나 이상의 이진수(0 또는 1)입니다. 16진수와 기수 접두사는 대문자 또는 소문자일 수 있습니다. 정수만 십진수가 아닌 형식을 가질 수 있으며 분수 부분이 있는 숫자는 가질 수 없습니다.

다음은 유효한 십진수가 아닌 정수 상수의 몇 가지 예입니다:


0b100101
0B10011001
0o273
0O755
0x42f
0XFFFF

시각적 그룹화를 위해 숫자 사이에 밑줄을 삽입할 수 있습니다. 이는 상수 값에 더 이상 영향을 미치지 않습니다. 예를 들어:


1_500_000_000
0b10001000_00000000
0o_1_755
0xFFFF_FFFF
1.618_034

밑줄은 숫자 상수 또는 숫자 그룹의 시작이나 끝(즉, 소수점 또는 지수 표시 바로 앞이나 뒤)에 허용되지 않으며 한 행에 두 개 이상의 밑줄이 허용되지 않습니다.

소수점이나 지수가 포함되지 않은 숫자 상수는 처음에는 유형으로 추정됩니다.정수값이 유형에 맞는 경우정수(32비트); 그렇지 않으면 유형인 것으로 추정됩니다.비긴트값이 유형에 맞는 경우비긴트(64비트); 그렇지 않으면 유형으로 간주됩니다.숫자. 소수점 및/또는 지수를 포함하는 상수는 처음에는 항상 유형으로 간주됩니다.숫자.

숫자 상수의 처음에 할당된 데이터 유형은 유형 확인 알고리즘의 시작점일 뿐입니다. 대부분의 경우 상수는 상황에 따라 가장 적절한 유형으로 자동으로 강제 변환됩니다. 필요한 경우 숫자 값을 캐스팅하여 특정 데이터 유형으로 강제로 해석할 수 있습니다.예를 들어, 숫자 값을 유형으로 처리하도록 강제할 수 있습니다.실제 (플로트4) 작성:

REAL '1.23' -- 스포츠 토토 결과 스타일
1.23::REAL -- PostgreSQL(역사적) 스타일

이것들은 실제로 다음에 논의되는 일반적인 캐스팅 표기법의 특별한 경우입니다.

4.1.2.7. 다른 유형의 상수#

an의 상수임의의유형은 다음 표기법 중 하나를 사용하여 입력할 수 있습니다.

유형 '스포츠 토토 결과'
'스포츠 토토 결과'::유형캐스트('스포츠 토토 결과' 처럼유형 )

스포츠 토토 결과 상수의 텍스트는 호출된 유형에 대한 입력 변환 루틴으로 전달됩니다.유형. 결과는 표시된 유형의 상수입니다. 상수의 유형이 모호하지 않은 경우(예: 테이블 열에 직접 할당되는 경우) 명시적 유형 캐스팅을 생략할 수 있으며, 이 경우 자동으로 강제 변환됩니다.

스포츠 토토 결과 상수는 일반 SQL 표기법이나 달러 인용을 사용하여 작성할 수 있습니다.

함수와 같은 구문을 사용하여 유형 강제를 지정하는 것도 가능합니다:

유형 이름 ( '스포츠 토토 결과' )

그러나 모든 유형 이름이 이런 방식으로 사용될 수 있는 것은 아닙니다. 보다섹션 4.2.9자세한 내용은.

::, 캐스트()및 함수 호출 구문을 사용하여 임의 표현식의 런타임 유형 변환을 지정할 수도 있습니다.섹션 4.2.9. 구문의 모호함을 피하기 위해,유형 '스포츠 토토 결과'구문은 단순 리터럴 상수의 유형을 지정하는 데에만 사용할 수 있습니다. 에 대한 또 다른 제한사항유형 '스포츠 토토 결과'구문은 배열 유형에서는 작동하지 않는다는 것입니다. 사용::또는캐스트()배열 상수의 유형을 지정합니다.

캐스트()구문은 SQL을 따릅니다. 그만큼유형 '스포츠 토토 결과'구문은 표준을 일반화한 것입니다. SQL은 몇 가지 데이터 유형에 대해서만 이 구문을 지정하지만PostgreSQL모든 유형에 대해 허용합니다. 의 구문::역사적임포스트그레SQL사용법, 함수 호출 구문과 같습니다.

4.1.3. 운영자#

연산자 이름은 최대의 순서입니다NAMEDATALEN-다음 목록의 1개(기본적으로 63) 문자:


+ - * / <  = ~ ! @ # % ^ & | ` ?

그러나 연산자 이름에는 몇 가지 제한이 있습니다:

  • --그리고/*연산자 이름은 주석의 시작으로 간주되므로 연산자 이름 어디에도 나타날 수 없습니다.

  • 여러 문자로 된 연산자 이름은 다음으로 끝날 수 없습니다.+또는-, 이름에 다음 문자 중 하나 이상이 포함되어 있지 않은 경우:


    ~ ! @ # % ^ & | ` ?

    예를 들어,@-허용되는 연산자 이름이지만*-그렇지 않습니다. 이 제한은 다음을 허용합니다.PostgreSQL토큰 사이에 공백을 요구하지 않고 SQL 호환 쿼리를 구문 분석합니다.

SQL 표준이 아닌 연산자 이름으로 작업할 때 일반적으로 모호함을 피하기 위해 인접한 연산자를 공백으로 구분해야 합니다. 예를 들어,라는 접두사 연산자를 정의한 경우@, 쓸 수 없습니다X*@Y; 당신은 작성해야합니다X* @Y그것을 보장하기 위해PostgreSQL하나가 아닌 두 개의 연산자 이름으로 읽습니다.

4.1.4. 특수문자#

영숫자가 아닌 일부 문자는 연산자와는 다른 특별한 의미를 갖습니다. 사용법에 대한 자세한 내용은 해당 구문 요소가 설명된 위치에서 확인할 수 있습니다. 이 섹션은 이러한 캐릭터의 존재에 대해 조언하고 목적을 요약하기 위해 존재합니다.

  • 달러 기호($) 뒤에 숫자가 오면 함수 정의 또는 준비된 문의 본문에서 위치 매개변수를 나타내는 데 사용됩니다. 다른 상황에서 달러 기호는 식별자 또는 달러로 묶인 스포츠 토토 결과 상수의 일부일 수 있습니다.

  • 괄호 (())은 표현식을 그룹화하고 우선순위를 적용하는 일반적인 의미를 갖습니다. 어떤 경우에는 특정 SQL 명령의 고정 구문의 일부로 괄호가 필요합니다.

  • 괄호([])는 배열의 요소를 선택하는 데 사용됩니다. 보다PostgreSQL : 문서 : 18 : 8.15. 젠 토토배열에 대한 자세한 내용은.

  • 쉼표 (,)는 목록의 요소를 구분하기 위해 일부 구문 구조에서 사용됩니다.

  • 세미콜론(;)은 SQL 명령을 종료합니다. 스포츠 토토 결과 상수나 따옴표 붙은 식별자를 제외하고 명령 내 어디에도 나타날 수 없습니다.

  • 콜론(:)은 선택하는 데 사용됩니다.슬라이스배열에서. (보다PostgreSQL : 문서 : 18 : 8.15. 젠 토토.) 특정 SQL 방언(예: Embedded SQL)에서는 변수 이름 앞에 콜론을 사용합니다.

  • 별표(*)는 일부 컨텍스트에서 테이블 행 또는 복합 값의 모든 필드를 나타내는 데 사용됩니다. 또한 집계 함수의 인수로 사용될 때 집계에 명시적인 매개변수가 필요하지 않다는 특별한 의미가 있습니다.

  • 기간(.)은 숫자 상수에 사용되며 스키마, 테이블 및 열 이름을 구분하는 데 사용됩니다.

4.1.5. 댓글#

코멘트는 이중 대시로 시작하고 줄 끝까지 확장되는 일련의 문자입니다. 예:

-- 표준 SQL 주석입니다.

또는 C 스타일 블록 주석을 사용할 수 있습니다:

/* 여러 줄 주석
 * 중첩 있음: /* 중첩된 블록 주석 */
 */

댓글이 다음으로 시작하는 경우/*그리고 일치하는 항목으로 확장됩니다.*/. 이러한 블록 주석은 SQL 표준에 지정된 대로 중첩되지만 C와는 달리 기존 블록 주석을 포함할 수 있는 더 큰 코드 블록을 주석 처리할 수 있습니다.

추가 구문 분석 전에 주석이 입력 스트림에서 제거되고 공백으로 효과적으로 대체됩니다.

4.1.6. 연산자 우선순위#

표 4.2연산자의 우선순위와 연관성을 보여줍니다.포스트그레SQL. 대부분의 연산자는 동일한 우선순위를 가지며 왼쪽 결합적입니다. 연산자의 우선순위와 연관성은 파서에 내장되어 있습니다. 여러 연산자가 포함된 표현식을 우선순위 규칙이 의미하는 것과 다른 방식으로 구문 분석하려면 괄호를 추가하세요.

표 4.2. 연산자 우선순위(가장 높은 것에서 가장 낮은 것까지)

연산자/요소 연관성 설명
. 왼쪽 테이블/열 이름 구분 기호
:: 왼쪽 PostgreSQL-스타일 타입캐스트
[ ] 왼쪽 배열 요소 선택
+ - 맞아요 단항 더하기, 단항 빼기
콜레이트 왼쪽 조합 선택
AT 왼쪽 시간대, 현지에서
^ 왼쪽 지수
* / % 왼쪽 곱셈, 나눗셈, 모듈로
+ - 왼쪽 덧셈, 뺄셈
(다른 연산자) 왼쪽 기타 모든 기본 및 사용자 정의 연산자
사이 IN 좋아요 좋아요 비슷한 것 범위 포함, 멤버십 설정, 스포츠 토토 결과 일치
< = <= = < 비교 연산자
IS ISNULL NOTNULL 사실입니다, 거짓입니다, NULL임, 다음과 구별됨
아님 맞아요 논리적 부정
그리고 왼쪽 논리적 접속사
또는 왼쪽 논리적 분리

연산자 우선순위 규칙은 위에서 언급한 내장 연산자와 동일한 이름을 가진 사용자 정의 연산자에도 적용된다는 점에 유의하세요. 예를 들어,+일부 사용자 정의 데이터 유형의 연산자는 내장된 것과 동일한 우선순위를 가집니다.+연산자, 당신이 무엇을 하든 상관없습니다.

스키마 한정 연산자 이름이 다음에서 사용되는 경우연산자구문, 예:

연산자 3명 선택(pg_catalog.+) 4;

운영자구조는 다음에 표시된 기본 우선순위를 갖습니다.표 4.2for다른 연산자. 이는 내부에 어떤 특정 연산자가 나타나더라도 마찬가지입니다.연산자().

참고

PostgreSQL9.5 이전 버전에서는 약간 다른 연산자 우선 순위 규칙을 사용했습니다. 특히,<= =그리고<이전에는 일반 연산자로 취급되었습니다.IS테스트는 더 높은 우선순위를 가졌습니다. 그리고다음 사이 아님및 관련 구성은 일관되지 않게 작동하여 어떤 경우에는 다음의 우선순위를 갖는 것으로 간주됩니다.아님대신사이. 이러한 규칙은 SQL 표준을 더 잘 준수하고 논리적으로 동등한 구문의 일관되지 않은 처리로 인한 혼란을 줄이기 위해 변경되었습니다. 대부분의 경우 이러한 변경으로 인해 행동 변화가 발생하지 않거나 다음과 같은 결과가 발생할 수 있습니다.해당 연산자 없음괄호를 추가하여 해결할 수 있는 오류입니다. 그러나 구문 분석 오류가 보고되지 않고 쿼리 동작이 변경될 수 있는 특수한 경우가 있습니다.

수정 사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.