QUEL 쿼리 언어
QUEL query languages가족 | 질의어 |
---|---|
설계자 | 마이클 스톤브레이커 |
첫 등장 | 전 ( |
주요 구현 | |
잉그레스, 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
패턴 매칭이 필요할 때 사용한다.
참고 항목
- D(데이터 언어 사양)
- D4(프로그래밍 언어) (D의 구현)
- 관계 대수
- 관계 미적분학
참조
- ^ Stonebraker, M; Rowe, LA (May 1986). The design of POSTGRES (PDF). Proc. 1986 ACM SIGMOD Conference on Management of Data. Washington, DC.
- ^ 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.
추가 읽기
- C. J. Date: SQL 데이터베이스 언어의 비평. SGIMOD 레코드 14(3): 8-54, 1984.