이 문서는 지원되지 않는 버전의 Postgre토토 핫 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

the토토 핫언어

대부분의 현대 관계 언어의 경우와 마찬가지로토토 핫는 튜플 관계를 기반으로합니다 계산법. 결과적으로 튜플 관계형 미적분학 (또는 동등하게 관계 적 대수) 할 수 있습니다 또한를 사용하여 공식화됩니다.토토 핫. 거기 그러나 관계형 대수의 범위를 넘어서는 기능입니다 또는 미적분학. 다음은에서 제공 한 몇 가지 추가 기능 목록입니다.토토 핫그것은 관계의 일부가 아닙니다 대수 또는 미적분학 :

  • 삽입, 삭제 또는 수정을위한 명령 데이터.

  • 산술 기능 : in토토 핫산술 작업과 비교 (예 : a <b + 3. + 또는 기타 산술 운영자는 관계형 대수학이나 안에 나타나지 않습니다 관계형 미적분학.

  • 할당 및 인쇄 명령 : 인쇄 할 수 있습니다. 쿼리에 의해 구성되고 계산 된 관계 관계 이름과의 관계.

  • 집계 함수 :와 같은 작업평균, Sum, max등을 열에 적용 할 수 있습니다 단일 수량을 얻는 관계.

select

가장 자주 사용되는 명령토토 핫토토 핫는 데이터를 검색하는 데 사용되는 SELECT 문입니다. 구문은 다음과 같습니다.

선택 [모두 | 별개 
           * |expr_1[asc_alias_1] [, ... 
                [,expr_k[asC_ALIAS_K]]]
   토토 핫table_name_1[t_alias_1] 
        [, ... [,table_name_n[t_alias_n]]]]
   [어디조건]
   [그룹 byname_of_attr_i[, ... [,name_of_attr_j]] [hade조건]]]
   [Union [모두] | 교차 |  select ...]
   [주문name_of_attr_i[ASC | desc] 
             [, ... [,name_of_attr_j[asc | desc]]]];

이제 선택의 복잡한 구문을 설명합니다. 다양한 예제가있는 진술. 예제에 사용 된 테이블 정의공급 업체 및 부품 데이터베이스.

단순 selects

SELECT 문을 사용하는 몇 가지 간단한 예는 다음과 같습니다.

예 69-4. 자격이있는 간단한 쿼리

테이블 부분에서 모든 튜플을 검색하려면 속성 가격은 10보다 큽니다. 다음 쿼리를 공식화합니다.

부품토토 핫 * 선택
     여기서 가격 10;
테이블 받기 :
pno |  pname |  가격
                  -----+--------+--------
                    3 |  볼트 |   15
                    4 |  캠 |   25

select 문에서 "*"사용하면 모든 속성이 전달됩니다. 테이블에서. PNAME 속성 만 검색하려면 그리고 테이블 부분에서 가격은 다음을 사용합니다.

PNAME, 가격을 선택하십시오 
   부분토토 핫
   여기서 가격 10;
이 경우 결과는 다음과 같습니다.
pname |  가격
                     --------+--------
                      볼트 |   15
                      캠 |   25
토토 핫선택 관계 대수의 "투영"에 해당합니다. "선택"(참조관계형 대수자세한 내용은).

Where 절의 자격은 논리적으로 될 수 있습니다. 키워드를 사용하여 연결하거나 :

PNAME, 가격을 선택하십시오 
   부분토토 핫
   여기서 pname = '볼트'및
         (가격 = 0 또는 가격 <15);
결과로 이어질 것입니다 :
pname |  가격
                     --------+--------
                      볼트 |   15

산술 연산은 대상 목록에서 사용될 수 있습니다. WHERE 절. 예를 들어, 우리가 얼마나 많이 알고 싶다면 우리가 사용할 수있는 두 부분을 가져 가면 비용이 듭니다. 다음 쿼리 :

pname, 가격 * 2를 더블로 선택하십시오
   부분토토 핫
   여기서 가격 * 2 <50;
그리고 우리는 얻을 수 있습니다 :
pname |  더블
                     --------+-------
                      나사 |    20
                      너트 |    16
                      볼트 |    30
키워드 다음에 새로운 단어가 새로운 것과 같은 단어가 두 배가된다는 점에 유의하십시오. 두 번째 열의 제목. 이 기술은 모든 것에 사용할 수 있습니다 결과에 새 타이틀을 할당하려면 대상 목록의 요소 열. 이 새로운 제목은 종종 별칭이라고합니다. 별칭 나머지 쿼리 전체에서 사용할 수 없습니다.

조인

다음 예제는 방법을 보여줍니다조인토토 핫.

3 개의 테이블 공급 업체에 가입하려면 일부 및 판매합니다. 일반적인 속성 우리는 다음 진술을 공식화합니다.

s.sname, p.pname을 선택하십시오
   공급 업체 S, Part P는 SE를 판매합니다
   여기서 s.sno = se.sno 및
         p.pno = se.pno;
결과적으로 다음 테이블을 가져옵니다 :
SNAME | pname
                      -------+-------
                       스미스 | 나사
                       스미스 | 너트
                       존스 | 캠
                       아담스 | 나사
                       아담스 | 볼트
                       블레이크 | 너트
                       블레이크 | 볼트
                       블레이크 | 캠

From Clause토토 핫 우리는 모든 것에 대한 별칭 이름을 소개했습니다. 공통 지명 된 속성 (SNO 및 PNO)이 있기 때문에 관계 관계 중. 이제 우리는 공통점을 구별 할 수 있습니다 속성 이름을 별칭 이름과 점이 뒤 따릅니다. 결합은 동일하게 계산됩니다 에 표시된 방식an 내부 조인. 먼저 직교 제품 공급 업체 × 부품 × 판매 파생됩니다. 이제 주어진 조건을 만족하는 튜플 만 WHERE 절에서 선택됩니다 (즉, 공통 명명 된 속성 동일해야합니다). 마지막으로 S.Sname 이외의 모든 열을 투사합니다 및 p.pname.

집계 연산자

토토 핫집계 연산자를 제공합니다 (예 : Avg, Count, Sum, Min, Max) 속성 이름을받는 논쟁으로. 집계 연산자의 값이 계산됩니다 전체의 지정된 속성 (열)의 모든 값에 대해 테이블. 쿼리에 그룹이 지정된 경우 계산이 완료됩니다. 그룹의 값에 대해서만 (다음 섹션 참조)

예 69-5. 집계

테이블 부분의 모든 부품의 평균 비용을 알고 싶다면 다음 쿼리를 사용합니다.

AVG_PRICE로 AVG (가격)를 선택하십시오
   부분토토 핫;

결과는 다음과 같습니다.

avg_price
                        ----------
                           14.5

테이블 부분에 얼마나 많은 부품이 저장되어 있는지 알고 싶다면 우리 진술을 사용하십시오 :

Count (PNO) 선택
   부분토토 핫;
get :
카운트
                          -------
                             4

집계 by 여러 떼

토토 핫하나가 분할 할 수 있습니다 테이블의 튜플. 그런 다음 집계 연산자 위에서 설명한 그룹에 적용될 수 있습니다 (즉, 값 집계 연산자는 더 이상 모든 값에 대해 계산되지 않습니다. 지정된 열이지만 그룹의 모든 값을 초과합니다. 따라서 집계 연산자는 모든 그룹에 대해 개별적으로 평가됩니다.)

튜플을 그룹으로 분할하는 것은 키워드그룹 by다음 목록이 뒤 따릅니다 그룹을 정의하는 속성. 우리가 있다면그룹별 그룹1, & tdot;, aK우리 두 개의 튜플이 모든 속성에 동의하는 경우에만 동일한 그룹 에이1, & tdot;, aK.

예 69-6. 집계

모든 공급 업체가 판매하는 부품 수를 알고 싶다면 쿼리를 공식화합니다.

S.Sno, S.Sname, Count (se.pno) 선택
   공급 업체토토 핫 SE를 판매합니다
   여기서 s.sno = se.sno
   s.sno, s.sname;의 그룹
and get :
sno | SNAME | 세다
                    -----+-------+-------
                      1 | 스미스 |   2
                      2 | 존스 |   1
                      3 | 아담스 |   2
                      4 | 블레이크 |   3

이제 여기서 무슨 일이 일어나고 있는지 살펴 보겠습니다. 먼저 테이블 공급 업체의 가입 및 판매는 다음과 같습니다.

S.Sno | s.sname | se.pno
                 -------+--------+--------
                    1 |  스미스 |   1
                    1 |  스미스 |   2
                    2 |  존스 |   4
                    3 |  아담스 |   1
                    3 |  아담스 |   3
                    4 |  블레이크 |   2
                    4 |  블레이크 |   3
                    4 |  블레이크 |   4

다음으로 우리는 모든 튜플을 넣어 튜플을 그룹으로 분할합니다. S.Sno 및 S.Sname 속성 모두에 동의합니다.

S.Sno | s.sname | se.pno
                 -------+--------+--------
                    1 |  스미스 |   1
                                  |   2
                 -----------------------------
                    2 |  존스 |   4
                 -----------------------------
                    3 |  아담스 |   1
                                  |   3
                 -----------------------------
                    4 |  블레이크 |   2
                                  |   3
                                  |   4

이 예토토 핫는 4 개의 그룹을 얻었고 이제 우리는 총으로 이어지는 모든 그룹에 집계 연산자가 계산됩니다. 위에 주어진 쿼리 결과.

Group By and Aggregate를 사용한 쿼리 결과에 대해서는 이해하기 위해 연산자가 그룹화 된 속성도 나타납니다. 대상 목록토토 핫. 모든 추가 속성이 나타나지 않습니다 응집체를 사용하여 만 선택할 수 있습니다. 기능. 반면에 집계 함수를 사용할 수 없습니다. 절에 의해 그룹에 나타나는 속성

hading clause는 Where 조항과 매우 흡사하며 사용됩니다. 주어진 자격을 만족시키는 그룹 만 고려합니다. 있는 조항. haved clause토토 핫 허용 된 표현 집계 함수를 포함해야합니다. 평범한 표현을 사용합니다 속성은 WHERE 절에 속합니다. 반면에 매번 골재 기능과 관련된 표현은 조항이 있습니다.

예 69-7. hade

우리가 하나 이상의 부품을 판매하는 공급 업체 만 원한다면 우리는 쿼리 사용 :

S.Sno, S.Sname, Count (se.pno) 선택
   공급 업체토토 핫 SE를 판매합니다
   여기서 s.sno = se.sno
   s.sno, s.sname에 의해 그룹
   카운트 (se.pno) 1;
get :
sno | SNAME | 세다
                    -----+-------+-------
                      1 | 스미스 |   2
                      3 | 아담스 |   2
                      4 | 블레이크 |   3

서브 쿼리

서브 쿼리의 사용에 대한 조항에서 (subselects)는 값이 예상되는 모든 장소에서 허용됩니다. 이 경우 하위 쿼리를 평가하여 값을 도출해야합니다. 첫 번째. 하위 Queries의 사용은 표현력을 확장합니다.토토 핫.

예 69-8. subselect

우리가 모든 부품보다 더 큰 가격을 가진 모든 부품을 알고 싶다면 '나사'라는 부품 우리는 쿼리를 사용합니다 :

선택 * 
   부분토토 핫 
   여기서 가격 (부분토토 핫 가격을 선택하십시오
                  여기서 pname = '나사');

결과는 다음과 같습니다.

pno |  pname |  가격
                  -----+--------+--------
                    3 |  볼트 |   15
                    4 |  캠 |   25

위의 쿼리를 보면 키워드 선택을 볼 수 있습니다. 두 번. 쿼리의 시작 부분에있는 첫 번째 - 우리는 그것을 OUTER SELECT와 WHERE 절에있는 것입니다. 중첩 쿼리를 시작합니다 - 우리는 그것을 내부라고합니다. 선택하다. 외부의 모든 튜플에 대해 내부 선택은 평가됩니다. 모든 평가 후 우리는 가격을 알고 있습니다 튜플이 '나사'라는 이름의 튜플은 더 큽니다.

부품을 판매하지 않는 모든 공급 업체를 알고 싶다면 (예 : 데이터베이스토토 핫 이러한 공급 업체를 제거 할 수 있도록) 우리는 사용:

선택 * 
   공급 업체토토 핫
   존재하지 않는 곳
             (Select * From Sells SE
              여기서 se.sno = s.sno);

이 예토토 핫는 모든 공급 업체가 있기 때문에 결과가 비어 있습니다. 적어도 하나의 부분을 판매합니다. 외부토토 핫 s.sno를 사용합니다 내부 선택의 WHERE 절 내토토 핫 선택하십시오. 설명대로 하위 쿼리 위는 외부의 모든 튜플에 대해 평가됩니다. 쿼리, 즉 s.sno의 값은 항상 실제토토 핫 가져옵니다. 외부 선택의 튜플.

Union, 교차,

이러한 운영은 노조, 교차 및 설정을 계산합니다 두 개의 하위 쿼리에 의해 유래 된 튜플의 이론적 차이.

예 69-9. Union, 교차, 제외

다음 쿼리는 Union의 예입니다.

S.Sno, S.Sname, S.City를 선택하십시오
   공급 업체토토 핫
   여기서 s.sname = 'Jones'
   노동 조합
   s.sno, s.sname, s.city를 선택하십시오
   공급 업체토토 핫
   여기서 s.sname = 'Adams';
결과를 제공합니다 :
sno | SNAME |  도시
                    -----+-------+--------
                      2 | 존스 | 파리
                      3 | 아담스 | 비엔나

여기서 교차의 예 :

S.Sno, S.Sname, S.City를 선택하십시오
   공급 업체토토 핫
   여기서 s.sno 1
   교차
   s.sno, s.sname, s.city를 선택하십시오
   공급 업체토토 핫
   여기서 s.sno 2;
결과를 제공합니다 :
sno | SNAME |  도시
                    -----+-------+--------
                      2 | 존스 | 파리
쿼리의 두 부분에 의해 반환 된 유일한 튜플은 $ sno = 2 $.를 가진 것입니다.

마지막으로 예제 :

S.Sno, S.Sname, S.City를 선택하십시오
   공급 업체토토 핫
   여기서 s.sno 1
   제외하고
   s.sno, s.sname, s.city를 선택하십시오
   공급 업체토토 핫
   여기서 s.sno 3;
결과를 제공합니다 :
스노 | SNAME |  도시
                    -----+-------+--------
                      2 | 존스 | 파리
                      3 | 아담스 | 비엔나

데이터 정의

데이터 정의에 포함 된 명령 세트가 포함되어 있습니다. 그만큼토토 핫언어.

생성 테이블

데이터 정의의 가장 기본적인 명령은 새로운 관계 (새 테이블)를 만듭니다. 생성의 구문 테이블 명령은 다음과 같습니다.

테이블 생성table_name(name_of_attr_1 type_of_attr_1[,name_of_attr_2 type_of_attr_2[, ...]);

예 69-10. 테이블 생성

정의 된 테이블을 작성하려면공급 업체 및 부품 데이터베이스수행원토토 핫진술은입니다 사용된:

테이블 공급 업체 생성
                (SNO 정수,
                 Sname Varchar (20),
                 City Varchar (20));
테이블 부분을 만듭니다
                (PNO 정수,
                 PNAME VARCHAR (20),
                 가격 소수점 (4, 2));
테이블 판매 판매
                (SNO 정수,
                 PNO 정수);

데이터 유형토토 핫

다음은 지원되는 일부 데이터 유형의 목록입니다토토 핫:

  • 정수 : 서명 된 풀 워드 바이너리 정수 (31 비트 정도).

  • Smallint : 서명 된 Halfword Binary Integer (15 비트 정도).

  • 소수점 (P[,Q]) : 서명 된 소수점 수의 서명P가정 된 정밀도Q그들 중 10 진수로 바로 가리키다. (15 ≥PQQ ≥ 0). 만약에Q생략된다. 0으로 간주된다.

  • float : 서명 된 더블 워드 플로팅 포인트 번호.

  • char (n) : 고정 길이 길이의 문자열n.

  • varchar (n) : 다양한 길이 최대 길이의 문자열n.

생성 색인

지수는 관계에 대한 액세스 속도를 높이기 위해 사용됩니다. 관계 인 경우r속성에 대한 색인이 있습니다a그러면 모든 튜플을 검색 할 수 있습니다tt(a) =a숫자에 대략 비례하는 시간 그런 튜플의t의 크기에 비례하는 시간r.

in 인덱스 생성토토 핫생성 인덱스 명령이 사용됩니다. 구문은 다음과 같습니다.

색인 생성index_nameontable_name(name_of_attribute);

예 69-11. 색인 생성

Attribute Sname of Relation에서 I라는 색인을 작성하려면 공급 업체는 다음과 같은 진술을 사용합니다.

색인 생성 i
   공급 업체 (Sname);

생성 된 인덱스는 자동으로, 즉 a 새로운 튜플은 관계 공급 업체에 삽입됩니다. 적응. 사용자가 인덱스는 속도가 증가합니다.

생성 보다

보기는 a로 간주 될 수 있습니다.가상 테이블, 즉, 그렇지 않은 테이블물리적데이터베이스에는 존재하지만 마치 마치 마치 마치. 대조적으로, 우리가 a에 대해 이야기 할 때기본 테이블실제로 물리적으로 저장되어 있습니다 물리적 어딘가에 테이블의 각 행에 대응 저장.

보기에는 자체적으로 물리적으로 분리되어 있지 않습니다. 구별 가능한 저장된 데이터. 대신, 시스템은 보기 정의 (즉, 액세스 방법에 대한 규칙 뷰를 구체화하기 위해 물리적으로 저장된베이스 테이블) 시스템 카탈로그 어딘가에 (참조시스템 카탈로그). a 보기를 구현하기위한 다양한 기술에 대한 토론 참조SIM98.

in토토 핫the보기 만들기명령은보기를 정의하는 데 사용됩니다. 그만큼 구문은 :

보기 만들기View_Nameasselect_stmt

여기서select_stmt유효합니다 정의 된대로 선택select. 참고select_stmt보기가있을 때 실행되지 않습니다 생성. 방금 저장되어시스템 카탈로그그리고보기에 대한 쿼리가있을 때마다 실행됩니다. 만들어진.

다음보기 정의를 제공하십시오 (테이블을 사용합니다. 에서공급 업체 및 부품 데이터베이스다시) :

View London_Suppliers를 작성하십시오
      s.sname, p.pname을 선택하십시오
         공급 업체 S, Part P는 SE를 판매합니다
         여기서 s.sno = se.sno 및
               p.pno = se.pno 및
               s.city = '런던';

이제 우리는 이것을 사용할 수 있습니다가상 관계 London_Suppliers마치 마치 다른 것처럼 기본 테이블 :

선택 *
   London_Suppliers에서
   여기서 p.pname = '나사';
다음 표를 반환합니다.
SNAME | pname
                      -------+-------
                       스미스 | 나사

이 결과를 계산하려면 데이터베이스 시스템이 a를 수행해야합니다.숨겨진기본 테이블 공급 업체에 대한 액세스, 먼저 판매 및 부분. 주어진 쿼리를 실행하여 그렇게합니다 해당 기본 테이블에 대한보기 정의. 그 후 추가 자격 (보기에 대한 쿼리에 포함)은 결과 테이블을 얻으려면 적용하십시오.

드롭 테이블, 드롭 인덱스, 드롭 뷰

테이블을 파괴하려면 (그 테이블에 저장된 모든 튜플 포함) 드롭 테이블 명령이 사용됩니다.

드롭 테이블table_name;

공급 업체 테이블을 파괴하려면 다음 진술을 사용하십시오.

드롭 테이블 공급 업체;

드롭 인덱스 명령은 색인을 파괴하는 데 사용됩니다.

Drop Indexindex_name;

마지막으로 주어진보기를 파괴하려면 명령 낙하보기 :

드롭 뷰View_Name;

데이터 시장 조작

삽입 안으로

일단 테이블이 생성되면 (참조테이블 생성), 채워질 수 있습니다 명령을 사용하여 튜플삽입. 구문은 다음과 같습니다.

삽입table_name(name_of_attr_1[,name_of_attr_2[, ...]])
   값 (val_attr_1[,val_attr_2[, ...]);

첫 번째 튜플을 관계 공급 업체에 삽입하려면 (공급 업체 및 부품 데이터 베이스) 우리는 다음 진술을 사용합니다.

공급 업체에 삽입 (Sno, Sname, City)
   값 (1, 'Smith', 'London');

첫 번째 튜플을 관계에 판매하는 데 삽입하려면 다음을 사용합니다.

판매에 삽입 (SNO, PNO)
   값 (1, 1);

업데이트

관계에서 튜플의 하나 이상의 속성 값을 변경하려면 업데이트 명령이 사용됩니다. 구문은 다음과 같습니다.

업데이트table_nameSETname_of_attr_1=value_1[, ... [,name_of_attr_k=value_k]]
   어디조건;

부품 '나사'의 속성 값을 변경하려면 우리가 사용하는 관계 부분 :

업데이트 부분
   가격 = 15
   여기서 pname = '나사';

이름 인 튜플의 속성 가격의 새 값 '나사'는 이제 15입니다.

삭제

특정 테이블에서 튜플을 삭제하려면 명령 삭제를 사용하십시오. 에서. 구문은 다음과 같습니다.

삭제table_name어디조건;

테이블 공급 업체의 'Smith'라는 공급 업체를 삭제하려면 다음 진술이 사용됩니다.

공급 업체에서 삭제
   여기서 sname = 'Smith';

시스템 카탈로그

매번토토 핫데이터베이스 시스템시스템 카탈로그추적하는 데 사용됩니다 어떤 테이블, 뷰 인덱스 등이 데이터베이스에 정의되어 있습니다. 이것들 시스템 카탈로그는 마치 정상적인 관계 인 것처럼 쿼리 할 수 ​​있습니다. 예를 들어 뷰의 정의에 사용되는 카탈로그가 하나 있습니다. 이 카탈로그는보기 정의에서 쿼리를 저장합니다. 언제든지 보기에 대한 쿼리가 이루어지고 시스템이 먼저를 가져옵니다.정의 쿼리보기카탈로그토토 핫 사용자 쿼리를 진행하기 전에보기를 구체화합니다 (참조Simkovics, 1998a 보다 자세한 설명). 시스템에 대한 자세한 내용은 카탈로그는 참조날짜, 1994.

내장토토 핫

이 섹션토토 핫는 How를 스케치 할 것입니다.토토 핫호스트 언어에 포함시킬 수 있습니다 (예 :C). 우리가 원하는 두 가지 주요 이유가 있습니다 사용하려면토토 핫호스트 언어에서 :

  • Pure를 사용하여 공식화 할 수없는 쿼리가 있습니다토토 핫(즉, 재귀 쿼리). 에게 그러한 쿼리를 수행 할 수있어서 호스트 언어가 필요합니다. 보다 큰 표현력토토 핫.

  • 우리는 단순히 일부 응용 프로그램에서 데이터베이스에 액세스하고 싶습니다. 호스트 언어로 작성되었습니다 (예 : 티켓 예약 그래픽 사용자 인터페이스가있는 시스템은 C와 여전히 남은 티켓에 대한 정보는 임베디드를 사용하여 액세스 할 수있는 데이터베이스토토 핫).

임베디드를 사용하는 프로그램토토 핫a 호스트 언어는 호스트 언어의 진술과의 진술로 구성됩니다.내장토토 핫(E토토 핫) 문. 모든e토토 핫명령문은 키워드로 시작합니다Exec 토토 핫. 그만큼e토토 핫진술은 a에 의해 호스트 언어 진술로 변환됩니다.Precompiler(일반적으로 호출을 삽입합니다 다양한 성능을 수행하는 도서관 루틴에토토 핫명령).

전반적으로 예제를 볼 때select우리는 그것을 알고 있습니다 쿼리의 결과는 종종 일련의 튜플입니다. 대부분의 호스트 언어는 세트에서 작동하도록 설계되지 않았으므로 튜플 세트의 모든 단일 튜플에 액세스하는 메커니즘 Select 문으로 반환되었습니다. 이 메커니즘은 제공 할 수 있습니다 선언커서. 그 후 우리는 사용할 수 있습니다 튜플을 검색하고 커서를 다음 튜플.

임베디드에 대한 자세한 토론​​토토 핫참조Date and Darwen, 1997, Date, 1994또는Ullman, 1988.