QUEL es un lenguaje de consulta de base de datos relacional , basado en cálculo relacional de tuplas , con algunas similitudes con SQL . Fue creado como parte del esfuerzo de Ingres DBMS en la Universidad de California, Berkeley , basado en el sub-lenguaje ALPHA sugerido anteriormente por Codd , pero no implementado . QUEL se utilizó durante un breve período de tiempo en la mayoría de los productos basados en el código fuente de Ingres disponible gratuitamente, sobre todo en una implementación llamada POSTQUEL respaldada por POSTGRES . [1] Como Oracle y DB2 ganó participación de mercado a principios de la década de 1980, la mayoría de las empresas que entonces apoyaban a QUEL se trasladaron a SQL. [ cita requerida ] QUEL sigue estando disponible como parte de Ingres DBMS, aunque no se han agregado mejoras de lenguaje específicas de QUEL durante muchos años. [ cuando? ]
Familia | Lenguaje de consulta |
---|---|
Diseñada por | Michael Stonebraker |
Apareció por primera vez | 1976 |
Implementaciones importantes | |
Ingres , POSTQUEL | |
Influenciado por | |
Alfa |
Uso
Las declaraciones QUEL siempre se definen mediante variables de tupla , que se pueden utilizar para limitar consultas o devolver conjuntos de resultados. Considere este ejemplo, tomado de uno de los primeros artículos originales de Ingres: [2]
Ejemplo 1.1. Calcule el salario dividido por la edad de 18 para el empleado Jones.
gama de E es EMPLEADO recuperar en W ( COMP = E . Salario / ( E . Edad - 18 )) , donde E . Nombre = "Jones"Aquí E es una variable de tupla que se extiende sobre la relación EMPLEADO, y se encuentran todas las tuplas en esa relación que satisfacen la calificación E.Name = "Jones". El resultado de la consulta es una nueva relación W, que tiene un único dominio COMP que se ha calculado para cada tupla calificada.
Una declaración SQL equivalente es:
crear tabla w como seleccionar ( e . salario / ( e . edad - 18 )) como compensación del empleado como e donde e . nombre = 'Jones'
Aquí hay una muestra de una sesión simple que crea una tabla, inserta una fila en ella y luego recupera y modifica los datos dentro de ella y finalmente elimina la fila que se agregó (asumiendo que el nombre es un campo único).
QUEL | SQL |
---|---|
crear estudiante ( nombre = c10 , edad = i4 , sexo = c1 , estado = c2 )el rango de s es el agregado del estudiante a s ( nombre = "philip" , edad = 17 , sexo = "m" , estado = "FL" )recuperar ( s . todo ) donde s . estado = "FL"reemplazar s ( edad = s . edad + 1 )recuperar ( s . todo )eliminar s donde s . nombre = "philip" | crear la tabla estudiante ( nombre char ( 10 ), edad int , sexo char ( 1 ), estado char ( 2 ));insertar en los valores de estudiante ( nombre , edad , sexo , estado ) ( 'philip' , 17 , 'm' , 'FL' ); seleccione * de estudiante donde estado = 'FL' ;actualizar la edad establecida por el estudiante = edad + 1 ;seleccionar * del estudiante ;eliminar del alumno donde nombre = 'philip' ; |
Otra característica de QUEL fue un sistema integrado para mover registros en masa dentro y fuera del sistema. Considere este comando:
copiar estudiante ( nombre = c0, coma = d1, edad = c0, coma = d1, sexo = c0, coma = d1, dirección = c0, nl = d1 ) en "/student.txt"
que crea un archivo delimitado por comas de todos los registros en la tabla de estudiantes. El d1 indica un delimitador, a diferencia de un tipo de datos. Cambiar into
a a from
invierte el proceso. Los comandos similares están disponibles en muchos sistemas SQL, pero generalmente como herramientas externas, en lugar de ser internas al lenguaje SQL. Esto hace que no estén disponibles para los procedimientos almacenados.
QUEL tiene una capacidad de agregación extremadamente poderosa. Los agregados se pueden anidar y los diferentes agregados pueden tener listas de acceso independientes y / o cláusulas de restricción. Por ejemplo:
recuperar ( a = contar ( y . i por y . d donde y . str = "ii *" o y . str = "foo" ), b = max ( contar ( y . i por y . d )))
Este ejemplo ilustra una de las peculiaridades menos deseables de QUEL, es decir, que todas las comparaciones de cadenas son potencialmente coincidencias de patrones. y.str = "ii*"
coincide con todos los y.str
valores que comienzan con ii
. Por el contrario, SQL se usa =
solo para coincidencias exactas, mientras que like
se usa cuando se requiere coincidencia de patrones.
Ver también
Referencias
- ↑ Stonebraker, M ; Rowe, LA (mayo de 1986). El diseño de POSTGRES (PDF) . Proc. 1986 Conferencia ACM SIGMOD sobre Gestión de Datos. Washington DC.
- ^ Stonebraker, Michael ; Wong, Eugene; Kreps, Peter; Held, Gerald (1976). "El Diseño e Implementación de INGRES". Transacciones ACM en sistemas de bases de datos . 1 (3): 191. CiteSeerX 10.1.1.109.957 . doi : 10.1145 / 320473.320476 .
Otras lecturas
- CJ Date: Una crítica del lenguaje de bases de datos SQL . Registro SIGMOD 14 (3): 8-54, 1984.