QUEL 쿼리 언어

QUEL query languages
가족질의어
설계자마이클 스톤브레이커
첫 등장1976년; 45년 전 (1998년)
주요 구현
잉그레스, POSTQUEL
영향을 받은
알파

QUEL관계형 데이터베이스 질의 언어로, SQL과 일부 유사성이 있는 관계형 미적분학을 기반으로 한다. 이전에 Codd가 제안했지만 구현되지 않은 Data Sub-Language ALPA를 기반으로 버클리 캘리포니아 대학교Ingres DBMS 노력의 일환으로 만들어졌다.QUEL은 자유롭게 사용할 수 있는 Ingres 소스 코드를 기반으로 대부분의 제품에서 짧은 시간 동안 사용되었으며, 특히 POSTGRES가 지원하는 구현에서 가장 두드러졌다.[1] 1980년대 초 오라클DB2가 시장 점유율을 확보하면서 당시 QUEL을 지원하는 대부분의 기업이 SQL로 이전했다.[citation needed] 수년간 QUEL 고유의 언어 향상이 추가되지 않았지만 QUEL은 Ingres DBMS의 일부로 계속 사용할 수 있다.[when?]

사용법

QUEL 문은 항상 튜플 변수에 의해 정의되며, 이는 쿼리를 제한하거나 결과 집합을 반환하는 데 사용될 수 있다. 첫 번째 Ingres 논문 중 하나를 인용한 다음 예를 들어,[2]

1.1. 직원 Jones의 경우 18세까지 계산 급여를 나눈다.

범위  E 이다 직원 되찾다  W (COMP = E.급여 / (E.나이 - 18)) 어디에, E.이름 = "존스" 

여기서 E는 직원 관계에 걸쳐 있는 튜플 변수로서, 해당 관계에서 자격 E를 충족하는 모든 튜플이 발견된다.이름 = "존스" 쿼리 결과는 새로운 관계 W로, 적격 튜플별로 계산된 단일 도메인 COMP를 가지고 있다.

동등한 SQL 문은 다음과 같다.

만들다 테이블 w 로서 선발하다 (e.봉급 / (e.나이를 먹다 - 18)) 로서 콤파스 로부터 종업원 로서 e 어디에, e.이름을 붙이다 = '존스' 

여기에 테이블을 만들고 그 안에 행을 삽입한 다음 그 안에 있는 데이터를 검색하여 수정하고 최종적으로 추가된 행을 삭제하는 간단한 세션의 샘플이 있다(그 이름이 고유한 필드라고 가정한다).

SQL
만들다 학생(이름을 붙이다 = c10, 나이를 먹다 = i4, 섹스를 = c1,  = c2)  범위  s 이다 학생 덧셈을  s (이름을 붙이다 = "philip", 나이를 먹다 = 17, 섹스를 = "m",  = "FL")  되찾다 (s.전부) 어디에, s. = "FL"  대체하다 s (나이를 먹다=s.나이를 먹다+1)  되찾다 (s.전부)  삭제하다 s 어디에, s.이름을 붙이다="philip" 
만들다 테이블 학생(이름을 붙이다 마를 뜨다(10), 나이를 먹다 인트로, 섹스를 마를 뜨다(1),  마를 뜨다(2));  삽입하다  학생 (이름을 붙이다, 나이를 먹다, 섹스를, ) 가치 ('philip', 17, 'm', 'FL');  선발하다 * 로부터 학생 어디에,  = 'FL';  갱신하다 학생 세트 나이를 먹다=나이를 먹다+1;  선발하다 * 로부터 학생;  삭제하다 로부터 학생 어디에, 이름을 붙이다='philip'; 

QUEL의 또 다른 특징은 시스템 내부와 외부로 레코드를 이동시키기 위한 내장형 시스템이었다. 다음 명령을 고려하십시오.

학생(이름=c0, 쉼표=d1, 연령=c0, 쉼표=d0, sex=c0, 쉼표=d1, 주소=c0, nl=d1)을 "/csm.txt"로 복사한다. 

학생 테이블에 있는 모든 레코드의 쉼표로 구분된 파일을 만들 수 있다. d1은 데이터 형식과 반대로 구분 기호를 나타낸다. 변경하기 into 완전히 from 과정을 뒤바꾸다 비슷한 명령어를 많은 SQL 시스템에서 사용할 수 있지만, 일반적으로 SQL 언어 내부와는 달리 외부 도구로 사용할 수 있다. 이는 저장 프로시저를 사용할 수 없게 만든다.

QUEL은 매우 강력한 통합 기능을 가지고 있다. Aggregate는 중첩될 수 있으며, 서로 다른 Aggregate에는 독립된 by-list 및/또는 제한 조항이 있을 수 있다. 예를 들면 다음과 같다.

되찾다 (a=수를 세다(y.i 에 의해 y.d 어디에, y.발을 동동 구르다 = "i*" 또는 y.발을 동동 구르다 = "foo"), b=맥스.(수를 세다(y.i 에 의해 y.d))) 

이 예는 거의 틀림없이 덜 바람직한 QUEL의 문제 중 하나, 즉 모든 문자열 비교가 잠재적으로 패턴 일치라는 것을 보여준다. y.str = "ii*" 모두 일치하다 y.str 로 시작하는 값 ii. 대조적으로 SQL은 = 반면에 정확한 일치에 대해서만. like 패턴 매칭이 필요할 때 사용한다.

참고 항목

참조

  1. ^ Stonebraker, M; Rowe, LA (May 1986). The design of POSTGRES (PDF). Proc. 1986 ACM SIGMOD Conference on Management of Data. Washington, DC.
  2. ^ Stonebraker, Michael; Wong, Eugene; Kreps, Peter; Held, Gerald (1976). "The Design and Implementation of INGRES". ACM Transactions on Database Systems. 1 (3): 191. CiteSeerX 10.1.1.109.957. doi:10.1145/320473.320476.

추가 읽기