SQL 입력은 다음의 시퀀스로 구성됩니다.명령. 명령은 다음의 순서로 구성됩니다.토큰, 세미콜론으로 종료됨 (";"). 입력 스트림의 끝 또한 명령을 종료합니다. 유효한 토큰은 다음에 따라 다릅니다. 특정 명령의 구문.
토큰은 다음과 같습니다.키워드, 안식별자, 아인용된 식별자, 아리터럴(또는 상수) 또는 특수 문자 상징. 토큰은 일반적으로 공백(공백, 탭, 개행), 그러나 모호성이 없으면 그럴 필요는 없습니다(즉, 일반적으로 특수 문자가 인접한 경우에만 해당됩니다. 다른 토큰 유형).
예를 들어, 다음은 (구문적으로) 유효한 SQL입니다. 입력:
SELECT * FROM MY_TABLE; 업데이트 MY_TABLE SET A = 5; MY_TABLE 값에 삽입(3, '안녕하세요');
이것은 한 줄에 하나씩 세 가지 명령의 시퀀스입니다(비록 이는 필수가 아닙니다. 한 줄에 둘 이상의 명령이 있을 수 있으며 명령은 여러 줄에 걸쳐 유용하게 분할될 수 있습니다.)
추가로,댓글다음에서 발생할 수 있습니다. SQL 입력. 그것들은 토큰이 아니며 사실상 동일합니다. 공백으로.
SQL 구문은 어떤 토큰에 관해 일관성이 없습니다. 명령과 피연산자 또는 매개변수를 식별합니다. 첫 번째 일반적으로 명령 이름은 소수의 토큰이므로 위의 경우 예를 들어 우리는 일반적으로 a"선택","업데이트", 그리고"삽입"명령. 하지만 예를 들어업데이트명령은 항상 가 필요합니다SET토큰이 표시됩니다. 특정 위치 및 이 특정 변형삽입또한 다음이 필요합니다값완전해지려면. 정확한 구문 각 명령에 대한 규칙은 다음에 설명되어 있습니다.파트 VI.
다음과 같은 토큰선택, 업데이트또는값안에 위의 예는 다음의 예입니다.키 단어, 즉 SQL에서 고정된 의미를 갖는 단어 언어. 토큰MY_TABLE그리고A다음의 예입니다식별자. 테이블 이름을 식별하고, 명령에 따라 열 또는 기타 데이터베이스 개체 그들은 사용됩니다. 따라서 때로는 간단히 호출됩니다."이름". 키워드 및 식별자 동일한 어휘 구조를 가지고 있어 알 수 없음을 의미합니다. 토큰이 식별자인지 키워드인지는 알 수 없습니다. 언어. 전체 키워드 목록은 다음에서 찾을 수 있습니다.부록 C.
SQL 식별자와 키워드는 문자로 시작해야 합니다 (a-z하지만 발음 구별 부호가 있는 문자와 라틴 문자가 아닌 문자도 포함) 또는 밑줄(_). 후속 식별자나 키워드의 문자는 문자일 수 있습니다. 밑줄, 숫자(0-9) 또는 달러 기호($). 달러 기호는 허용되지 않습니다. SQL 표준 문자에 따른 식별자이므로 이를 사용하면 응용 프로그램의 이식성이 떨어질 수 있습니다. SQL 표준은 숫자나 숫자가 포함된 키워드를 정의하지 않습니다. 밑줄로 시작하거나 끝나므로 이 형식의 식별자는 향후 확장과의 충돌 가능성에 대해 안전합니다. 표준.
시스템은 다음 이상을 사용하지 않습니다.NAMEDATALEN-식별자의 1바이트; 더 이상 이름은 명령에 쓸 수 있지만 잘립니다. 기본적으로,NAMEDATALEN64이므로 최대 식별자 길이는 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인 문자. (큰따옴표를 포함하려면 두 개를 쓰세요. 큰따옴표.) 이를 통해 테이블 또는 열 이름을 구성할 수 있습니다. 그렇지 않으면 불가능할 것입니다. 공백 또는 앰퍼샌드. 길이 제한은 여전히 적용됩니다.
인용된 식별자의 변형을 통해 이스케이프된 식별자를 포함할 수 있습니다. 코드 포인트로 식별되는 유니코드 문자입니다. 이 변형은 다음으로 시작됩니다.유&(상위 또는 소문자 U 다음에 앰퍼샌드가 옴) 바로 앞에 사이에 공백 없이 큰따옴표 열기 예U&"foo". (참고로 이건 연산자와 모호함을 만듭니다&. 피하기 위해 연산자 주위에 공백을 사용하십시오. 이 문제.) 따옴표 안에 유니코드 문자가 포함될 수 있습니다. 백슬래시를 쓰고 뒤에 이스케이프된 형식으로 지정됩니다. 4자리 16진수 코드 포인트 번호 또는 백슬래시 뒤에 더하기 기호 뒤에 6자리 숫자가 옵니다. 16진수 코드 포인트 번호. 예를 들어 식별자"데이터"다음과 같이 쓸 수 있습니다
U&"d\0061t\+000061"
다음의 덜 사소한 예는 러시아어 단어를 씁니다"슬론"(코끼리) 키릴 문자 편지:
U&"\0441\043B\043E\043D"
백슬래시와 다른 이스케이프 문자를 원할 경우, 이는를 사용하여 지정할 수 있습니다.UESCAPE토토 캔 뒤의 절, 예:
U&"d!0061t!+000061" UESCAPE '!'
이스케이프 문자는 다음을 제외한 모든 단일 문자일 수 있습니다. 16진수, 더하기 기호, 작은따옴표, 큰따옴표 따옴표 또는 공백 문자. 참고로 탈출 문자는 큰따옴표가 아닌 작은따옴표로 작성됩니다.
식별자에 이스케이프 문자를 문자 그대로 포함하려면, 두 번 쓰세요.
유니코드 이스케이프 구문은 서버가 인코딩은UTF8. 다른 서버일 때 인코딩이 사용되며 ASCII 범위의 코드 포인트만 사용됩니다(최대\007F)을 지정할 수 있습니다. 둘 다 4자리 및 6자리 형식을 사용하여 UTF-16을 지정할 수 있습니다. 더 큰 코드 포인트로 문자를 구성하는 서로게이트 쌍 U+FFFF보다 6자리 형식을 사용할 수 있지만 기술적으로는 이것을 불필요하게 만듭니다. (대리 쌍이 있는 경우 서버 인코딩이 다음과 같은 경우에 사용됩니다.UTF8, 먼저 단일 코드 포인트로 결합된 다음 utf-8로 인코딩되었습니다.)
식별자를 인용하면 대소문자도 구분됩니다. 따옴표가 없는 이름은 항상 소문자로 접혀집니다. 예를 들어, 식별자FOO, foo및"foo"있습니다 동일한 것으로 간주됨포스트그레SQL하지만"푸"그리고"FOO"은 이 세 가지와 서로 다릅니다. (접이식 따옴표가 없는 이름을 소문자로 변환토토 캔SQL과 호환되지 않습니다. 표준에 따르면 인용되지 않은 이름은 접혀야 합니다. 대문자. 따라서,foo이어야 합니다 에 해당함"FOO"아님"foo"표준에 따릅니다. 당신이 원한다면 휴대용 애플리케이션을 작성하려면 항상 다음을 인용하는 것이 좋습니다. 특정 이름을 입력하거나 인용하지 마세요.)
세 가지 종류가 있습니다암시적으로 유형이 지정된 상수에토토 캔: 토토 캔, 비트 토토 캔 및 숫자. 상수는 명시적 유형으로 지정할 수도 있습니다. 보다 정확한 표현이 가능하며, 시스템에 의한 효율적인 처리. 이러한 대안은 다음 하위 섹션에서 논의됩니다.
SQL의 토토 캔 상수는 임의의 시퀀스입니다. 작은따옴표()로 묶인 문자'), 예를 들어'이것은 토토 캔'. 작은따옴표 문자를 포함하려면 토토 캔 상수, 두 개의 인접한 작은따옴표를 씁니다(예:'다이앤'의 말'. 참고하세요아님와 동일 큰따옴표 문자(").
공백으로만 구분되는 두 개의 토토 캔 상수적어도 하나 포함 개행연결되어 효과적으로 처리됩니다. 토토 캔은 하나의 상수로 작성되었습니다. 예를 들면:
'foo' 선택 '바';
다음과 같습니다:
'foobar' 선택;
그러나:
'foo' '바' 선택;
은 유효한 구문이 아닙니다. (이 약간 이상한 행동은 에 의해 지정됨SQL; 토토 캔다음을 팔로우하고 있습니다. 표준.)
포스트그레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 - 여) | 16진수 바이트 값 |
| \uxxxx, \Uxxxxxxxx (x= 0 - 9, A - F) | 16 또는 32비트 16진수 유니코드 문자 값 |
백슬래시 뒤에 오는 다른 문자는 모두 사용됩니다. 말 그대로. 따라서 백슬래시 문자를 포함하려면 두 개를 작성하십시오. 백슬래시(\\). 또한, 단일 따옴표는 다음과 같이 작성하여 이스케이프 토토 캔에 포함될 수 있습니다.\', 일반적인 방법 외에''.
바이트 시퀀스를 지정하는 것은 귀하의 책임입니다. 특히 8진수나 16진수를 사용할 때 생성됩니다. 이스케이프, 서버 문자 집합에서 유효한 문자 구성 인코딩. 서버 인코딩이 utf-8이면 유니코드 이스케이프 또는 대체 유니코드 이스케이프 구문 설명 에서섹션 4.1.2.325144_25302
유니코드 이스케이프 구문은 서버가 인코딩은UTF8. 다른 서버일 때 인코딩이 사용되며 ASCII 범위(최대)의 코드 포인트만 사용됩니다. 에\u007F)을 지정할 수 있습니다. 둘 다 4자리 및 8자리 형식을 사용하여 지정할 수 있습니다. 코드 포인트로 문자를 구성하는 UTF-16 서로게이트 쌍 U+FFFF보다 크지만 8자리 숫자를 사용할 수는 없습니다. 기술적으로는 이것이 불필요합니다. (대리인의 경우 서버 인코딩이 다음과 같을 때 쌍이 사용됩니다.UTF8, 이들은 먼저 단일로 결합됩니다. utf-8로 인코딩된 코드 포인트입니다.)
| 주의 |
|
구성 매개변수인 경우standard_conforming_stringsis꺼짐그러면포스트그레SQL백슬래시를 인식합니다. 일반 및 이스케이프 토토 캔 상수 모두에서 이스케이프됩니다. 이는 이전 버전과의 호환성을 위한 것입니다. 백슬래시 이스케이프가 있었던 역사적 동작 항상 인식됩니다. 하지만standard_conforming_strings현재 기본값은꺼짐, 기본값 으로 변경됩니다.켜짐에 향상된 표준 준수를 위한 향후 릴리스. 따라서 애플리케이션을 다른 곳으로 마이그레이션하는 것이 좋습니다. 백슬래시 이스케이프를 사용하지 마세요. 당신이 특수 문자를 나타내는 백슬래시 이스케이프, 로 토토 캔 상수를 작성합니다.E그것이 처리될 것인지 확인하기 위해 향후 릴리스에서도 마찬가지입니다. 추가로standard_conforming_strings, 구성 매개변수escape_string_warning그리고백슬래시_quote토토 캔의 백슬래시 처리를 관리합니다. 상수. |
코드 0이 있는 문자는 토토 캔에 포함될 수 없습니다. 상수.
포스트그레SQL또한 지원합니다 다음을 허용하는 토토 캔에 대한 또 다른 유형의 이스케이프 구문 코드 포인트로 임의의 유니코드 문자를 지정합니다. 에이 유니코드 이스케이프 토토 캔 상수는 다음으로 시작합니다.유&(대문자 또는 소문자 U가 이어졌습니다. 앰퍼샌드로) 여는 인용문 바로 앞에, 없이 예를 들어 사이에 공백이 있으면U&'foo'. (이렇게 하면 연산자와의 모호함&. 이 문제를 방지하려면 연산자 주위에 공백을 사용하십시오.) 내부 따옴표, 유니코드 문자를 이스케이프 처리하여 지정할 수 있습니다. 백슬래시 뒤에 4자리 숫자를 입력하여 형식을 지정합니다. 16진수 코드 포인트 번호 또는 백슬래시 그 뒤에 더하기 기호와 6자리 16진수가 옵니다. 코드 포인트 번호. 예를 들어, 토토 캔'데이터'다음과 같이 쓸 수 있습니다
U&'d\0061t\+000061'
다음의 덜 사소한 예는 러시아어 단어를 씁니다"슬론"(코끼리) 키릴 문자 편지:
U&'\0441\043B\043E\043D'
백슬래시와 다른 이스케이프 문자를 원할 경우, 이는를 사용하여 지정할 수 있습니다.UESCAPE토토 캔 뒤의 절, for 예:
U&'d!0061t!+000061' UESCAPE '!'
이스케이프 문자는 다른 단일 문자일 수 있습니다. 16진수, 더하기 기호, 작은따옴표, 큰따옴표 또는 공백 문자입니다.
유니코드 이스케이프 구문은 서버가 인코딩은UTF8. 다른 서버일 때 인코딩이 사용되며 ASCII 범위(최대)의 코드 포인트만 사용됩니다. 에\007F)을 지정할 수 있습니다. 둘 다 4자리 및 6자리 형식을 사용하여 UTF-16을 지정할 수 있습니다. 더 큰 코드 포인트로 문자를 구성하는 서로게이트 쌍 U+FFFF보다 6자리 형식을 사용할 수 있지만 기술적으로는 이것을 불필요하게 만듭니다. (대리 쌍이 있는 경우 서버 인코딩이 다음과 같은 경우에 사용됩니다.UTF8, 먼저 단일로 결합됩니다. utf-8로 인코딩된 코드 포인트입니다.)
또한 토토 캔 상수에만 대한 유니코드 이스케이프 구문 구성 매개변수가 있을 때 작동합니다.standard_conforming_strings켜져 있습니다. 이는 다음과 같습니다. 그렇지 않으면 이 구문은 구문을 분석하는 클라이언트를 혼란스럽게 할 수 있습니다. SQL로 이어질 수 있는 지점까지의 SQL 문 주입 및 유사한 보안 문제. 매개변수가 off로 설정하면 이 구문은 오류와 함께 거부됩니다. 메시지.
문자 그대로 토토 캔에 이스케이프 문자를 포함하려면, 두 번 쓰세요.
토토 캔 상수를 지정하기 위한 표준 구문은 일반적으로 편리하지만 언제 이해하기 어려울 수 있습니다. 원하는 토토 캔에 작은따옴표가 많이 포함되어 있거나 백슬래시는 각각 두 배가 되어야 하기 때문입니다. 허용하려면 이러한 상황에서는 더 읽기 쉬운 쿼리입니다.포스트그레SQL다른 방법을 제공합니다."달러 인용", 토토 캔을 쓰려면 상수. 달러로 묶인 토토 캔 상수는 다음과 같이 구성됩니다. 달러 기호($), 선택사항"태그"0개 이상의 문자, 또 다른 달러 기호, 임의의 문자 시퀀스 토토 캔 내용, 달러 기호, 동일한 태그를 구성합니다. 이 달러 견적과 달러 기호를 시작했습니다. 예를 들어 여기 토토 캔을 지정하는 두 가지 방법이 있습니다."다이앤의 말"달러 인용 사용:
$$다이앤의 말$$ $SomeTag$Dianne의 말$SomeTag$
달러로 묶인 토토 캔 내부에는 작은따옴표가 있음에 유의하세요. 탈출하지 않고도 사용할 수 있습니다. 실제로는 그렇지 않습니다. 달러로 묶인 토토 캔 안의 문자는 이스케이프됩니다. 토토 캔 내용은 항상 문자 그대로 작성됩니다. 백슬래시 특별하지 않으며 달러 기호도 마찬가지입니다. 여는 태그와 일치하는 시퀀스의 일부입니다.
달러로 묶인 토토 캔 상수를 다음과 같이 중첩할 수 있습니다. 각 중첩 수준에서 다른 태그를 선택합니다. 이것이 가장 함수 정의를 작성할 때 일반적으로 사용됩니다. 에 대한 예:
$기능$
시작
RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);
끝;
$기능$
여기서 순서$q$[\t\r\n\v\\]$q$달러 인용을 나타냅니다. 리터럴 토토 캔[\t\r\n\v\\], 함수 본문이 실행될 때 인식됩니다.토토 캔. 하지만 이후 시퀀스가 외부 달러 인용 구분 기호와 일치하지 않습니다.$기능$, 좀 더 남았네요 외부 토토 캔이 있는 한 상수 내의 문자 걱정된다.
달러로 인용된 토토 캔의 태그가 있는 경우 다음과 같습니다. 따옴표가 없는 식별자와 동일한 규칙입니다. 달러 기호가 포함되어 있습니다. 태그는 대소문자를 구분하므로$tag$String 콘텐츠$tag$맞습니다만$TAG$토토 캔 콘텐츠$tag$그렇지 않습니다.
키워드 뒤에 오는 달러 인용 토토 캔 또는 식별자는 공백으로 구분되어야 합니다. 그렇지 않으면 달러 인용 구분 기호는 선행 식별자입니다.
달러 인용은 SQL 표준의 일부는 아니지만 종종 복잡한 토토 캔을 작성하는 더 편리한 방법입니다. 표준 호환 작은따옴표 구문이 아닌 리터럴입니다. 그것 토토 캔 상수를 나타낼 때 특히 유용합니다. 절차상 종종 필요한 것처럼 다른 상수 내부에 기능 정의. 작은따옴표 구문을 사용하면 각각 위 예의 백슬래시는 다음과 같이 작성되어야 합니다. 4개의 백슬래시. 이는 2개의 백슬래시로 줄어듭니다. 원래 토토 캔 상수를 구문 분석한 다음 내부 토토 캔 상수는 함수 중에 다시 구문 분석됩니다. 실행.
비트 토토 캔 상수는 일반 토토 캔 상수처럼 보입니다. 와 함께B(대문자 또는 소문자) 시작 인용문 직전(중재 없음) 공백), 예:B'1001'. 유일한 비트 토토 캔 상수 내에서 허용되는 문자는 다음과 같습니다.0그리고1.
또는 다음에서 비트 토토 캔 상수를 지정할 수 있습니다. 16진수 표기법, 선행 사용X(대문자 또는 소문자), 예:X'1FF'. 이 표기법은 각각 4개의 이진수로 구성된 비트 토토 캔 상수 16진수.
비트 토토 캔 상수의 두 가지 형태는 모두 계속될 수 있습니다. 일반 토토 캔 상수와 동일한 방식으로 행을 생성합니다. 달러 비트 토토 캔 상수에는 따옴표를 사용할 수 없습니다.
숫자 상수는 다음과 같은 일반적인 형식으로 허용됩니다:
숫자 숫자.[숫자][e[+-]숫자] [숫자].숫자[e[+-]숫자] 숫자e[+-]숫자
어디에서숫자하나 또는 더 많은 소수 자릿수(0~9). 숫자는 최소한 한 자리 이상이어야 합니다. 소수점이 사용된 경우 소수점 앞이나 뒤에 있습니다. 적어도 한 자리는 지수 표시() 뒤에 와야 합니다.e)(있는 경우). 아무것도 있을 수 없다 상수에 포함된 공백 또는 기타 문자. 참고 선행하는 더하기 또는 빼기 기호는 실제로는 그렇지 않습니다. 상수의 일부로 간주됩니다. 에 적용되는 연산자입니다. 상수.
다음은 유효한 숫자 상수의 몇 가지 예입니다:
42
3.5
4.
.001
5e2
1.925e-3
소수점이 모두 포함되지 않은 숫자 상수 지수는 처음에 유형으로 간주되지 않습니다.정수값이 유형에 맞는 경우정수(32비트); 그렇지 않으면 다음과 같은 것으로 추정됩니다. 유형비긴트값이 유형에 맞는 경우비긴트(64비트); 그렇지 않으면 취해집니다 유형이 되다숫자. 상수 소수점 및/또는 지수를 포함하는 경우 항상 처음에는 유형으로 추정됨숫자.
숫자 상수의 처음에 할당된 데이터 유형은 다음과 같습니다. 유형 분석 알고리즘의 시작점일 뿐입니다. 에서 대부분의 경우 상수는 자동으로 강제로 변환됩니다. 상황에 따라 가장 적합한 유형입니다. 필요한 경우, 숫자 값을 특정 값으로 해석하도록 강제할 수 있습니다. 캐스팅하여 데이터 유형을 지정합니다. 예를 들어 숫자를 강제로 입력할 수 있습니다. 유형으로 처리되는 값진짜 (플로트4) 작성:
REAL '1.23' -- 토토 캔 스타일 1.23::REAL -- 토토 캔(역사적) 스타일
이것은 실제로 일반의 특별한 경우입니다. 캐스팅 표기법은 다음에 논의됩니다.
an의 상수임의의유형을 입력할 수 있습니다. 다음 표기법 중 하나를 사용합니다.
유형 '토토 캔'
'토토 캔'::유형캐스트('토토 캔' 그대로유형 )
토토 캔 상수의 텍스트가 입력으로 전달됩니다 라는 유형에 대한 변환 루틴유형. 결과는 표시된 유형. 다음과 같은 경우 명시적 유형 캐스트를 생략할 수 있습니다. 상수의 유형에 대해서는 모호함이 없습니다. (예를 들어 테이블에 직접 할당하는 경우 열), 이 경우 자동으로 강제됩니다.
토토 캔 상수는 다음 중 하나를 사용하여 작성할 수 있습니다. SQL 표기법 또는 달러 인용.
다음을 사용하여 유형 강제를 지정하는 것도 가능합니다. 함수형 구문:
유형 이름 ( '토토 캔' )
그러나 모든 유형 이름이 이런 방식으로 사용될 수 있는 것은 아닙니다. 참조섹션 4.2.9자세한 내용은.
그::, 캐스트()및 함수 호출 구문도 가능합니다. 임의의 런타임 유형 변환을 지정하는 데 사용됩니다. 에서 논의된 표현,섹션 4.2.9. 구문의 모호함을 피하기 위해,유형 '토토 캔'구문은 다음 용도로만 사용할 수 있습니다. 간단한 리터럴 상수의 유형을 지정합니다. 또 다른 에 대한 제한유형 '토토 캔'구문은 그렇지 않다는 것입니다 배열 유형에 대해 작업합니다. 사용::또는캐스트()유형을 지정합니다. 배열 상수.
그캐스트()구문은 다음을 준수합니다. SQL.유형 '토토 캔'구문은 일반화입니다. 표준: SQL은 이 구문을 몇 가지 경우에만 지정합니다. 데이터 유형이지만포스트그레SQL모든 유형에 대해 허용합니다. 의 구문::역사적임포스트그레SQL사용법은 그대로입니다 함수 호출 구문.
연산자 이름은 최대의 순서입니다NAMEDATALEN-1(기본적으로 63) 문자 다음 목록:
+ - * / < = ~ ! @ # % ^ & | ` ?
거기 그러나 연산자 이름에는 몇 가지 제한 사항이 있습니다.--그리고/*연산자 어디에도 나타날 수 없습니다 이름은 시작으로 간주되므로 댓글.
여러 문자로 된 연산자 이름은 다음으로 끝날 수 없습니다.+또는-, 이름에 다음 중 하나 이상이 포함되어 있지 않은 경우 문자:
~ ! @ # % ^ & | ` ?
용 예@-허용된 연산자입니다 이름은 있지만*-그렇지 않습니다. 이 제한이 허용됩니다포스트그레SQLSQL 규격을 구문 분석하기 위해 토큰 사이에 공백이 필요 없는 쿼리입니다.SQL 표준이 아닌 연산자 이름으로 작업할 때, 일반적으로 인접한 연산자를 공백으로 구분해야 합니다. 모호함을 피하십시오. 예를 들어, 왼쪽 단항을 정의한 경우 이름이 지정된 연산자@, 쓸 수 없습니다.X*@Y; 당신은 작성해야합니다X* @Y그것을 보장하기 위해포스트그레SQL두 개의 연산자 이름으로 읽습니다. 하나도 아니야.
영숫자가 아닌 일부 문자에는 특수 문자가 있습니다. 즉, 운영자와는 다르다는 뜻이다. 세부정보 사용법은 해당 위치에서 찾을 수 있습니다. 구문 요소가 설명됩니다. 이 섹션은 조언을 위해서만 존재합니다. 이들의 존재와 목적을 요약합니다. 문자.
달러 기호($) 다음에 숫자는 위치 매개변수를 나타내는 데 사용됩니다. 함수 정의의 본문 또는 준비된 문의 내용입니다. 에서 다른 상황에서는 달러 기호가 식별자의 일부일 수 있습니다. 또는 달러로 묶인 토토 캔 상수입니다.
괄호(())는 표현식을 그룹화하고 우선순위를 적용하는 일반적인 의미입니다. 어떤 경우에는 고정의 일부로 괄호가 필요합니다. 특정 SQL 명령의 구문입니다.
괄호([])는 다음과 같은 용도로 사용됩니다. 배열의 요소를 선택합니다. 참조섹션 8.14자세한 내용은 배열.
쉼표(,)는 일부에서 사용됩니다. 요소를 분리하는 구문 구조 목록.
세미콜론(;)는 SQL 명령. 명령 내 어디에도 나타날 수 없습니다. 토토 캔 상수 또는 인용 식별자 내에서는 제외됩니다.
콜론(:)은 선택하는 데 사용됩니다."슬라이스"배열에서. (참조PostgreSQL : 문서 : 9.0 : 토토.) 특정 SQL에서 방언(예: Embedded SQL)에서는 콜론을 사용하여 접두사 변수 이름.
별표(*)는 다음에서 사용됩니다. 테이블 행의 모든 필드를 나타내는 일부 컨텍스트 또는 복합 가치. 로 사용될 때도 특별한 의미가 있습니다. 집계 함수의 인수, 즉 집계에는 명시적인 매개변수가 필요하지 않습니다.
기간(.)은 다음에서 사용됩니다. 숫자 상수, 스키마, 테이블 및 열 이름.
주석은 double로 시작하는 일련의 문자입니다. 대시와 줄 끝까지 확장됩니다. 예:
-- 표준 SQL 주석입니다.
또는 C 스타일 블록 주석을 사용할 수 있습니다:
/* 여러 줄 주석 * 중첩 있음: /* 중첩된 블록 주석 */ */
댓글이 다음으로 시작하는 곳/*그리고 일치하는 항목으로 확장됩니다.*/. 이러한 블록 주석은 다음에 지정된 대로 중첩됩니다. SQL 표준이지만 C와 달리 주석 처리가 가능합니다. 기존 블록을 포함할 수 있는 더 큰 코드 블록 댓글.
댓글은 추가 진행 전에 입력 스트림에서 제거됩니다. 구문 분석을 수행하고 효과적으로 공백으로 대체됩니다.
테이블 4-2연산자의 우선순위와 연관성을 보여줍니다. 에서토토 캔. 대부분의 운영자 동일한 우선순위를 갖고 왼쪽 결합성을 갖습니다. 는 연산자의 우선순위와 연관성은 고정되어 있습니다. 파서에. 이로 인해 직관적이지 않은 동작이 발생할 수 있습니다. 에 대한 예를 들어 부울 연산자<그리고다음과 우선순위가 다릅니다 부울 연산자<=그리고=. 또한 때로는 필요할 수도 있습니다. 바이너리와 단항의 조합을 사용할 때 괄호를 추가하려면 연산자. 예를 들어:
5개를 선택하세요! - 6;
다음과 같이 구문 분석됩니다:
5개를 선택하세요! (-6);
파서가 모르기 때문에 - 너무 늦을 때까지 - 그!은(는) 후위 연산자로 정의되어 있습니다. 중위 하나. 이 경우 원하는 동작을 얻으려면 작성해야 합니다:
선택 (5 !) - 6;
이것은 확장성을 위해 지불하는 대가입니다.
표 4-2. 연산자 우선순위(감소)
| 연산자/요소 | 연관성 | 설명 |
|---|---|---|
| . | 왼쪽 | 테이블/열 이름 구분 기호 |
| :: | 왼쪽 | 토토 캔-스타일 형변환 |
| [ ] | 왼쪽 | 배열 요소 선택 |
| - | 맞아요 | 단항 빼기 |
| ^ | 왼쪽 | 지수 |
| * / % | 왼쪽 | 곱셈, 나눗셈, 모듈로 |
| + - | 왼쪽 | 덧셈, 뺄셈 |
| IS | 사실입니다, 거짓입니다, IS 알 수 없음, NULL임 | |
| ISNULL | 널 테스트 | |
| NOTNULL | null이 아닌지 테스트 | |
| (기타) | 왼쪽 | 기타 모든 기본 및 사용자 정의 연산자 |
| IN | 멤버십 설정 | |
| 사이 | 범위 격리 | |
| 겹침 | 시간 간격 중복 | |
| 좋아요 좋아요 비슷한 것 | 토토 캔 패턴 일치 | |
| < | 보다 작음, 보다 큼 | |
| = | 맞습니다 | 평등, 할당 |
| 아님 | 맞아요 | 논리적 부정 |
| 그리고 | 왼쪽 | 논리적 접속사 |
| 또는 | 왼쪽 | 논리적 분리 |
연산자 우선순위 규칙은 다음에도 적용됩니다. 내장 연산자와 이름이 같은 사용자 정의 연산자 위에서 언급한 연산자. 예를 들어,"+"일부 사용자 정의 데이터에 대한 연산자 유형을 입력하면 내장된 것과 동일한 우선순위를 갖게 됩니다."+"연산자, 당신의 것이 무엇이든 상관없습니다 그렇습니다.
스키마 한정 연산자 이름이 다음에서 사용되는 경우운영자구문(예: 에서:
연산자 3명 선택(pg_catalog.+) 4;
그운영자구조물이 다음으로 옮겨졌습니다. 에 표시된 기본 우선순위를 갖습니다.표 4-2for"다른 것"연산자. 이것은 내부에 어떤 특정 연산자가 나타나든 관계없이 true연산자().