Professional Documents
Culture Documents
El lenguaje QBE
NDICE
1. INTRODUCCIN 2. INTRODUCCIN AL MODELO RELACIONAL 3. INTRODUCCIN AL CLCULO RELACIONAL 3.1. Introduccin al clculo relacional de dominios 4. EL LENGUAJE QUERY BY EXAMPLE 4.1. Introduccin a QBE. 4.2. Operaciones de recuperacin 4.3. Operaciones de recuperacin sobre relaciones estructuradas en rbol 4.4. Funciones Integradas 4.5. Las operaciones de Actualizacin, Supresin e Inserccin 4.6. Diccionario de QBE 4.7. Nuevas tendencias en QBE 5. EJEMPLOS QBE 6. QBE vs SQL BIBLIOGRAFIA 3 4 9 9 12 12 13 18 21 23 26 29 30 42 44
-2-
El lenguaje QBE
1.- INTRODUCCIN.
En el trabajo que presentamos a continuacin haremos un pequeo estudio acerca del lenguaje de consulta relacional QBE (Query By Example: consulta por ejemplo) creado por IBM research y que facilita la realizacin de consultas a una base de datos a cualquier usuario aunque ste sea inexperto. Seguiremos un tratamiento muy parecido al que se da en la mayora de los libros sobre bases de datos que tratan este tema, intentando dar ms ejemplos con el fin de que el lector entienda completamente este lenguaje de consulta. Empezaremos por dar una introduccin al modelo relacional, ya que QBE es un lenguaje de consulta sobre tablas de relaciones. Como sabemos, con las bases de datos intentamos guardar datos del mundo exterior de forma estructurada y captar la semntica de los datos. Con el concepto de semntica, en este entorno, nos referimos a todas las relaciones que puede haber entre los datos, por ejemplo puede que no baste con que en nuestra base de datos se reflejen los valores de una serie de caractersticas de un individuo, sino que nos interesa tambin guardar informacin de las relaciones de unos datos sobre otros, por ejemplo, si un individuo est casado entonces quizs queramos almacenar tambin el nmero de hijos y el nombre de su mujer, si no lo es estos datos no tendrn inters. Al modelar una determinada zona cerrada del mundo exterior (universo de discurso) intentamos captar toda la informacin que es relevante para nosotros, en muchos casos esta informacin no son solo datos. Veremos una serie de caractersticas muy generales de como se enfoca el problema de la representacin de datos del universo de discurso mediante el modelo relacional. Despus de esta introduccin al modelo relacional abordaremos los conceptos del clculo relacional, poniendo una especial atencin al clculo relacional de dominios ya que este lenguaje est basado en l. A continuacin estudiaremos las caractersticas principales del lenguaje, as como los tipos bsicos de consultas que se pueden realizar con QBE; para una una mejor comprensin de estos conceptos introduciremos una pequea coleccin de ejemplos. Una ventaja significativa de este lenguaje (QBE), comparado con la mayora de los lenguajes de consulta, es el grado de libertad de que disfruta el usuario, libertad para construir la consulta de una forma que se asemeja ms a la manera natural que tenemos de consultar la informacin. En trminos especficos la consulta se puede armar en cualquier orden que le agrade al usuario: el orden de los renglones dentro de una tabla de consulta carece totalmente de importancia; adems, el orden en que el usuario rellena todas las entradas que constituyen estos renglones tambin es completamente arbitrario. Por ltimo, mostraremos las diferencias principales entre SQL y QBE, as como distintas consultas en los dos tipos de lenguajes realizando las comparaciones que sean pertinentes.
-3-
El lenguaje QBE
-4-
El lenguaje QBE
Estas tablas deben de cumplir adems las siguientes condiciones: No puede haber dos filas duplicadas. El orden de las columnas y de las filas no es importante. Si tenemos dos tablas con las mismas tuplas pero ordenadas de distinta forma realmente son lo misma tabla, lo mismo ocurre si se ordenan de forma distinta los atributos o si pasan las dos cosas a la vez. En la interseccin de una columna y una fila , es decir en una casilla, solo puede haber un valor. Esta condicin tambin se expresa diciendo que no hay atributos multivaluados. Estas ltimas condiciones son llamadas restricciones inherentes al modelo. Veremos que hay mas tipos de restricciones, la mayora de las cuales son definibles por el usuario y que le sirven para introducir en el esquema relacional ms informacin que la que aportan los simples datos, informacin semntica de la que ya hablamos en la introduccin. Las relaciones tienen un nombre. Para denotar una relacin se suele usar la siguiente notacin:
El lenguaje QBE
Es claro que siempre existir la clave candidata, ya que el conjunto de todos los atributos de la relacin cumple la definicin, ya que hemos dicho que no hay dos tuplas iguales como restriccin fundamental del modelo. La cuestin es que aunque el conjunto de todos los atributos siempre sirve para identificar unvocamente a cada tupla, en la realidad suele ocurrir que con un conjunto menor de atributos tambin podemos hacerlo. Veamos un ejemplo: imaginemos una relacin llamada personas con las siguiente definicin:
El lenguaje QBE
Tambin es una nueva restriccin, llamada restriccin de Integridad Referencial, el hecho de que los valores de una clave ajena deben ser valores que ya existen como claves principales en otra relacin. Para profundizar un poco ms en el modelo relacional, realizaremos una pequea introduccin al proceso de Normalizacin y definiremos la cuatro primeras formas normales para los esquemas de relacin. La teora de Normalizacin se desarroll para que el diseo de las bases de datos relacionales, mejorara. La teora de Normalizacin nos permite un diseo de base de datos riguroso y demuestra que existen mtodos automticos de diseo que permiten llegar a ciertas formas normales que garantizan un diseo de calidad. Es decir, siempre se puede asegurar el que una base de datos relacional est al menos en forma normal de Boyce_Codd y con esto habremos eliminado gran parte de los problemas de redundancias y de ambigedad que pueden surgir durante el diseo. La Normalizacin de los datos puede considerarse como un proceso durante el cual los esquemas de relacin insatisfactorios se descomponen repartiendo sus atributos entre esquemas de relacin ms pequeos que poseen propiedades deseables. Un objetivo del proceso de normalizacin original es garantizar que no ocurran las anomalas de actualizacin, as como la eliminacin de informacin redundante en las tuplas. A continuacin explicaremos brevemente las cuatro primeras formas normales, para ello nos ayudaremos del siguiente ejemplo que iremos pasando de una forma normal a otra; R ( cdigo_prov, Nombre_prov, direccion_prov, Nmero_factura, Fecha, Importe) Primera Forma Normal. Una relacin se encuentra en primera forma normal cuando no hay grupos repetidos en sus atributos. Esta condicin es una restriccin inherente al modelo relacional, ya que como hemos dicho anteriormente, en el cruce de una fila y una columna debe haber un nico valor, no pueden existir atributos multivaluados. Como es una restriccin inherente al modelo, est al menos en primera forma normal, por lo tanto la relacin del ejemplo est en 1FN. Segunda Forma Normal. Una relacin se encuentra en segunda forma normal cuando est en 1FN y adems todos los atributos que no forman parte de una clave candidata dan informacin sobre la clave principal. Nuestro ejemplo en 2FN quedara de la siguiente forma: R1 (Cdigo_prov, Nombre_Prov, Direccion_Prov) R2 (Codigo_Prov, Numero_Factura, Fecha, Importe) Tercera Forma Normal. Una relacin se encuentra en tercera forma normal cuando est en 2FN y adems los atributos que no forman parte de ninguna clave candidata dan informacin sobre la clave principal completa y slo sobre la clave principal.
-7-
El lenguaje QBE
En el ejemplo las dos relaciones se encuentran en 3FN. Forma Normal de Boyce_Codd. Tomemos otro ejemplo, suponiendo que no se repiten los nombres de proveedores, es decir las claves candidatas son: Cdigo_prov, Nmero_factura. Nombre_prov, Nmero_factura.
R(Cdigo_prov,Nombre_prov, Numero_factura, Fecha, Importe) Cmo vemos por la notacin, hemos elegido como clave principal la primera opcin. La relacin est en FNBC.
La relacin se encuentra en FNBC cuando las claves candidatas son los nicos atributos o conjuntos de atributos sobre los que se facilita informacin por cualquier otro atributo. Nuestra relacin quedara de la siguiente manera en FNBC: R1( Cdigo_prov, Nmero_factura, Fecha, Importe) R2( Cdigo_prov, Nombre_prov) Esto es debido a que tenemos un atributo (Nombre_prov) que nos est dando informacin sobre otro atributo que no es clave candidata(Codigo_prov). Se podra hablar mucho ms sobre el proceso de Normalizacin y las relaciones que se dan entre los atributos(dependencias funcionales), pero no nos interesa profundizar excesivamente en este aspecto. Si el lector estuviese interesado en profundizar ms en el proceso de normalizacin, as como en el modelo relacional, la bibliografa es muy extensa habiendo multitud de libros que dedican uno o varios captulos al tratamiento de estos temas.
-8-
El lenguaje QBE
El lenguaje QBE
{x1 x2 ...xn R( x1 x2 x3) and ...} en lugar de: {x1, x2, ..., xn R( x1, x2, x3) and ...} Un tomo de la forma xi op xj, donde op es uno de los operadores de comparacin del conjunto {= ,< , > , , }, xi y xj son variables de dominio. Un tomo de la forma xi op c o c op xj, donde op es uno de los operadores de comparacin del conjunto {= ,< , > , , }, xi y xj son variables de dominio y c es un valor constante. Al igual que en el clculo de tuplas, la evaluacin de un tomo resulta ya sea TRUE o FALSE para un conjunto especfico de valores, y estos resultados se denominan valores lgicos de los tomos. En el caso 1, si se asignan a las variables de dominio valores que corresponden a una tupla de la relacin especificada R, el tomo ser TRUE. En los casos 2y 3, si se asignan a las variables de dominio valores que satisfagan la condicin, el tomo ser TRUE. De manera similar el clculo relacional de tuplas, las frmulas se componen de tomos, variables y cuantificadores. A continuacin daremos algunos ejemplos de consultas especificadas en el clculo de dominios. Usaremos letras minsculas l,m,n,...,x,y,z para las variables dominio, para ello utilizaremos el siguiente esquema de una base de datos. proveedor (# prove, Nom, Ape, Ciudad, Calle, Num) artculo (# articulo, Nom-art, Precio, Descrip) pedido (# pedido, # articulo, # prove, cantidad)
consulta 1 Obtener el nombre de los proveedores que viven en Madrid. {s xtvw(proveedor (r,s,t,Madrid,v,w) )} Necesitamos seis variables para la relacin empleado, cada una para cubrir el dominio de un atributo en orden. De todas las variables, aquellas que estn ligadas a un cuantificador existencial son x, t, v, w; la variable s es libre. Primero especificamos el atributo solicitado, nombre ,con la variable de dominio s. Luego despus de la barra ( ), especificamos la condicin para seleccionar una tupla: es decir, que la secuencia de valores asignados a las variables rstuvw se una tupla de la relacin Empleado y que los valores de u ( ciudad) sean Madrid. consulta 2 Nombre de los proveedores que suministran el articulo 20. {x yzwpuv(proveedor (p,x,y,z,w) pedido (p,20,u,v) )}
- 10 -
El lenguaje QBE
consulta 3 Nombre de los proveedores que suministran artculos a un precio mayor que 10. {x yzuvwklmn (proveedor (y,x,z,u,v) articulo(w,k,l,m) (y,w,n,) l > 10)} pedido
- 11 -
El lenguaje QBE
instruccin
n-tuplas
Diremos que una tabla vaca de este tipo tiene la estructura de una relacin. La estructura de una relacin nos permite dividir la pantalla en varias zonas. En la zona de encabezamiento colocaremos el nombre de la relacin y el de los constituyentes. Adems, el usuario podr aadir, si lo desea, columnas adicionales. La zona de n-tuplas situada bajo la zona de los nombres de los constituyentes tendr una doble funcin: por un lado, lo har posible que el usuario de fina su peticin con la ayuda de convenciones y de ejemplos lo que justifica el nombre del lenguaje y, por otra, una vez que se ha formulado la peticin, se puede recibir la respuesta en las columnas correspondientes. Por ltimo, la zona de instrucciones colocada bajo el nombre de la relacin permite indicar que operaciones de manipulacin se desea ejecutar. Para formular una peticin, el usuario tendr que hacer que en pantalla aparezca todas las estructuras que sean necesarias para llevar a cabo dicha formulacin. Por ejemplo, considrese la consulta obtenga los nmeros de proveedor de los proveedores en Pars. Primero, al oprimir una cierta llave de funcin en la terminal, el usuario puede tener una tabla esqueleto en blanco desplegada en la pantalla. Entonces, al saber que la respuesta a la consulta se puede hallar en la tabla S, el usuario inserta S como nombre de la tabla y hace que QBE responda rellenando con nombres de columna la zona superior del esqueleto. Ahora el usuario puede expresar la consulta haciendo entradas en dos posiciones de la tabla, como sigue: S #S P.S7 NOMS ESTADO CIUDAD Pars
- 12 -
El lenguaje QBE
La P significa imprima; indica los blancos de la consulta, es decir, los valores que deben aparecer en el resultado. S7 es un elemento de ejemplo, es decir, un ejemplo de una respuesta posible a la consulta; los elementos de ejemplo se introducen subrayados. Pars (no est subrayado) es un elemento constante. La consulta se puede describir as: imprima todos los valores de #S, tales como S7( por ejemplo), donde la ciudad correspondiente sea Pars. Ntese que S7 no necesita parecer en el conjunto resultante, ni siquiera en el conjunto original; el elemento de ejemplo es arbitraria, y pudo haberse utilizado PIG, 7 o X sin cambiar el significado de la consulta. Despus se explica por qu los elementos de ejemplo se usan para establecer enlaces entre los renglones en consultas ms complicadas. Si ningn enlace es necesario, como en la consulta sencilla anterior, es posible omitir por completo los elementos de ejemplo( de modo que P.S7 se reducira a P), pero en general se incluirn por claridad. Para ejecutar una peticin en el lenguaje QBE procederemos de la siguiente forma: 1.- Llamaremos a pantalla la estructura de cada relacin R1,..., RN. 2.- Por cada elemento cij de cada relacin construiremos una lnea: -Si cij slo aparece una vez, entonces podemos dejar en blanco la columna correspondiente. -Si cij aparece como variable ( se le menciona varias veces), entonces colocaremos en las columnas correspondientes un valor a ttulo de ejemplo, de manera que el valor vaya precedido de un signo de subrayado. -Si cij aparece como un elemento a, entonces colocaremos el smbolo P en la columna correspondiente. 3.- Repetir el paso 2 para todas las relaciones. A continuacin presentamos las caractersticas principales de QBE, estudiaremos primeramente las operaciones del Lenguaje de manipulacin de datos(DML) , seguidas de las operaciones del Lenguaje de definicin de datos(DDL), porque como se ver despus estas ltimas son casos especiales de las primeras.
A diferencia de SQL, QBE elimina automticamente los duplicados redundantes del resultado de una consulta. Para suprimir esa eliminacin , el usuario puede especificar la palabra clave ALL. La finalidad del smbolo ALL que hemos mencionado , escrito en una columna X y en una lnea de la estructura de una relacin R, es la de definir un conjunto de valores. Si no hay escrita otra informacin en la misma lnea, el conjunto as definido es el de todos los valores de X en la relacin o, dicho en trminos ms formales, la proyeccin de R sobre X. Si en la misma lnea figuran otras relaciones, constantes o variables ejemplo ara definir un criterio de
- 13 -
El lenguaje QBE
calificacin, el conjunto definido es el conjunto de valores de X que aparecen en las n-tuplas de R que satisfacen esos criterios de calificacin. Adems, podemos escribir una variable ejemplo detrs del smbolo ALL, lo que nos permitir dar un nombre al nuevo conjunto. Este nombre puede aparecer en la misma estructura de la relacin o en otra estructura, para crear, en este segundo caso, nexos entre las diferentes estructuras. Mostramos con un ejemplo el uso del smbolo ALL.
SP #S #P P.ALLPX CTD
Si una columna es demasiado angosta en la pantalla como para contener la entrada deseada, el usuario puede ensancharla primero mediante otra llave de funcin. Tambin se suministran llaves de funcin para aadir columnas o renglones, suprimir columnas o renglones, etc. Ejemplo: Obtenga todos los detalles de todos los proveedores. S #S P.SX NOMS P.SN ESTADO P.ST CIUDAD P.SC
La siguiente es una representacin abreviada de la misma consulta. S P. 4.2.2.- Recuperacin calificada. Obtenga los nmeros de proveedor de los proveedores en Pars con estado > 20. S #S P.SX NOMS ESTADO >20 CIUDAD Pars #S NOMS ESTADO CIUDAD
Obsrvese el modo de especificar la condicin estado > 20. En general , se puede usar de esta manera cualquiera de los operadores de comparacin =, =, <, <=, >, > = ( excepto que a menudo se omite =, como en la columna CIUDAD anterior, y = por lo comn se abrevia para simplificar). Tambin se puede realizar de la siguiente manera: S #S P.SX NOMS ESTADO y CIUDAD Pars
CONDICI N y > 20 En las estructuras de cada una de estas relaciones tenemos que indicar los valores de cada n-tupla, y en una tabla adicional CONDICIN indicaremos la relacin que debe satisfacer
- 14 -
El lenguaje QBE
la variable y, que en este caso es y >20, para que se seleccione la n-tupla dada. Slo se seleccionarn las n-tuplas que satisfagan esta condicin, adems de las otras condiciones que figuren en las estructuras. La tabla de condicin puede contener varias lneas de expresen condiciones distintas. Una lnea de la tabla de condicin puede utilizar los operadores de comparacin (<, >, < =, > =, =, < >), los operadores booleanos (, , ) y las expresiones aritmticas. La instruccin de negacin , se utiliza cuando queremos negar la existencia de una ntupla, en este caso escribiremos el smbolo en la lnea correspondiente y en la zona de la instruccin. Adems, P. puede preceder a cualquiera de estos operadores si desea imprimir el valor en cuestin; por ejemplo, pudo haberse especificado P. > 20 debajo de Estado si tambin se hubieran querido imprimir los valores de estado. Ejemplo 1: Obtenga los nmeros de parte de todas las partes suministradas por ms de un proveedor.
SP #S SX SX #P P.PX PX CTD
Esta consulta puede expresarse as: imprima los nmeros de parte PX tales que PX sea suministrada por algn proveedor SX y tambin por algn proveedor distinto de SX . ejemplo 2: Obtenga los nmeros de proveedor de los proveedores que se localizan en Pars o tienen estado > 20 ( o ambos).
#S P.SX P.SY
NOMS
ESTADO >20
CIUDAD Pars
Se considera que las condiciones especificadas dentro de un solo rengln se vinculan mediante AND. Para vincular dos condiciones usando OR, por tanto, es necesario especificarlas en renglones separados. La consulta anterior, en efecto, est pidiendo la unin de todos los nmeros de proveedores SX para los proveedores de Pars y de todos los nmeros de proveedores SY con estado >20. Se necesitan dos elementos de ejemplo diferentes, porque si hubiera usado el mismo dos veces, ello habra significado que el mismo proveedor tendra que estar en Pars y tener estado >20. Cuando una consulta comprende ms de un rengln, como en el presente ejemplo, los renglones se pueden introducir en cualquier orden.
- 15 -
El lenguaje QBE
ejemplo 3: Obtenga los nmeros de proveedor de los proveedores que suministran la parte P1 y la P2.
SP
#S P. SX SX
#P P1 P2
CTD
Aqu el mismo elemento de ejemplo debe usarse dos veces; se necesitan dos renglones para expresar la consulta porque es preciso vincular dos condiciones mediante AND sobre la misma columna. 4.2.3.- Recuperacin con ordenamiento. Obtenga el nmero de proveedor y el estado de los proveedores en Pars, en orden descendente de estado. S #S P.SX NOMS ESTADO P.DO.ST CIUDAD Pars
El DO. significa orden descendente. AO. se usa para indicar orden ascendente. Cuando se requiere el ordenamiento en trminos de varios campos, entonces el campo principal se indica por AO(1).[ o DO(1).]; el siguiente, por AO(2).[ o DO(2).], y as sucesivamente. 4.2.4.- Recuperacin usando enlace. Obtenga los nombres de proveedor de los proveedores que suministran la parte P2. S #S SX NOMS P.SN ESTADO CIUDAD
SP
#S SX
#P P2
CTD
El elemento de ejemplo SX se usa como enlace entre S y SP. La consulta se puede describir as: imprima los nombres de los proveedores (como SN ) donde el nmero de proveedor correspondiente, por ejemplo SX, aparezca en la tabla SP con nmero de parte igual a P2. En trminos generales, los enlaces se usan en QBE donde en SQL usara un SELECT anidado o un cuantificador existencial, o donde el lgebra usara una reunin. En realidad, SX, en el ejemplo 3 del apartado 5.2.2 , tambin estaba actuando como enlace, pero los renglones se hallaban en la misma tabla.
- 16 -
El lenguaje QBE
ejemplo 1: Obtenga los nombres de proveedor de los proveedores que suministran al menos una parte roja. S #S SX
#S SX
NOMS P.SN
#P PX
ESTADO
CIUDAD
SP
CTD
#P PX
PESO
CIUDAD
4.2.5.- Recuperacin usando la negacin. Obtenga los nombres de proveedor que no suministran la parte P2. S #S SX
#S SX
NOMS P.SN
#P P2
ESTADO
CIUDAD
SP
CTD
Ntese el operador NOT() contra el rengln de consulta de la tabla SP. La consulta puede escribirse as: imprima los nombres de proveedor de los proveedores SX tales que SX no suministre la parte P2. 4.2.6.- Recuperacin usando un enlace dentro de una sola tabla. Obtenga los nmeros de proveedor de los proveedores que suministran al menos una parte suministrada por el proveedor S2.
SP #S P.SX S2 #P PX PX CTD
ejemplo 1: Obtenga los nmeros de parte de todas las partes suministradas por ms de un proveedor.
SP #S .SX SX #P P.PX PX CTD
Esta consulta puede expresarse as: imprima los nmeros de parte PX tales que PX sea suministrada por algn proveedor SX y tambin por algn proveedor distinto de SX.
- 17 -
El lenguaje QBE
4.2.7.- Recuperacin de ms de una tabla. Obtenga el nmero de la parte y los nombres de todas las ciudades que suministran la parte, para cada parte suministrada. El resultado de esta consulta no es una proyeccin de una tabla existente; por el contrario, es una proyeccin de una reunin de tablas existentes. Para formular esa consulta en QBE el usuario primero debe crear una tabla esqueleto de la misma forma del resultado esperado , es decir, con el nmero adecuado de columnas. Se puede asignar cualquier nombre que el usuario desee a esta tabla y a sus columnas ( incluso puede dejarse sin nombre). El usuario puede expresar entonces la consulta usando la tabla de resultados y las dos tablas existentes de la manera siguiente: S #S SX
#S SX
NOMS
ESTADO
CIUDAD SC
SP
#P PX
CTD
RESULTADO
#P P.PX
CIUDAD P.SC
4.2.8.- Recuperacin usando la tabla de condiciones ( cuando aparece ms de una tabla). Obtenga todas las parejas de nmeros de proveedor tales que los dos proveedores se localicen en la misma ciudad. S #S SX SY #P SX NOMS ESTADO CIUDAD CZ CZ
RESULTADO P.
CIUDAD SY
CONDICI N SX > SY A veces es difcil expresar una condicin deseada dentro del marco de las tablas de la consulta. En esa situacin, QBE permite al usuario insertar la condicin en una caja de condiciones separada, como se refleja en el ejemplo anterior. La caja de condiciones se obtiene usando otra llave de funcin en la terminal.
El lenguaje QBE
aplicacin interesante que pocos lenguajes, relacionares o de otro tipo, tratan de modo adecuado. Considrese la relacin RS ( estructura de reportamiento) que se muestra en la figura 1. Esta relacin tiene dos atributos, #EMP y #ADM, ambos extrados de un dominio subyacente de nmeros de empleado. El significado de una tupla especfica de RS es que el empleado(#EMP) indicado reporta directamente al administrador indicado (# ADM). #ADM E1 E1 E1 E6 E8 E8 E15 E15 E24 #EMP E6 E7 E8 E18 E15 E16 E20 E24 E32
Se supone que la estructura de reportamiento representada por la relacin RS satisface las siguientes restricciones: 1. Ningn empleado es su propio administrador. 2. Ningn empleado tiene ms de un administrados inmediato. 3. Si EX es el administrador inmediato de EY, entonces EY no puede ser el administrador de EX a ningn nivel. Una relacin que posea dos atributos definidos sobre un dominio comn y que satisfaga restricciones anlogas a las anteriores se denominar relacin estructurada en rbol. En QBE el usuario puede formular ciertas consultas sobre una relacin estructurada en rbol, que lenguajes menos potentes, como el lgebra relacional, son incapaces de expresar. A continuacin mostramos algunos ejemplos: 4.3.1.- Recuperacin bajando un nivel. Obtenga los nmeros de empleado de los empleados que reportan al empleado E8 en el primer nivel. RS #ADM E8 #EMP P.EX
Por en el primer nivel se entiende que e8 es el administrador inmediato de los empleados que se desea. La repuesta a la consulta es los empleados E15 y E16. Este ejemplo es directo y no ilustra ningn punto nuevo. 4.3.2.- Recuperacin bajando dos niveles. Obtenga los nmeros de empleado de los empleados que reportan al empleado E8 en el segundo nivel.
- 19 -
El lenguaje QBE
RS
#ADM E8 EY
#EMP EY P.EX
De nuevo la solucin es directa, pero se ha tenido que introducir un enlace, EY , as como insertar dos veces el enlace en la tabla . En general, si se quisiera descender n niveles en el rbol, sera preciso insertar dos veces dad uno de los n-1 enlaces, proceso bastante pesado. Por tanto, QBE proporciona una abreviatura conveniente, que se ilustra en la siguiente formulacin alterna de la consulta anterior. RS #ADM E8 #EMP P.EY(2L)
El (2L) significa segundo nivel. En general, una entrada de nivel puede componerse de cualquier entero seguido de la letra L, todo entre parntesis. Siempre que se use una entrada de nivel, QBE incluye niveles relativos en el resultado tabulado( por ejemplo) como sigue:
#EMP E20( 2L) E24( 2L) 4.3.3.- Recuperacin subiendo dos niveles. Obtenga el nmero de empleado del administrador que est dos niveles por encima del empleado E20. RS #ADM #EMP P.MX(2L) E20
Aqu la entra de nivel aparece en la columna #ADM. En general, la direccin de la bsqueda( hacia arriba o hacia abajo del rbol)se indica por la columna donde aparece la entrada de nivel. Sin embargo, en ciertas situaciones esta regla podra originar ambigedad; para evitar este problema, QBE impone la restriccin de que no pueden aparecer ms de dos entradas en ningn rengln especfico de la formulacin de una consulta que comprenda niveles. 4.3.4.- Recuperacin bajando a todos los niveles. Obtenga el nmero de empleado de los empleados que reportan al empleado E8 en cualquier nivel.
RS
#ADM E8
#EMP P.EX(6L)
- 20 -
El lenguaje QBE
4.3.5.- Recuperacin descendiendo al nivel ms bajo. Obtenga el nmero de empleado de los empleados que reportan al empleado E8 al nivel ms bajo. RS #ADM E8 #EMP P.EX(MAX.6L)
MAX es una funcin integrada, que veremos mas delante. El significado de esta consulta es: obtenga los nmeros de empleado de los empleados cuyo novel relativo debajo de E8 es mximo. 4.3.6.- Recuperacin bajando a los niveles terminales. Obtenga el nmero de empleado de los empleados que reportan al empleado E8 a quienes nadie los reporta. RS #ADM E8 #EMP P.EX(LAST.L)
Se buscan empleados en los nodos terminales del rbol debajo de E8. Como estos empleados estarn en diferentes niveles relativos, en general, no se puede introducir un entero constante ni un entero de ejemplo( una constante significara un nivel fijo, un ejemplo representara todos los niveles); por tanto, QBE proporciona la funcin especial LAST. 4.3.7.- Recuperacin de nivel. En que funcin esta el empleado E20 debajo del empleado E1? RS #ADM E1 #EMP P.E20(7)
- 21 -
El lenguaje QBE
Respecto al operador UNIQUE, tenemos que decir, que , los valores duplicados no se eliminan en ninguna de las posibilidades disponibles mediante el lenguaje QBE cuando imprimimos el resultado de una peticin. Desde un punto de vista formal, la respuesta a una peticin en el lenguaje QBE no es un conjunto de valores, sino una lista de valores. El papel del operador UNIQUE consiste, en realizar el paso de la lista a conjunto. El operador ALL (descrito anteriormente), se asocia con estos operadores del conjunto. La palabra clave ALL siempre se especifica, mientras que UNIQUE, es opcional, slo aparece en las funciones COUNT, SUM, AVERAGE. 4.4.1.- Recuperacin simple usando una funcin. a.- Obtenga el nmero total de proveedores. S #S
P.CNT.ALL.SX
NOMS
ESTADO
CIUDAD
#P
CTD
4.4.2.- Recuperacin calificada usando una funcin. a.- Obtenga el nmero de remesas para la parte P2.
SP #S
P.CNT.ALL.SX
#P P2 - 22 -
CTD
El lenguaje QBE
4.4.3.- Funcion en la caja de condiciones. Obtenga los nmeros de proveedor de los proveedores con estado menor que el estado mximo actual en la tabla S; obtenga tambin ese estado mximo. S #S
P.SX
NOMS
ESTADO ST P.MAX.ALL.SS
CIUDAD
CONDICIN
ST<MAX.ALL.SS
4.4.4.- Recuperacin con agrupamiento. Obtenga el nmero de parte y la cantidad total suministrada para cada parte suministrada.
SP #S #P P.G.PX CTD P.SUM.ALL. QX
La G. es el equivalente de QBE del operador GROUP BY de SQL. 4.4.5.- Recuperacin usando agrupamiento y la caja de condiciones. Obtenga los nmeros de parte de todas las partes suministradas por ms de un proveedor; tambin haga conteos de los proveedores correspondientes.
SP #S
P.CNT.ALL.SX
#P P.G.PX
CTD
CONDICIN
CNT.ALL.SX >1
- 23 -
El lenguaje QBE
relacin, tenemos que indicar los valores de la clave con la instruccin UPDATE, adems del valor, o valores actualizados. Ejemplo 1: Actualizacin de un solo registro. Cambie el color de la parte P2 a amarillo. P #P
P2
NOMPAR COLOR
U. AMARILLO
PESO
CIUDA D
O tambin: P
U.
#P
P2
NOMPAR COLOR
AMARILLO
PESO
CIUDA D
La operacin de actualizacin es U.. El registro que se va actualizar se identifica por el valor de su llave primaria. Los valores de la llave primaria no pueden actualizarse. Ejemplo 2: Actualizacin de un solo registro basada en el valor previo. Aumente el peso de la parte P2 en 5.
P U.
#P P2 P2
NOMPAR COLOR
CIUDAD
Para actualizar un registro con base en su valor anterior, el usuario inserta un rengln que representa la versin anterior y otro que representa la versin nueva. La U. indica cual es la nueva. Ejemplo 3: Actualizacin de registros mltiples. Doble el estado de todos los proveedores situados en Londres. S U. #S
SX SX
NOMS
ESTADO ST 2* ST
CIUDAD LONDRES
Aqu el valor de la llave primaria ( el nmero del proveedor) se especifica como elemento de ejemplo, no como constante. Ejemplo 4: Actualizacin con registros mltiples. Ajuste la cantidad a cero para todos los proveedores situados en Londres.
SP U. #S
SX
#P
CTD 0
- 24 -
El lenguaje QBE
#S
SX
NOMS
ESTADO
CIUDAD LONDRES
Ejemplo 5: Actualizacin de tablas mltiples. Ajuste la cantidad y el estado a cero para todos los proveedores situados en Londres.
SP U. #S
SX
#P
CTD 0
#S
SX SY SY
NOMS
ESTADO
U.
Dado que la unidad de entrada de QBE es la pantalla completa, se pueden introducir varias actualizaciones al mismo tiempo. 4.5.2.- Las operaciones de Supresin. La operacin de supresin se representa mediante la instruccin UPDATE, se propone quitar las n-tuplas indicadas por el valor de la clave de la relacin. Ejemplo 1: Supresin de un solo registro. Suprima al proveedor S1. S D. #S S1 NOMS ESTADO CIUDAD
D. es el operador de suprimir. Si la tabla SP actualmente tienen cualesquiera remesas para el proveedor S1, esta supresin har que la regla de integridad 2 sea violada. Ejemplo 2: Supresin de registros mltiples. Suprima todos los proveedores situados en Londres. S D. #S NOMS ESTADO CIUDAD LONDRES
Ejemplo 3: Supresin de registros y tablas mltiples. Suprima todos los proveedores situados en Londres y tambin todas las remesas para esos proveedores. S D.
SP D. #S
SX
#S SX
NOMS
ESTADO
#P
Este ejemplo de QBE, suprimir primero las remesas y despus los proveedores.
- 25 -
El lenguaje QBE
4.5.3.- Las operaciones de insercin. La operacin de insercin se representa mediante la instruccin INSERT en la zona de instrucciones. Para llevar a cabo una operacin de insercin en una relacin, escribimos en la estructura de dicha relacin una lnea cuyo encabezamiento es la instruccin INSERT, seguida por todos los valores que queremos introducir. Ejemplo 1: Insercin de un registro individual. Adicione la parte P7 ( de nombre ARANDELA, color GRIS, peso 2, ciudad Atenas) a la tabla P. P I. #P P7 NOMPAR COLOR ARANDELA GRIS PESO 2 CIUDAD ATENAS
Y. es el operador para insertar. El registro nuevo debe tener un valor de llave primaria que sea no nulo y distinto de todos los valores de la llave primaria existentes en el atabla. Otros campos pueden dejarse en blanco en la tabla de esqueleto, en cuyo caso se ajustarn al valor nulo en la tabla de datos. Ejemplo 2: Insercin de registros mltiples. Inserte en TEMP los nmeros de parte de todas las partes suministradas por el proveedor S2.
SP #S
S2
#P PX
CTD
TEMP I.
#P PX
- 26 -
El lenguaje QBE
4.6.1.- Recuperacin de nombres de tablas. Obtenga los nombres de todas las tablas conocidas por el sistema. P.
En lugar de construir un esqueleto para la tabla TABLE e insertar P. en la columna NAME de ese esqueleto, el usuario puede formular esta consulta insertando la P. en la posicin del nombre-de-tabla de una tabla en blanco.
4.6.2.- Recuperacin de nombres de columnas para una tabla especfica. Obtenga los nombres de todas las columnas de la tabla S. S P.
El usuario inserta el nombre de la tabla (S) seguido por P. frente al rengln de los nombres de columna ( en blanco). QBE responde rellenando de manera adecuada esos blancos. Esta funcin a menudo se usa para armar la consulta real. Ahora se examinan las funciones de definicin de datos. 4.6.3.- Creacin de una tabla nueva. Cree la tabla S, suponiendo que todava no existe. I. S I. #S NOMS ESTADO CIUDAD
La primera I. crea una entrada del diccionario para la tabla S; la segunda I. crea entradas del diccionario para las cuatro columnas de la tabla S. Sin embargo, el proceso de creacin de la tabla an es incompleto; cierta informacin adicional debe especificarse para cada columna. Esta informacin incluye para cada columna, el nombre del dominio subyacente; el tipo de datos del dominio, si QBE no conoce ya el dominio; una indicacin en cuanto a si la columna participa o no en la llave primaria, y una especificacin de si se va a construir o no un ndice sobre la columna. QBE, supone que cada columna forma parte de la llave y que cada columna va a se indicada, a menos que se le informe lo contrario. S #S NOMS ESTADO
ESTADO FIXED U.N U.N
CIUDAD
CIUDAD CHAR(15) U.N U.N
NOMS #S DOMAIN I. TYPE I. CHAR (5) CHAR(20) U.N Y KEY U.N Y INVERSION - 27 -
El lenguaje QBE
En este ejemplo, la informacin de DOMAIN y de TYPE se suministra insertando un rengln completo de especificaciones; la informacin de KEY y de INVERSION se suministra actualizando los valores por omisin de QBE. Se han definido ciertos dominios para QBE, adems de la tabla S y las columnas; por ejemplo , ahora QBE conoce a CIUDAD como un dominio de hileras de caracteres de longitud 15. Los tipos de datos soportados por QBE son CHAR, CHAR(n), FIXED, FLOAT, DATE y TIME. 4.6.4.- Creacin de una instantnea. Para cada parte suministrada, obtenga el nmero de la parte y los nombres de todas las ciudades que suministran la parte. Conservese el resultado en la base de datos. S #S SX NOMS ESTADO CIUDAD SC
SP
#S
#P SX
CTD PX
I. RESULTADO P.I.
#P PX
CIUDAD SC
Se almacena en al base de datos ( a causa de los operadores I. una copia de esta tabla, con nombre de tabla RESULTADOS y nombres de columna #P y CIUDAD. Las especificaciones del dominio ( y de los tipos de datos) para las columnas de esta tabla se heredan de las tablas subyacentes; otras especificaciones ( por ejemplo, KEY e INVERSION) se suponen por omisin( pero se pueden cambiar, si se desea, usando U.; tales cambios se pueden especificar nicamente en el momento en que la tabla se crea, no en una operacin subsiguiente).Se dice que la tabla almacenada recientemente es una instantnea de las tablas subyacentes. Una vez creada es independiente de esas tablas. 4.6.5.- Eliminacin de una tabla. Elimine la tabla SP. Una tabla se puede eliminar si est actualmente vaca. a.- Suprima todas las remesas.
SP D. #S #P CTD
- 28 -
El lenguaje QBE
4.6.6.- Ampliacin de una tabla. Adicione una columna FECHA a la tabla SP. QBE, no soporta directamente la adicin dinmica de una columna nueva a una tabla existente, a menos que la tabla est actualmente vaca. Por tanto, es necesario hacer lo siguiente: 1. Definir una tabla nueva de la misma forma de la tabla existente ms la columna nueva. 2. Cargar la tabla nueva a partir de la vieja, usando una insercin de registros mltiples. 3. Suprimir todos los datos de la tabla vieja. 4. Eliminar la tabla vieja. 5. Cambiar el nombre de la tabla nueva por el de la tabla vieja. Pasos 1 y 2:
SP #S
SX
#P PX #P CTD
#S
SX
PX
U.N U.N QX
Paso 3:
SP D. #S #P CTD
Paso 4:
D.SP #S #P CTD
Paso 5:
I.SPCOPIA I. #S #P CTD FECHA
El lenguaje QBE
En los sistemas tradicionales de almacenamiento y recuperacin de la informacin (bases de datos documentales), las preguntas se expresaban mediante un conjunto de trminos que deben contener los documentos, que podan estar relacionados mediante operadores lgicos (AND, OR, NOT,...). Actualmente se pretende realizar la bsqueda mediante ejemplos, el usuario propone un documento relevante a la necesidad de informacin del usuario y el sistema busca documentos que se encuentren cercanos al documento propuesto por el usuario. Tambin se usa este sistema para refinar la respuesta a una pregunta realizada con anterioridad. En las bases de datos multimedia tambin se pretende realizar bsquedas basadas en ejemplos, proponemos una msica, un video o una imagen y el sistema busca componentes que se encuentren cercanos al que damos por ejemplo. Para realizar esto se estn implementando tcnicas de almacenamiento de componentes multimedia mediante fractales. Por tanto, actualmente los lenguajes basados en bsquedas por ejemplos estn experimentando un auge, debido a las nuevas necesidades de bsqueda de informacin que se derivan de los sistemas multimedia, hipermedia, y a la gran revolucin que ha supuesto Internet.
- 30 -
El lenguaje QBE
EST_CURSOS
ID
DPTO
NUM
CALIFICACI N
Ejemplo 1: id y nombre de los estudiantes de ingenieros informticos de gestin. ESTUDIANTES ID P._x NOMBRE P._ y CARRERA ig
Ejemplo 2: obtener los datos de todos los estudiantes. ESTUDIANTES ID P._x NOMBRE P._ y CARRERA P._ z
Ejemplo 3: Obtener los nombres de los estudiantes de informtica de gestin. Incluyendo duplicados. ESTUDIANTES ID NOMBRE P.ALL. CARRERA ig
- 31 -
El lenguaje QBE
Ejemplo 4: Obtener los ids de los estudiantes con nmero 441 y 323. EST_CURSOS ID P._x _x DPTO ig ig NUM 441 323 CALIFICACI N
Ejemplo 5: Obtener los nombres de los estudiantes de informtica de gestin que han reprobado algn curso. ESTUDIANTES ID _x ID _x NOMBRE P.ALL. DPTO NUM CARRERA ig CALIFICACI N < 7.5
EST_CURSOS
Ejemplo 6: Obtener los ids de estudiantes que han tomado cursos con el estudiante 123. EST_CURSOS ID 123 P._x DPTO _y _y NUM _z _z CALIFICACI N
Ejemplo 7: Obtener los nombres de los estudiantes que no son empleados. ESTUDIANTES ID _x ID _x NOMBRE P.ALL. DPTO NUM CARRERA
EST_CURSOS
CALIFICACI N
Ejemplo 8: Obtener el promedio de las calificaciones del estudiante 666 en cursos que no son de informtica de gestin. EST_CURSOS ID 666 DPTO ig NUM CALIFICACI N P.AVG.ALL.
- 32 -
El lenguaje QBE
VAGN
NUMVAGN
TIPOVAGN
PESOVAGN
CAPACIDAD
ESTADO
ESTACIN
LNEA
NUM-LNEA
RANGO
ESTACIN
TRFICO
NUM-TREN
NUM-LNEA
NUM-DA
TREN
NUM-TREN
NUM-VAGN
TRANSPORT E
TIPOMERCANCIA
PESOMERCANCIA
FECHACARGA
Ejemplo 1: suponemos que queremos responder a la pregunta dar la lista de los vagones de tipo frigo que estn disponibles en la estacin de tours y cuya capacidad es superior a 10 T . Se trata de una pregunta tpica de una expresin de seleccin sobre una relacin. Si nos referimos a nuestro esquema relacional, tenemos que traer a la pantalla la relacin cuyo nombre es VAGON. El usuario dispone para ello de una instruccin que le permite hacer que en pantalla aparezca la estructura. La forma de esta instruccin es P, que se refiere a la impresin( print en ingls).Una vez que tenemos la estructura en pantalla el usuario prepara su peticin construyendo un criterio de calificacin utilizando diferentes columnas. Si quiere seleccionar
- 33 -
El lenguaje QBE
las n-tuplas que tengan una cierta propiedad en un constituyente dado, colocar en la columna correspondiente el valor asociado a la condicin. Si la condicin requiere un operador que no la igualdad, esto es, <, >., , escribir ese operador delante del valor. Si hay varias condiciones unidas entre si mediante un y lgico, las colocar en la misma lnea. As, en nuestro caso, las columnas TIPO-VAGON,CAPACIDAD, ESTADO y ESTACIN. A continuacin el usuario tiene que indicar que informacin quiere obtener a partir de las n-tuplas seleccionadas. Si quiere imprimir toda la n-tupla, colocar la letra P en la misma lnea que las condiciones, y en la columna que corresponde al nombre de la relacin. Si, por el contrario, solo quiere imprimir algunos valores de la relacin seleccionada, indicar la letra P en las columnas correspondientes.
VAGN NUMVAGN TIPOVAGN PESOVAGN CAPACIDAD ESTADO ESTACIN
frigo
>=10
libre
tours
Esta descripcin equivale a una operacin de seleccin seguida de una operacin de proyeccin. La operacin de seleccin est limitada a algunas formas de seleccin.
Ejemplo 2: dar los prototipos de los vagones del tren 4002. Este ejemplo nos permite ilustrar otra propiedad fundamental del lenguaje, esto es la forma de expresin de los nexos que hay entre varias relaciones.
VAGN NUMVAGN TIPOVAGN PESOVAGN CAPACIDAD ESTADO ESTACIN
-w 106
TREN
NUM-TREN 4002
NUM-VAGN -w 106
La idea bsica para responder a esta pregunta consiste en seleccionar en la realcin TREN las n-tuplas que corresponden al tren 4002. Para ello indicamos el valor 4002 en la columna correspondiente. Adems, queremos seleccionar una n-tupla cuyo nmero de tren sea 4002, pero que tenga adems un numero de vagn, por ejemplo w106, de forma que podamos seleccionar la relacin VAGON los vagones que tengan este mismo nmero. Slo nos falta imprimir el tipo de vagn, que es lo que indicamos mediante la letra P. Tenemos que sealar que hay una diferencia esencial entre el valor 4002 y w106. El primero corresponde a una constante , mientras que el segundo corresponde aun ejemplo de un valor tomado por una variable, razn por la que hablaremos de variable ejemplo. Para distinguir los dos casos, el segundo valor va precedido de un signo de subrayado. De hecho, podemos considerar w106 como una variable que establece un nexo entre las dos relaciones. Si examinamos la expresin correspondiente en un lenguaje predicativo con variables dominio {t wpceg (TREN (4002) VAGON(w,t, p, c, e, g))}
- 34 -
El lenguaje QBE
vemos claramente que w es una variable comn y que 4002 es una constante. Con este ejemplo, apreciamos como podemos resolver un gran numero de peticiones de la misma clase expresadas en un lenguaje predicativo con variables de dominio. Las expresiones de esta clase tienen la forma: {a1, a2,..., ak b1b2...bp (R1 (C11,..., C1i1) R2(C21,..., C2i2) ...Rn(cn1,..., cnip))} en donde cada cij es un a, un b, o una constante y cada a y cada b aparece al menos una vez. Ejemplo 3: Dar la lista de las lneas que salen de la estacin de tours. En calculo relacional de dominios se expresa mediante la expresin: {1 wpc (LNEA (1, w, tours) LNEA(1, p, c) (w > p))}. Para resolver esta peticin en QBE hay que llamar a la estructura de la relacin LNEA y construir dos lneas que corresponden a dos n-tuplas. En la primera lnea, que corresponde a la primera n-tupla, indicaremos que debe verificar la condicin ESTACIN = tours. Adems, tendr que verificarse que las dos n-tuplas posean la misma lnea, y que el rango de la segunda sea mayor que el de la primera. Para expresar esto utilizamos dos variables x e y, precedidas por el smbolo de subrayado. Finalmente, a instruccin P en la columna NUM-LNEA nos permitir imprimir los valores de esta columna.
LNEA
NUM-LNEA _x P._x
RANGO _y >_y
ESTACIN tours
Ejemplo 4: Dar la lista de los trenes que saldrn de tours el 14.03.00. Para responder a esta pregunta necesitamos de las estructuras de LNEA y TRFICO. LNEA NUM-LNEA _x _x RANGO _y >_y ESTACIN tours
TRFICO
NUM-TREN P.
NUM-LNEA _x
NUM-DA 180300
Ejemplo 5: Dar la lista de vagones que saldrn de tours el 18.03.00 y cuya estacin de destino final es Beziers. Utilizaremos las estructuras de las relaciones LINEA, TAFICO, TREN y TRANSPORTE.
- 35 -
El lenguaje QBE
LNEA
NUM-LNEA
RANGO _y
ESTACIN Beiziers
TRFICO
NUM-TREN _t
NUM-LNEA _x
NUM-DA 180300
TREN
NUM-TREN _t
NUM-VAGN -w
TIPOMERCANCIA
PESOMERCANCIA
FECHACARGA
Ejemplo 6: Dar la lista de vagones que estn cargados hasta la mistad en la estacin de tours. Para expresar esta peticin en este tipo de lenguaje utilizaremos la estructura de las relaciones de TRANSPORTE y VAGON. TRANSPORTE CLIENTE ESTACIN ESTACIN NUMORIGEN DESTINO VAGN _w 106 PESOMERCANCIA P._x
VAGN NUMVAGN TIPOVAGN PESOVAGN CAPACIDAD ESTADO
TIPOMERCANCIA
FECHACARGA
ESTACIN
P._w106
P._y
tours
CONDICIN
- 36 -
El lenguaje QBE
x<= y/2 En las estructuras de cada una de estas relaciones tendremos que indicar los valores de cada n-tupla, y en una tabla adicional que llamamos CONDICION indicaremos la relacin qye debe unir a las variables x e y , que en este caso es x <= y / 2, ra que se seleccione una n-tupla dada. Slo se seleccionarn las n-tuplas que satisfacen la condicin, adems de las otras condicones que figuran en las estructuras.
Ejemplo 7: cal es la estacin de llegada de la lnea 10. Si utilizamos la instruccin de negacin, utilizaremos la estructura de la relacin LINEA, sealando que si una n-tupla r contiene la estacin de llegada, no puede existir otra ntupla p tal que el rando de la n-tupla p sea mayor que el rango de la n-tupla r. Las dos lneas que figuran en el estructura representan las dos n-tuplas r y p.
LNEA
NUM-LNEA 10 10
RANGO _x >_x
ESTACIN P.
Ejemplo 8: Dar los nmeros de las lneas en las que ahy tren todos los das. TRFICO NUM-TREN NUM-LNEA P._1 NUM-DA ALL_ j ALL_ j
Ejemplo 9: Dar la lista de las estaciones por las que pasar un vagn que vaya de angers a beziers. RED ESTACIN ORIGEN angers _g1 ESTACIN DESTINO beziers beziers ESTACIN SIGUIENTE _g1 P._g2 NUM-LNEA
Si queremos obtener la 3 estacin, bastara con introducir otra lnea ms.En general, si queremos obtener la n-sima estacin, basta con introducir n lneas. En estructura de arbole se puede resolver de la siguiente manera: RED ESTACIN ORIGEN angers ESTACIN DESTINO beziers ESTACIN SIGUIENTE P._g(2L) NUM-LNEA
Ejemplo 10: Dar para todos los trenes el nmero de vagon de cada tren.
- 37 -
El lenguaje QBE
TREN
NUM-TREN COUNT.ALL._x
NUM-VAGN P._y
Podemos interpretarlo de esta forma: Para cada variable, definimos el conjunto de los vagones de este tren mediante el operador ALL sobre el que aplicamos el operador COUNT. A continuacin imprimimos los resultados. Ejemplo 11: Dar la lista de los nmeros de los trenes que tienen ms de 20 vagones. TREN NUM-TREN P. t NUM-VAGN COUNT.ALL._w
CONDICIN
COUNT.ALL._ w>= 20
Ejemplo 12: Para expresar la insercin de un nuevo vagn en la relacin lo haremos de la siguiente forma:
VAGN NUMVAGN TIPOVAGN PESOVAGN CAPACIDAD ESTADO ESTACIN
INSERT
w105
frigo
10
50
libre
tours
Ejemplo 13: suponemos que queremos cambiar la estacin de un vagn cuyo nmero es w105 y sustituir tours por blois.
VAGN NUMVAGN TIPOVAGN PESOVAGN CAPACIDAD ESTADO ESTACIN
UPDATE
w105
blois
Ejemplo 14: Expresarmos la supresin del vagn cuyo nmero es w 105 simplemente mediante:
VAGN NUMVAGN TIPOVAGN PESOVAGN CAPACIDAD ESTADO ESTACIN
DELETE
w105
- 38 -
El lenguaje QBE
CLIENTE
NOM-CLI
CALLE-CLI
CIUDAD-CLI
PRESTAMO
PRESTATARIO
NOM-CLI
NUM-PRESTAMO
CUENTA
NOMBRE-SUCUR NUM-CUENTA
SALDO
IMPOSITOR
NOM-CLI
NUM-CUENTA
Ejemplo 1: Obtener todos los nmeros de prestamo de la sucursal Navacerrada PRESTAMO NOMBRE-SUCUR NUM-PRESTAMO IMPORTE Navacerrada P._x
Ejemplo 2: Encontrar todos los nmeros de prestamos de aquellos prestamos con una cantidad mayor a 140.000 ptas. PRESTAMO NOMBRE-SUCUR NUM-PRESTAMO IMPORTE P. > 140.000
Ejemplo 3: Obtener todos los nombres de las sucursales que no tienen sede en Barcelona. SUCURSAL NOMBRE-SUCUR
- 39 -
CIUDAD
ACTIVO
El lenguaje QBE
P.
Barcelona
Ejemplo 4: Obtener los nombres de todos los clientes que tienen un prestamo en la sucursal de Navacerrada.
PRESTAMO
PRESTATARIO
Para ejecutar esta consulta, primero localizamoslas tuplas en la relacin prestamo que tienen el atributo nombre sucursal igual a Navacerrada. Para cada una de estas tuplas el sistema busca las tuplas de la relacin prestatario con el mismo valor para el atributo nmero prestamo que el mismo atributo de la tupla de la relacin prestamo. Finalmente se muestra el valor del atributo nombre del cliente de todas las tuplas de la relacin que cumplan las condiciones. Ejemplo 5: Obtener los nombres de todos los clientes que tienen una cuenta en el banco pero que no tienen un prestamo en el mismo. IMPOSITOR NOM-CLI P._x NOM-CLI _x NUM-CUENTA
PRESTATARIO
NUM-PRESTAMO
Ejemplo 6: Obtener todos los nmeros de cuenta con saldos entre 260.000 y 300.000 ptas. CUENTA NOMBRE-SUCUR NUM-CUENTA P. SALDO _x
CONDICION _x 260.000 _x 300.000 Ejemplo 7: Obtener todas las sucursales con activos superiores al activo de al menos una sucursal con sede en barcelona. SUCURSAL NOMBRE-SUCUR P._x
- 40 -
ACTIVO _y _z
El lenguaje QBE
CONDICION _y > z Ejemplo 8: Obtener el nombre de los clientes, el nmero de cuenta y el saldo de todas las cuentas de las sucursal de Navacerrada. CUENTA NOMBRE-SUCUR NUM-CUENTA Navacerrada _y NOM-CLI _x NOM-CLI _x NUM-CUENTA _y SALDO _z SALDO _z
IMPOSITOR
RESULTADO P.
NUM-CUENTA _y
Creamos una tabla resultado, donde aparecern los nombres de todos los atributos. Ejemplo 9: Obtener el saldo total de todas las cuentas de la sucursal Navacerrada. CUENTA NOMBRE-SUCUR NUM-CUENTA Navacerrada SALDO P.SUM.ALL
Con el operador ALL. evitamos que se eliminen los duplicados. Ejemplo 10: Obtener todos los clientes que tienen cuenta en cada una de las sucursales con sede en Barcelona. IMPOSITOR NOM-CLI P.G. _x NUM-CUENTA _y SALDO
CUENTA
SUCURSAL
ACTIVO
El lenguaje QBE
La variable de dominio w puede tomar el valor de nombres de sucursales con sede en Barcelona. As , CNT.UNQ.ALL._w es el nmero de sucursales distintas de Barcelona.
Ejemplo 11: Borrar todos los prestamos con cantidades comprendidas entre 260.000 y 300.000 ptas. PRESTAMO D. PRESTATARIO D. NOMBRE-SUCUR NUM-PRESTAMO IMPORTE _y _x NOM-CLI NUM-PRESTAMO _y
- 42 -
El lenguaje QBE
6. QBE vs SQL
En la tabla siguiente exponemos las principales diferencias que exiten entre estos 2 lenguajes de consulta:
QBE SQL Basado en el clculo relacional de Basado en el lgebra relacional dominios Programacin visual Programacin mediante lenguaje formal Sintaxis bidimensional basado en tablas Sintaxis unidimensional basado en un lenguaje formal Consultas mediante ejemplos Consultas mediante condiciones lgicas A continuacin exponemos algunos ejemplos que ilustran las diferencias: Encontrar todos los nmeros de prestamos de aquellos prestamos con una cantidad mayor a 140.000 ptas. QBE PRESTAMO NOMBRE-SUCUR NUM-PRESTAMO IMPORTE P. > 140.000
SQL SELECT NUM-PRESTAMO FROM PRESTAMO WHERE IMPORTE > 140.000 Borrar todos los prestamos con cantidades comprendidas entre 260.000 y 300.000 ptas. QBE PRESTAMO D. PRESTATARIO D. NOMBRE-SUCUR NUM-PRESTAMO IMPORTE _y _x NOM-CLI NUM-PRESTAMO _y
CONDICION _x =( 260.000 and 300.000) SQL DELETE * FROM PRESTAMO WHERE IMPORTE BETWEEN 260.000 AND 300.000
- 43 -
El lenguaje QBE
CUENTA
SALDO P.SUM.ALL
SQL SELECT SUM(SALDO) AS SUMA FROM CUENTA WHERE NOMBRE-SUCUR = Navacerrada GROUP BY NOMBRE-SUCUR
- 44 -
El lenguaje QBE
BIBLIOGRAFA.
Fernandez Baizn , C., El modelo relacional de datos, Diaz de Santos, [1987]. Delobel,C., Adiba, M. Bases de datos y sistemas relacionales , Omega [1987]. Malpica, J., Vargas Villazn, A., Introduccin al los sistemas de Bases de Datos, Addison-Wesley [1975]. Elmasri, R., Navathe, S., Sistemas de Bases de Datos, Addison-Wesley [1997]. Hursch , C.J., Hursch, J.L., SQL. El lenguaje de consulta estructurado, Rama [1989].
- 45 -