SQL 입력은 시퀀스로 구성됩니다.명령. 명령은 시퀀스로 구성됩니다.토큰, 세미콜론에 의해 종료되었습니다 (";"). 입력 스트림의 끝 또한 명령을 종료합니다. 유효한 토큰은 다음에 따라 다릅니다 특정 명령의 구문.
토큰이 될 수 있습니다키워드, an식별자, a인용 식별자, a리터럴(또는 상수) 또는 특수 캐릭터 상징. 토큰은 일반적으로 공백 (공간, 탭, Newline), 그러나 모호성이 없다면 (이것은 일반적으로 특수 캐릭터가 인접한 경우에만 다른 토큰 유형).
추가로,댓글가 발생할 수 있습니다 SQL 입력. 그들은 토큰이 아니며 효과적으로 동등합니다 공백에.
예를 들어, 다음은 (구문 적으로) 유효한 SQL입니다 입력:
선택 *에서 my_table; my_table set a = 5 업데이트; my_table 값에 삽입 (3, 'hi there');
이것은 한 줄 당 하나의 명령 시퀀스입니다. 이것은 필요하지 않습니다. 둘 이상의 명령이 한 줄에있을 수 있으며 명령은 유용하게 선을 통해 분할 될 수 있습니다).
SQL 구문은 어떤 토큰에 대해서는 그다지 일관되지 않습니다. 명령을 식별하고 피연산자 또는 매개 변수입니다. 첫 번째 일반적으로 명령 이름이 거의 없으므로 위에서 예를 들어 우리는 일반적으로에 대해 말할 것입니다."선택", an"업데이트", 그리고 A"삽입"명령. 그러나 인스턴스업데이트항상 명령하십시오 a 필요set토큰이 나타납니다 특정 위치 및이 특별한 변형의삽입a도 필요합니다.값완료되기 위해. 정확한 구문 각 명령에 대한 규칙은에 설명되어 있습니다.Part VI.
select, 업데이트또는값in 위의 예는의 예입니다.키 단어, 즉 SQL에 고정 된 의미를 가진 단어 언어. 토큰my_tableanda의 예입니다.식별자. 그들은 테이블의 이름을 식별하고 명령에 따라 열 또는 기타 데이터베이스 개체 그들은 사용됩니다. 따라서 때로는 단순히라고 불립니다."이름". 핵심 단어 및 식별자 동일한 어휘 구조를 가지고 있습니다. 즉, 알 수 없습니다. 토큰이 식별자인지 또는 알지 못하는 핵심 단어 여부 언어. 키워드의 전체 목록은에서 찾을 수 있습니다.토토 커뮤니티 PostgreSQL : 문서 : 8.3 : SQL 키어.
SQL 식별자 및 키워드는 편지로 시작해야합니다. (a-Z그러나 또한 명성적인 자국과 비 라틴 문자가있는 문자) 또는 밑줄 (_). 후속 식별자 또는 키워드의 문자는 문자 일 수 있습니다. 밑줄, 숫자 (0-9) 또는 달러 표시 ($). 달러 표시는 허용되지 않습니다 SQL 표준의 편지에 따른 식별자 그들의 사용은 응용 프로그램을 덜 휴대용으로 만들 수 있습니다. SQL 표준은 숫자가 포함 된 핵심 단어를 정의하지 않습니다. 밑줄로 시작하거나 종료 하므로이 양식의 식별자 향후 확장과의 충돌 가능성에 안전합니다 표준.
시스템은 더 이상 사용하지 않습니다 보다지명-1 바이트의 바이트 식별자; 더 긴 이름은 명령으로 쓸 수 있지만, 그것들은 그것들입니다 잘릴 것입니다. 기본적으로paminatalen는 64이므로 최대 식별자입니다 길이는 63 바이트입니다. 이 한계가 문제가되면 가능할 수 있습니다 변경하여 제기지명상수src/include/pg_config_manual.h.
my_table set a = 5; 업데이트
동등하게 다음과 같이 작성할 수 있습니다.
my_table set a = 5; 업데이트
자주 사용되는 협약은 대윈 토토로 핵심 단어를 작성하는 것입니다. 및 소윈 토토의 이름 (예 :
my_table set a = 5; 업데이트
두 번째 종류가 있습니다 식별자 :구분 식별자또는인용 식별자. 그것은 임의의 캐릭터 순서를 둘러싸고 형성됩니다. 이중 인용문 ("). 구분 식별자는 항상 식별자이며 결코 키 단어가 아닙니다. 그래서"선택"a를 참조하는 데 사용될 수 있습니다 열 또는 테이블이라는 열"선택", 인용되지 않은 반면select키 단어로 취해서 구문 분석 오류가 발생합니다. 테이블 또는 열 이름이 예상되는 곳에서 사용하면 예 다음과 같은 인용 식별자로 작성할 수 있습니다.
업데이트 "my_table"set "a"= 5;
견적 된 식별자는 다음을 제외한 모든 문자를 포함 할 수 있습니다 코드 0이있는 문자. (이중 인용문을 포함하려면 두 가지를 쓰십시오 이중 따옴표.) 이것은 테이블 또는 열 이름을 구성 할 수 있습니다 그렇지 않으면 불가능할 것입니다. 공백 또는 앰퍼 샌드. 길이 제한은 여전히 적용됩니다.
식별자 인용은 또한 대소 문자에 민감하게 만듭니다 인용되지 않은 이름은 항상 소문자로 접습니다. 예를 들어, 식별자foo, foo및"foo"동일하게 고려윈 토토그러나"foo"and"foo"are 이 세 가지와 서로 다릅니다. (접는 로어 케이스에 대한 인용되지 않은 이름윈 토토SQL과 호환되지 않습니다 표준, 인용되지 않은 이름을 접어야한다고 말합니다. 대윈 토토. 따라서,foo동등한"foo"not"foo"표준에 따라. 원한다면 휴대용 응용 프로그램을 작성하십시오. 항상 인용하는 것이 좋습니다. 특정 이름이나 인용하지 마십시오.)
세 종류의암시 적으로 유형 된 상수in윈 토토: 문자열, 비트 줄 및 숫자. 상수는 명시 적 유형으로 지정할 수도 있습니다. 보다 정확한 표현 등을 가능하게 할 수 있습니다 시스템에 의한 효율적인 처리. 이러한 대안은 다음과 같습니다 다음 하위 섹션에서 논의 됨
문자열 상수 SQL은 단일로 둘러싸인 임의 문자 순서입니다. 인용문 ('), 예를 들어'이것은 문자열입니다'. 단일 쿼트를 포함합니다 문자열 상수 내에 문자, 인접한 싱글 두 개를 씁니다 인용문, 예 :'Dianne' 's Horse'. 메모 이게not이중 쿼트 윈 토토와 동일합니다 (").
공백에 의해서만 분리되는 두 개의 문자열 상수적어도 하나가 있습니다 Newline는 마치 마치 마치 연관되고 효과적으로 처리됩니다 문자열은 하나의 상수로 작성되었습니다. 예를 들어:
'foo'선택 '술집';
와 동일합니다.
'foobar'를 선택하십시오;
그러나 :
'foo' 'bar'; 선택
유효한 구문이 아닙니다. (이 약간 기괴한 행동입니다 지정SQL;윈 토토기준.)
윈 토토또한 수락"탈출"문자열 SQL 표준으로의 확장 인 상수. an Escape String Constant는 문자를 작성하여 지정됩니다e(위 또는 소문자) 직전 오프닝 싱글 인용문 (예 :e'foo '. (이스케이프 윈 토토열을 계속할 때 라인을 가로 지르는 일정, 쓰기e만 첫 번째 오프닝 견적 전에.) 탈출 윈 토토열 내에서 백 슬래시 윈 토토 (\) 시작 a C-likeBackslash Escape시퀀스, in 백 슬래시와 다음 문자의 조합 특별한 바이트 값을 나타냅니다.\ b백 스페이스,\ f양식 피드입니다.\ n\ r운송 반환입니다.\ t는 탭입니다. 지원되는 것도\Digits, 여기Digits옥탈을 나타냅니다 바이트 값 및\ xHexDigits, 여기서HexDigits는 16 진 바이트를 나타냅니다 값. (바이트가 당신을 시퀀싱하는 것은 당신의 책임입니다 작성은 서버 윈 토토 세트의 유효한 윈 토토입니다 인코딩.) 백 슬래시에 따른 다른 캐릭터가 취해집니다 윈 토토 그대로. 따라서 백 슬래시 윈 토토를 포함 시키려면 두 가지를 씁니다 백 슬래시 (\\). 또한 싱글 견적은 글을 통해 탈출 문자열에 포함될 수 있습니다\ ', 정상적인 방법 외에''.
주의 |
구성 매개 변수 인 경우Standard_Conforming_stringsisoff,윈 토토백 슬래시를 인식합니다 일반 및 탈출 문자열 상수에서 탈출합니다. 이것은 다음과의 뒤로 호환성을위한 것입니다 백 슬래시 탈출이 있었던 역사적 행동 항상 인식했습니다. 하지만Standard_Conforming_strings현재 기본값으로off, 기본값 로 변경됩니다ona 개선 된 표준 준수를위한 향후 릴리스. 따라서 응용 프로그램은 마이그레이션을 권장합니다 Backslash Escapes를 사용하는 것입니다. 사용해야하는 경우 a 특수 캐릭터를 대표하기위한 백 슬래시 탈출, 로 상수를 쓰십시오.e미래에 같은 방식으로 처리 될 것입니다. 릴리스. 외에Standard_Conforming_strings, 구성 매개 변수Escape_string_warningandbackslash_quote문자열의 백 슬래시 처리를 통제합니다 상수. |
코드 0이있는 윈 토토는 윈 토토열에있을 수 없습니다. 끊임없는.
그리고 문자열 상수를 지정하기위한 표준 구문 일반적으로 편리하고 언제 이해하기 어려울 수 있습니다. 원하는 문자열에는 많은 단일 따옴표가 포함되어 있습니다 각각은 배가가되어야합니다. 허용합니다 그러한 상황에서 더 읽기 쉬운 쿼리,윈 토토다른 방법을 제공합니다"달러 인용", 문자열을 쓰려면 상수. 1 달러 규모의 문자열 상수는 a로 구성됩니다 달러 표시 ($), 선택 사항"tag"0 이상의 문자, 또 다른 달러 표시, 임의의 캐릭터 순서 문자열 컨텐츠, 달러 표시, 동일한 태그를 구성합니다. 이 달러 견적과 1 달러 표시를 시작했습니다. 예를 들어, 여기 문자열을 지정하는 두 가지 방법입니다"Dianne 's Horse"달러 인용 사용 :
$$ Dianne 's Horse $$ $ omegag $ Dianne 's Horse $ omegag $
달러에 따른 문자열 내부, 단일 따옴표 탈출 할 필요없이 사용할 수 있습니다. 실제로, 아니요 1 달러 규모의 문자열 안에있는 문자는 다음과 같습니다. 문자열 내용은 항상 문자 그대로 작성됩니다. 백 슬래시 특별하지 않으며 달러 표시도 아닙니다. 오프닝 태그와 일치하는 시퀀스의 일부입니다.
달러 규모의 문자열 상수를 둥지로 둘 수 있습니다 각 둥지 수준에서 다른 태그를 선택합니다. 이것은 가장입니다 작문 기능 정의에 일반적으로 사용됩니다. 을 위한 예:
$ function $ 시작하다 반환 ($ 1 ~ $ q $ [\ t \ r \ n \ v \\] $ q $); 끝; $ function $
여기, 시퀀스$ q $ [\ t \ r \ n \ v \\] $ q $는 1 달러 인용 된 것을 나타냅니다 윈 토토 그대로[\ t \ r \ n \ v \\]기능 본체가에 의해 실행될 때 인식됩니다윈 토토. 그러나 이후 시퀀스는 Delimiter를 인용하는 외부 달러와 일치하지 않습니다$ function $, 그것은 조금 더 있습니다 외부 줄이 관심 있는.
1 달러 규모의 문자열의 태그는 다음을 따릅니다. 할 수 없다는 점을 제외하고 인용되지 않은 식별자와 동일한 규칙 달러 표시를 포함합니다. 태그는 사례에 민감하므로$ tag $ string 컨텐츠 $ tag $정확하지만$ tag $ 윈 토토열 내용 $ tag $is.
키워드를 따르는 달러 인용 문자열 식별자는 공백으로 분리되어야합니다. 그렇지 않으면 Delimiter를 인용하는 달러는 선행 식별자.
달러 인용은 SQL 표준의 일부가 아니지만 종종 복잡한 문자열을 작성하는보다 편리한 방법입니다 표준 호환 단일 견적 구문보다 리터럴. 그것 문자열 상수를 나타낼 때 특히 유용합니다 다른 상수 내부에서는 절차에 종종 필요합니다 기능 정의. 단일 쿼트 구문으로 각각 위의 예에서 Backslash는 다음과 같이 작성해야합니다. 4 개의 백 슬래시 원래 문자열을 구문 분석 할 때 내부 문자열 상수는 기능 중에 다시 파열됩니다 실행.
비트 스트링 상수는 일반 문자열 상수처럼 보입니다 A와 함께B(위 또는 소문자) 오프닝 견적 직전 (개입 없음 Whitespace), 예 :B'1001 '. 유일한 비트 스트링 상수 내에서 허용되는 문자0및1.
또는 비트 스트링 상수를 지정할 수 있습니다 선두를 사용하는 16 진전 표기법x(상단 또는 소문자), 예 :x'1ff '. 이 표기법은 a와 같습니다 각각 4 개의 이진 숫자로 비트 스트링 상수 16 진수 숫자.
비트 스트링 상수의 두 형태는 계속 될 수 있습니다 일반 문자열 상수와 같은 방식으로 선. 달러 인용문은 비트 스트링 상수에서 사용할 수 없습니다.
숫자 상수는 이러한 일반적인 형태로 허용됩니다 :
Digits Digits. [Digits] [E [+-]Digits] [Digits].Digits[E [+-]Digits]DigitsE [+-]Digits
여기서Digits하나 또는 더 많은 소수점 숫자 (0-9). 적어도 하나의 숫자가 있어야합니다 소수점 전후에 사용되는 경우. 적어도 한 자리는 지수 마커를 따라야합니다 (e), 하나가있는 경우. 아무것도 없습니다 상수에 내장 된 공백 또는 기타 문자. 메모 선행 플러스 또는 마이너스 부호가 실제로 상수의 일부로 간주됩니다. 적용되는 운영자입니다 상수.
유효한 숫자 상수의 일부 예입니다.
42
3.5
4.
.001
5E2
1.925E-3
숫자 소수점이나 an을 포함하지 않는 상수 지수는 처음에 유형으로 추정됩니다정수값이 유형에 맞는 경우Integer(32 비트); 그렇지 않으면 그것은 추정됩니다 유형bigint값이 유형에 맞는 경우bigint(64 비트); 그렇지 않으면 복용됩니다 유형숫자. 상수 소수점 및/또는 지수는 항상 초기에 포함됩니다 유형으로 추정숫자.
숫자 상수의 초기에 할당 된 데이터 유형은 유형 해상도 알고리즘의 시작점입니다. ~ 안에 대부분의 경우 상수는 자동으로 강요됩니다. 컨텍스트에 따라 가장 적절한 유형. 필요한 경우 숫자 값을 구체적으로 해석하도록 강요 할 수 있습니다. 캐스팅하여 데이터 유형.예를 들어, 숫자 값을 유형Real(float4) 쓰기 :
Real '1.23' - 문자열 스타일 1.23 :: Real -Postgresql (역사적) 스타일
실제로 장군의 특별한 경우입니다 다음에 논의 된 캐스팅 표기법.
an의 상수임의의유형을 입력 할 수 있습니다 다음 표기법 중 하나 사용 :
type'String' 'String'::타입캐스트 ( 'String' 처럼타입)
문자열 상수의 텍스트가 입력으로 전달됩니다 유형에 대한 변환 루틴타입. 결과는 상수입니다 표시된 유형. 명시 적 유형 캐스트는 다음에 생략 할 수 있습니다 상수 유형에 대한 모호성은 없습니다. (예를 들어, 테이블에 직접 할당 될 때 열),이 경우 자동으로 강요됩니다.
문자열 상수는 정기적으로 사용하여 작성할 수 있습니다 SQL 표기법 또는 달러 인용.
함수와 같은 구문 :
typename( 'String' )
그러나 모든 유형 이름을 이런 식으로 사용할 수있는 것은 아닙니다. 보다섹션 4.2.8자세한 내용.
the::, 32527_32535및 기능 전화 구문도 가능합니다 임의의 런 타임 유형 변환을 지정하는 데 사용됩니다 표현,섹션 4.2.8. 구문 모호성을 피하기 위해타입'String'구문 만 사용될 수 있습니다 간단한 문자 상수의 유형을 지정하십시오. 또 다른 에 대한 제한type'String'구문은 그렇지 않다는 것입니다 배열 유형에 대한 작업; 사용::또는cast ()an의 유형을 지정합니다 배열 상수.
thecast ()구문을 준수합니다 SQL. 그만큼타입'String'구문은 일반화입니다 표준 : SQL 은이 구문을 몇 명에 대해서만 지정합니다. 데이터 유형이지만윈 토토모든 유형에 대해 허용합니다. 의 구문::역사적윈 토토사용 가능 함수 콜 구문.
운영자 이름은 최대의 시퀀스입니다.지명-1 (기본적으로 63) 문자 다음 목록 :
+-*/< = ~! @#%^& | `?
거기 그러나 운영자 이름에 대한 몇 가지 제한 사항입니다.--and/*연산자의 어느 곳에서나 나타날 수 없습니다 이름, 그들은 논평.
다중 윈 토토 연산자 이름은 끝날 수 없습니다+또는-, 이름 에도이 중 하나 이상이 포함되지 않는 한 캐릭터 :
~! @#%^& | `?
예,@-허용 연산자입니다 이름, 그러나*-그렇지 않습니다. 이것 제한 허용윈 토토SQL 준수를 구문 분석합니다 토큰 사이의 공간이 필요없는 쿼리.비 SQL 표준 운영자 이름으로 작업 할 때는 그렇습니다 일반적으로 인접한 연산자와 공간을 분리해야합니다 모호성을 피하십시오. 예를 들어, 왼쪽 단체를 정의한 경우 운영자 이름@, 당신은 쓸 수 없습니다x*@y; 당신은 작성해야합니다x* @y윈 토토두 개의 연산자 이름으로 읽습니다 하나가 아닙니다.
영숫자가 아닌 일부 문자는 특별합니다 연산자와는 다른 의미입니다. 에 대한 세부 사항 사용법은 각각의 위치에서 찾을 수 있습니다. 구문 요소가 설명되어 있습니다. 이 섹션은 조언하기 위해서만 존재합니다 이들의 존재와 요약 캐릭터.
달러 표시 ($) 다음에 숫자는 위치 매개 변수를 나타내는 데 사용됩니다. 함수 정의 또는 준비된 진술의 본문. ~ 안에 다른 상황은 달러 표시가 식별자의 일부가 될 수 있습니다. 또는 1 달러 규모의 문자열 상수.
괄호 (()) 그룹 표현과 우선 순위 시행에 대한 일반적인 의미. 경우에 따라 고정 된 것의 일부로 괄호가 필요합니다. 특정 SQL 명령의 구문.
브래킷 ([])는 익숙합니다 배열의 요소를 선택하십시오. 보다섹션 8.14자세한 내용은 배열.
쉼표 (,)는 일부에서 사용됩니다 a의 요소를 분리하기위한 구문 구성 목록.
세미콜론 (;) 종료 SQL 명령. 명령 내에서 어디에도 나타날 수 없습니다. 문자열 상수 또는 인용 식별자를 제외하고.
콜론 (:) 선택에 사용됩니다"슬라이스"배열에서. (보다PostgreSQL : 문서 : 8.3 : 토토 사이트.) 특정 SQL에서 방언 (예 : 내장 SQL), 결장은 접두사 변수 이름.
별표 (*)가 사용됩니다 테이블 행의 모든 필드를 나타내는 일부 컨텍스트 또는 복합 가치. 또한 사용될 때 특별한 의미가 있습니다 골재 기능의 인수, 즉 집계는 명시적인 매개 변수가 필요하지 않습니다.
기간 (.)가 사용됩니다 숫자 상수 및 스키마, 테이블 및 열 이름.
주석은 시작하는 임의의 문자 순서입니다 이중 대시와 라인 끝까지 연장되면 예 :
- 이것은 표준 SQL 주석입니다.
또는 C 스타일 블록 댓글을 사용할 수 있습니다 :
/* 멀티 린 댓글 * 중첩 : / * 중첩 블록 주석 * / */
주석이 시작되는 곳/*그리고 일치하는 발생으로 확장*/. 이 블록 주석은 지정된대로 둥지입니다 SQL 표준이지만 C와 달리 댓글을 달 수 있습니다. 기존 블록을 포함 할 수있는 더 큰 코드 블록 댓글.
추가 전에 입력 스트림에서 주석이 제거됩니다. 구문 분석 및 효과적으로 공백으로 대체됩니다.
테이블 4-1운영자의 우선 순위와 연관성을 보여줍니다 안에윈 토토. 대부분의 운영자 우선 순위가 동일하고 좌회전 적입니다. 그만큼 운영자의 우선 순위와 연관성은 유용합니다 파서로. 이것은 비 직관적 행동으로 이어질 수 있습니다. ~을 위한 부울 연산자 예<and다른 우선 순위가 있습니다 부울 운영자<=및 =. 또한 때때로 필요할 것입니다 이진과 단시의 조합을 사용할 때 괄호를 추가하려면 운영자. 예를 들어:
5를 선택하십시오! -6;
:로 구문 분석됩니다.
5를 선택하십시오! (-6);
파서가 너무 늦을 때까지 파서가 전혀 모르기 때문에!는 Postfix 연산자로 정의됩니다 디스 픽스 하나. 이 경우 원하는 동작을 얻으려면, 당신은 당신입니다 필기해야합니다 :
select (5!) -6;
이것은 확장 성을 위해 지불하는 가격입니다.
표 4-1. 연산자 우선 순위 (감소)
연산자/요소 | 연관성 | 설명 |
---|---|---|
. | 왼쪽 | 테이블/열 이름 분리기 |
:: | 왼쪽 | 윈 토토-스타일 typecast |
[ ] | 왼쪽 | 배열 요소 선택 |
- | 오른쪽 | Unary 마이너스 |
^ | 왼쪽 | 지수 |
* / % | 왼쪽 | 곱셈, 분할, 모듈로 |
+ - | 왼쪽 | 추가, 뺄셈 |
is | 진실, 거짓, IS 알려지지 않은, is null | |
isnull | null 테스트 | |
notnull | 널 테스트 | |
(다른) | 왼쪽 | 다른 모든 기본 및 사용자 정의 연산자 |
in | 멤버십 설정 | |
사이 | 범위 격리 | |
오버랩 | 시간 간격 겹침 | |
Like ilike 유사한 | 윈 토토열 패턴 매칭 | |
< | 보다 | |
= | 오른쪽 | 평등, 과제 |
아님 | 오른쪽 | 논리적 부정 |
및 | 왼쪽 | 논리적 연결 |
또는 | 왼쪽 | 논리적 분리 |
운영자 우선 순위 규칙도 적용됩니다 내장 이름과 동일한 이름을 가진 사용자 정의 연산자 위에서 언급 한 운영자. 예를 들어, A를 정의하는 경우"+"일부 사용자 정의 데이터에 대한 연산자 유형은 내장과 동일한 우선 순위를 갖습니다"+"운영자, 당신의 것이 무엇이든 하다.
스키마 자격 운영자 이름이 사용되는 경우운영자예를 들어 구문 안에:
3 연산자를 선택하십시오 (PG_CATALOG.+) 4;
the운영자구성을 가져옵니다 에 기본 우선 순위가 표시됩니다.표 4-1for"다른"운영자. 이것은 어떤 특정 운영자 이름이 내부에 나타나든지Operator ().