Sunteți pe pagina 1din 27

Universidad Central de Venezuela Facultad de Ciencias Escuela de Computacin BASES DE DATOS

Tema 3: Lenguajes de consulta (Diseo Conceptual)

Profa. Mercy Ospina T. Caracas, 03 de septiembre de 2009


Centro de Investigacin en Sistemas de Informacin CISI.

Tema 2: Diseo de Bases de Datos

INDICE

CONTENIDO
INTRODUCCIN ...................................................................................................................................................3 LENGUAJES DE CONSULTA...................................................................................................................................4 1. Algebra Relacional ...................................................................................................................................4 1.1. 1.1.1. 1.1.2. Operaciones fundamentales del Algebra Relacional. ....................................................................4 Operaciones unarias ..................................................................................................................5 Operadores binarios bsicos .....................................................................................................7

1.2.3. Operadores binarios compuestos..................................................................................................9 1.2. 1.3. 2. rbol de Ejecucin del Algebra Relacional ..................................................................................12 Propiedades de los operadores del Algebra relacional ...............................................................13

SQL .........................................................................................................................................................15 2.1. 2.2. 2.3. 2.3.1. 2.3.2. 2.3.3. 2.4. 2.4.1. 2.4.2. EL ESTNDAR ...............................................................................................................................15 EL LENGUAJE DE CONSULTA ........................................................................................................15 CLUSULAS Y OPERACIONES .......................................................................................................16 Las clusulas bsicas................................................................................................................16 Operaciones ............................................................................................................................18 Funciones de agregacin y clusulas GROUP BY y HAVING ....................................................21 SUBCONSULTAS ANIDADAS .........................................................................................................24 Pertenencia a conjuntos ..........................................................................................................24 Comparacin de conjuntos .....................................................................................................25

3.

QBE ........................................................................................................................................................26

BIBLIOGRAFA ....................................................................................................................................................27

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

INTRODUCCIN
En este momento ya el estudiante es capaz de realizar un diseo de una base de datos tanto a nivel conpeptual (modelo de datos y modelo ER) como a nivel lgico (modelo relacional) tomando en cuenta una serie de requerimientos de entrada. Sin embargo otra parte muy importante de los modelos de dato es el mecanismo de manipulacin o lenguajes de consulta, que permiten extraer y actualizar los datos de la base de datos. Este documento se ha realizado con el objetivo de servir de gua a los estudiantes de la catedra Base de Datos en el tema referente a los lenguajes de consulta, especficamente los asociados al modelo relacional, como son el Algebra Relacional, SQL y QBE

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

LENGUAJES DE CONSULTA.
Un lenguaje de consulta es un lenguaje en que los usuarios solicitan informacin de la base de datos. Estos lenguajes suelen ser de un nivel superior a los lenguajes de programacin habituales. Estos pueden clasificarse como procedimentales y no procedimentales o declarativos, en los procedimentales el usuario indica al sistema que lleve a cabo una serie de operaciones (procedimiento) en la base de datos para calcular el resultado deseado, en los no procedimentales o declarativos el usuario describe la informacin deseada sin dar un procedimiento concreto para obtener esta informacin, a continuacin vamos a describir en detalle algunos lenguajes de consulta, tanto procedimentales como no procedimentales

1. ALGEBRA RELACIONAL
Se considera un lenguaje de consulta procedimental de alto nivel, el cual consta de un conjunto de operadores que toman una o dos relaciones como entrada y producen una nueva relacin como salida, sin modificar las relaciones originales. Por lo tanto, tanto los operandos como los resultados son relaciones, es decir los operadores son cerrados, esto implica que el resultado de una operacin puede usarse como entrada de otra operacin y permite anidar las expresiones del algebra relacional, de la misma forma que podemos anidar operaciones aritmticas.

1.1.

OPERACIONES FUNDAMENTALES DEL ALGEBRA RELACIONAL.

Las operaciones fundamentales propuestas por Codd en 1972 son 8 las cuales podemos clasificar de la siguiente manera

Unarias

Seleccin Proyeccin Unin Diferencia Producto Cartesiano Interseccin Reunin natural (join) Divisin

Binarias

Las cinco primeras se consideran bsicas, las otras tres son combinaciones de las anteriores.

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

1.1.1. O PERACIONES UNARIAS

OPERACION SELECCION () La operacin seleccin se aplica a una nica relacin R y se define otra relacin temporal que contiene todas las tuplas que satisfacen la condicin especificada

Notacin formal: Se usa la letra griega sigma minscula () para denotarla y el predicado o condicin aparece como un subndice de , la tabla resultado se coloca a la izquierda de la operacin. Notacin Alternativa: SELECT FROM R WHERE predicado GIVING TablaResultado Ejemplo: Para seleccionar todos los Empleados cuyo sueldo sea mayor que 1500 se escribe 1 ( )o SELECT FROM Empleado WHERE sueldo > 1500 GIVING T1 Asi si la relacin Empleado contiene la siguiente informacin, la relacin resultante ser Cedula 12345 23456 34567 45678 56789 Nombre Janeth Ramrez Antonio Piero Julio Medina Cesar Briceo Karen Perez CodDep Sueldo D001 D003 D004 D003 D004 1800 1400 1700 2000 1300 Cedula 12345 34567 Nombre Janeth Ramrez Julio Medina CodDep Sueldo D001 D004 1800 1700

Podemos definir el operador formalmente como sigue: () = ( |, )} donde X es una tupla La condicin: Es un predicado que puede tomar un valor de verdad y est definida sobre los atributos de la relacin. En general se permiten comparaciones que usan =, , <, >, , en el predicado de seleccin, adems se pueden combinar varios predicados usando las conectivas AND () OR () y NOT ( ), por ejemplo para encontrar los empleados que ganen mas de 1500 y trabajen en el departamento con cdigo D001 tendremos. 1 () Nota: La relacin resultante tiene una cardinalidad menor o igual a la relacin de entrada y el mismo grado
5

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

OPERACION PROYECCION ,, () La operacin proyeccin se aplica a una nica relacin R y se define otra relacin temporal que contiene un subconjunto vertical de R, extrayendo los valores de los atributos especificados y eliminando los duplicados.

Notacion alternativa: PROJECT R OVER a1, , an GIVING TablaResultado Ejemplo: Generar una lista de las cedulas y sueldos de los empleados 1 , () Donde T1 es una relacin temporal o vista. Asi si la relacin Empleado contiene la siguiente informacin, la relacin resultante ser Cedula 12345 23456 34567 45678 56789 Nombre Janeth Ramrez Antonio Piero Julio Medina Cesar Briceo Karen Perez CodDep Sueldo D001 D003 D004 D003 D004 1800 1400 1700 2000 1300 Cedula Sueldo 12345 23456 34567 45678 56789 1800 1400 1700 2000 1300

Nota: La relacin resultante tiene un grado menor al de la relacin de entrada, y por la eliminacin de duplicados la cardinalidad tambin puede disminuir.

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

1.1.2. O PERADORES BINARIOS BSICOS

OPERACIN UNION La unin de dos relaciones R y S se define como la relacin que contiene todas las tuplas de R, las de S y las de ambas, eliminndose las tuplas duplicadas. R y S deben ser compatibles

Notacin Alternativa: R UNION S GIVING Tr Para que dos relaciones sean compatibles deben cumplir: a. Las relaciones deben tener el mismo grado, es decir, el mismo nmero de atributos. b. Los dominios del los atributos i-esimos de R y S deben ser iguales para todo i. Por ejemplo si deseamos tener los nombres de los empleados y los clientes, se tendra 1 ( )2 () y luego 1 2 o lo que es lo mismo ( ) () OPERACIN DIFERENCIA La operacin diferencia define una relacin compuesta por las tuplas que se encuentras en la relacin R pero no en la relacin S. R y S deben ser compatibles

Notacin Alternativa: R MINUS S GIVING Tr Por ejemplo si deseamos tener aquellos empleados que no hayan sido temporales alguna vez _ Nota: si Empleado_temporal tiene ms atributos de Empleado, se debe hacer primero una proyeccin para garantizar que ambas relaciones sean compatibles

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

OPERACIN PRODUCTO CARTESIANO Operacin producto cartesiano define una relacin que es la concatenacin de cada tupla de la relacin R con cada tupla de la relacin S

Notacin Alternativa: R PRODUCTO S GIVING Tr Dado que el mismo nombre de atributo puede aparecer tanto en R como en S es necesario crear un convenio para diferenciarlos, el cual se realiza adjuntando el nombre de la relacin al atributo de la forma R.atributo, para los atributos que aparecen en una sola Por ejemplo Cliente Cedula 12345 23456 45678 56789 Nombre Maria Ramrez Jose Paez Cesar Briceo Karen Perez
X

Producto Codigo 1 2 Nombre Pepsi Cola Cachito

Cliente X Producto Cliente.Cedula Cliente.Nombre Producto.Codigo Producto.Nombre 12345 12345 23456 23456 45678 45678 56789 56789 Maria Ramrez Maria Ramrez Jose Paez Jose Paez Cesar Briceo Cesar Briceo Karen Perez Karen Perez 1 2 1 2 1 2 1 2 Pepsi Cola Cachito Pepsi Cola Cachito Pepsi Cola Cachito Pepsi Cola Cachito

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

Podemos ver que la relacin resultado tendr una cardinalidad que ser el producto de la cardinalidad de R y de S card(RXS) =card(R)* card(S) y el grado ser la suma de los grados de las relaciones de entrada grado(RXS) = grado(R) + grado(S)

1.2.3. O PERADORES BINARIOS COMPUESTOS

Estos operadores son derivados de los anteriores OPERACIN INTERSECCIN La interseccin de dos relaciones R y S se define como la relacin compuesta por todas las tuplas que existen tanto en R como en S. R y S deben ser compatibles

Notacin alternativa: R INTERSECT S GIVINT Tr Este operador lo podemos expresar en trminos de la operacin diferencia de la siguiente manera = ( ) OPERACIN REUNION (JOIN) Suele ser deseable simplificar ciertas consultas que exijan un producto cartesiano y por lo general nos interesan aquellas combinaciones del producto cartesiano que satisfacen ciertas condiciones, eso significa que incluyen un operador de seleccin sobre el resultado del producto cartesiano, esta combinacin se conoce como reunin (join) por lo que por lo general se usa la operacin de reunin en lugar del producto cartesiano. Esta es una de las operaciones bsicas del Algebra Relacional, se puede definir como una derivacin del producto cartesiano al cual se le aplica una seleccin utilizando un predicado de reunin. El operador que se usa para la reunin es = ( ) Existen varias formas de reunin, cada una de ellas con sutiles diferencias en este curso solo estudiaremos la reunin natural

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

REUNION NATURAL La reunin natural es una combinacin entre dos relaciones R y S donde se verifica la condicin de igualdad sobre los atributos comunes entre ambas relaciones (x). Del resultado se elimina una de las dos apariciones de cada atributo

Notacin alternativa: JOIN R AND S OVER Atributos_comunes GIVINT Tr La operacin reunin natural es una operacin binaria que forma un producto cartesiano de sus dos relaciones, realiza una seleccin formando la igualdad de los atributos que aparecen en ambos esquemas de relacin y elimina los atributos duplicados. Podemos definir formalmente la reunin natural de la siguiente manera = . . ... . ( )} Donde es la unin de los atributos de R y los atributos de S. Esta operacin es fundamental porque permite unir datos de relaciones que estn asociadas por medio de una clave externa o fornea. Ejemplo, dado el siguiente esquema hallar 1Los datos del departamento en el que trabaja cada empleado.

2- Las actividades realizadas por cada empleado. Empleado(cdula, nombre, apellido, codDep, sueldo) Departamento(codDep, nombre) Actividad(codAct, descripcin, cedula) 1 2 JOIN Empleado AND Departamento OVER codDep GIVING Tr1 JOIN Empleado AND Actividad OVER cedula GIVING Tr2

CISI - GDBD2009

10

Tema 2: Diseo de Bases de Datos

OPERACIN DIVISION La operacin de divisin resulta muy til para un tipo de consulta que se presenta con frecuencia, donde se desea obtener los elementos de una relacin que se encuentran relacionados con todos los elementos de otra relacin. Suponga que la relacin R est definida sobre el conjunto de atributos A y que la relacin S est definida sobre el conjunto de atributos B, de tal manera que ) ( , Sea C = A-B, es decir C es el conjunto de atributos de R que no son de S La operacin de divisin define una relacin sobre los atributos C que est compuesta por el conjunto de tuplas de R que corresponde con todas las tuplas de S

Ejemplo Encontrar los empleados que participan en todos los proyectos. 1. Primero se proyectan las relaciones Empleado y proyecto para que cumplan la restriccin que los atributos de Proyecto sean subconjuntos de los Atributos de Empleado , () () E Cedula CodProy 12345 23456 12345 56789 12345 1 1 2 2 3

P CodProy 1 2 3
=

TR Cedula 12345

Vemos que la relacin resultante de la divisin tiene cedula que es la resta de los atributos de E menos los atributos de P

CISI - GDBD2009

11

Tema 2: Diseo de Bases de Datos

1.2.

RBOL DE EJECUCIN DEL A LGEBRA RELACIONAL

Se puede construir el rbol de una consulta a partir de los operadores del Algebra relacional que la componen En este rbol los nodos hojas son las tablas, los nodos internos son operadores del algebra relacional y el nodo raz es la ultima operacin para obtener la respuesta. Por ejemplo, se tiene el siguiente esquema Pelicula (CodP, TituloOriginal, TituloDistribucin) Compaa (CodC, Nombre) Produce(CodC, CodP, Ao, Presupuesto) Se desea el titulo original de las pelculas producidas por la compaa MGM en los aos 2004 o 2005. Una forma de hallar la solucin a esta consulta es: 1. Seleccionar las tuplas de Compaia cuyo nombre sea MGM 1 "" () 2. Seleccionar las tuplas de produce que tengan ao 2005 o 2005. 2 (Produce) 3. Reunir t1 y t2 3 1 2 4. Reunir T3 con pelcula 4 3 5. Proyectar el TituloOriginal en T4 _(4)

Anidando tendramos "" () (Produce)


12

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

Ahora representaremos esta consulta en un Arbol de ejecucin

"" Compaia Produce

Pelicula

1.3.
2.

PROPIEDADES DE LOS OPERADORES DEL ALGEBRA RELACIONAL

Cascada de selecciones Dada una Relacin R si

.. () ( ( () ))
3. 4. Conmutatividad de la seleccin

( ()) ( ())
Cascada de proyecciones ( ()) () 5. Distributividad de la proyeccin y la seleccin ( ()) () )( , , } Si no ( ()) ( } ())

6.

Conmutatividad del Join y del producto cartesiano 13

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

1 2 2 1 1 2 2 1 7. Distributividad de la seleccin con respecto al join/producto cartesiano (1 | 2) (1) | (2) ( ) (1) ( ) (2)
Nota: Este axioma permite empujar las selecciones hacia abajo en el rbol.

8.

Distributividad de la proyeccin sobre el join/producto cartesiano (1 2) (1) (2) ( = ) ((1) } ( = ) ((2) }

9.

Conmutatividad de la unin y la interseccin 1 2 2 1 1 2 2 1

10. Asociatividad de la unin y la interseccin (1 2) 3 1 (2 3) (1 2) 3 1 (2 3) 11. Distributividad de la seleccin con respecto a la unin o la interseccin. (1 | 2) ( (1)) | ( (2)) 12. Distributividad de la proyeccin con respecto a la unin o la interseccin. (1 | 2) ( (1)) ( (2) 13. Conversin del producto cartesiano en join. ( )

Estas propiedades permiten obtener arboles equivalentes.

CISI - GDBD2009

14

Tema 2: Diseo de Bases de Datos

2. SQL
El Algebra Relacional descrita en la seccin anterior proporciona una notacin concisa y formal para representar consultas, sin embargo los Sistemas de Base de Datos comerciales necesitan un lenguaje ms cmodo para el usuario (aunque algunos permiten hacer las consultas en algebra relacional directamente). En esta seccin se estudiar SQL como lenguaje de consulta. Aunque se haga referencia a SQL como lenguaje de consulta este hace mucho ms que consultar, con el tambin se pueden definir las estructuras de los datos, modificar los datos de la base de datos y especificar restricciones de seguridad.

2.1.

EL ESTNDAR

SQL fue desarrollado inicialmente por IBM como SEQUEL, como parte del proyecto System R (primer SMBD Relacional) a principios de 1970, desde entonces se ha establecido como lenguaje estndar. En 1986 ANSI e ISO publicaron una norma SQL, llamada SQL-86, luego vinieron las versiones SQL89, SQL-92, SQL:1999 y la ms reciente SQL:2003

2.2.

EL LENGUAJE DE CONSULTA

La estructura bsica de una expresin SQL para consulta consta de tres clusulas: SELECT, FROM, WHERE: SELECT corresponde con la operacin proyeccin del lgebra relacional, se usa para obtener los atributos deseados en el resultado de la consulta. FROM corresponde con la operacin producto cartesiano del lgebra relacional, genera una lista de las relaciones que deben ser analizadas para la evaluacin de la expresin. WHERE corresponde con la condicin de la seleccin del lgebra relacional, engloba las diferentes condiciones sobre los atributos de las relaciones que aparecen en FROM.

En este estndar el trmino SELECT tiene un significado distinto al del lgebra relacional lo cual se considera un hecho infortunado que pudiera prestarse a confusiones, las cuales se trataran de reducir. Una consulta habitual tiene la siguiente forma SELECT A1, A2, , An FROM r1, r2, , rm WHERE C

CISI - GDBD2009

15

Tema 2: Diseo de Bases de Datos

Donde cada Ai representa un atributo, ri una relacin y C es la condicin, est consulta equivale a la siguiente expresin del algebra relacional , ,.., ( ) En la prctica los productos cartesianos se pueden convertirse en Join que se procesan de manera ms eficiente

2.3.

CLUSULAS Y OPERACIONES

2.3.1. L AS CLUSULAS BSICAS

SELECT Vamos a ver la siguiente consulta obtener la descripcin de los productos que vende la empresa SELECT descripcin FROM producto
Descripcin Papel carta Papel carta Papel Oficio Etiquetas CD Etiquetas CD Carpeta carta

El resultado es una relacin que contiene un nico atributo descripcin con cada una de las descripciones de los productos, note que hay atributos repetidos. Nota: Aunque el algebra relacional indica que la proyeccin elimina atributos repetidos (debido a que estn basadas en la teora de conjuntos) En la prctica la eliminacin de duplicados consume tiempo, por lo que SQL permite duplicados en las relaciones resultantes En los casos en que se desea eliminar duplicados se debe colocar la palabra clave DISTINCT despus del SELECT, con lo que la consulta anterior quedara SELECT DISTINT descripcin FROM cproducto
Descripcin Papel carta Papel Oficio Etiquetas CD Carpeta carta

Adems se puede utilizar el smbolo asterisco * para denotar todos los atributos o utilizar el nombre de la tabla como prefijo, para definir de que tabla o relacin se requieren los valores de los atributos, y evitar ambigedades, por ejemplo cliente.nombre o producto.*.

CISI - GDBD2009

16

Tema 2: Diseo de Bases de Datos

WHERE A continuacin se muestra el uso de la clusula WHERE en SQL, considere la consulta Obtener la descripcin de los productos cuyo precio sea mayor a 100 Bs. SELECT descripcin FROM producto WHERE precio > 100
Descripcin Etiquetas CD Etiquetas CD

SQL utiliza las conectivas lgicas AND, OR y NOT, y las expresiones de cada conectiva pueden contener los operadores de comparacin <, <=, >, >=, = y <>, adems permite utilizar operadores de comparacin para cadenas y expresiones aritmticas, y algunas especiales para las fechas. Tambin incluye un operador BETWEEN para simplificar las operaciones de la clusula WHERE el cual especifica que un valor este entre un rango determinado Se usara SELECT descripcin FROM producto WHERE precio BETWEEN 50 AND 150 En lugar de SELECT descripcin FROM producto WHERE precio >= 50 AND precio <= 150

De forma anloga se puede utilizar el operador NOT BETWEEN FROM Esta clusula define por si misma un producto cartesiano de las relaciones que all aparecen, pero en combinacin con la clusula WHERE se puede convertir en una reunin natural, dado que esta se define en funcin del producto cartesiano, una seleccin y una proyeccin. La consulta nombre y cantidad de los productos vendidos en la fecha 19/07/09 sera SELECT producto.nombre, venta.cantidad FROM producto, venta WHERE producto.codP = venta.codP AND venta.fecha = 2009/07/19 ORDER BY SQL ofrece la manera de controlar el orden en que se presentan las tuplas en una relacin, para lo cual se usa la clusula ORDER BY, la cual se coloca al final, por ejemplo si se desea la descripcin de los productos en orden alfabtico SELECT descripcin FROM producto ORDER BY descripcin

CISI - GDBD2009

17

Tema 2: Diseo de Bases de Datos

O la consulta descripcin y cantidad de los productos vendidos en la fecha 19/07/09 ordenado por cantidad de manera descendente y por descripcin de manera ascendente sera SELECT producto.descripcin, venta.cantidad FROM producto, venta WHERE producto.codP = venta.codP AND venta.fecha = 2009/07/19 ORDER BY venta.cantidad DESC, descripcin ASC 2.3.2. O PERACIONES

1. LA OPERACION RENOMBRAMIENTO SQL proporciona un mecanismo para renombrar tanto relaciones como atributos utilizando el operador AS de la siguiente forma: nombre_antiguo AS nombre_nuevo Este operador puede aparecer tanto en el SELECT como en el FROM, y luego usar el nuevo nombre en lugar del anterior en las dems clusulas, por ejemplo en la consulta siguiente SELECT producto.nombre, venta.cantidad FROM producto, venta WHERE producto.codP = venta.codP AND venta.fecha = 2009/07/19 Podramos tener: SELECT P.nombre, V.cantidad AS Cant FROM producto AS P, venta AS V WHERE P.codP = V.codP AND V.fecha = 2009/07/19 EL operador AS resulta til cuando se usa en la clusula FROM ya que define una variable tupla Estas variables tupla son de gran utilidad para dos tuplas de la misma relacin, por ejemplo determinar la descripcin de los productos cuyo precio sea mayor que el precio del producto con cdigo C004, se puede escribir la siguiente expresin SQL: SELECT DISCTINT P.descripcin FROM producto AS P, producto AS S WHERE P.precio > T.precio and T.codP = C004 2. OPERACIONES CON CADENAS DE CARACTERES SQL especifica las cadenas de caracteres encerrndolas entre comillas simples o dobles, como ya se ha visto anteriormente.

CISI - GDBD2009

18

Tema 2: Diseo de Bases de Datos

La operacin ms usada sobre las cadenas de caracteres es la comparacin de patrones, para la cual se usa el operador LIKE, para la descripcin de los patrones se usan dos caracteres especiales Porcentajes (%) que coincide con cualquier subcadena de caracteres. Guin bajo (_) que coincide con cualquier caracter

Los patrones distinguen entre maysculas y minsculas, vamos a ver algunos ejemplos de patrones: Mar% coincide con cualquier cadena de caracteres que comience por Mar como Maria, Marcos, Martes, Marcador, entre otros. %cer%, coincide con cualquier cadena de caracteres que contenga cer como subcadena como amanecer, cabecera y Cceres. _ _ _ coincide con cualquier cadena de caracteres que tenga tres caracteres _ _ _% coincide con cualquier cadena de caracteres que tenga al menos tres caracteres

Considere la consulta dar los nombres de los clientes cuya direccin contenga la subcadena de caracteres Principal. Esta se puede escribir como SELECT nombre FROM cliente WHERE direccin LIKE %Principal% Para que el patrn pueda contener los caracteres especiales (%, _) se utiliza un carcter de escape, el cual se debe usar justo antes del carcter especial para indicar que se va a tratar como un caracter normal. El carcter de escape se define usando la palabra clave ESCAPE seguido del caracter que se desea usar como escape, por ejemplo. LIKE ab \%cd% ESCAPE \ coincide con todas las cadenas que comiencen por ab %cd LIKE ab\ _cd% ESCAPE \ coincide con todas las cadenas que comiencen por ab_cd

SQL tambin permite buscar discordancias usando el operador NOT LIKE Existen otras funciones que operan sobre caracteres como son la concatenacin (||), la extraccin de subcadenas, el clculo de la longitud de cadenas, conversin a maysculas (upper()) y minsculas (lower()), entre otras.

CISI - GDBD2009

19

Tema 2: Diseo de Bases de Datos

3. OPERACIONES SOBRE CONJUNTOS SQL define las operaciones UNION, INTERSECT y EXCEPT que operan sobre relaciones y corresponden con las operaciones ,, del Algebra relacional, y al igual que en Algebra relacional, las relaciones que participan en estas operaciones deben ser compatibles, por ejemplo todos los clientes con cuenta en el banco podra obtenerse SELECT nombre_cliente FROM impositor Y aquellos clientes que se les ha concedido un prstamo SELECT nombre_cliente FROM prestatario UNION Para obtener todos los clientes del banco que tengan cuenta, se les haya concedido un prstamo o ambos, se usa la unin SELECT nombre_cliente FROM impositor UNION SELECT nombre_cliente FROM prestatario La operacin unin elimina los valores duplicados automticamente, asi si un cliente tiene varias cuentas, solo aparecer una sola vez. Si se desean los valores duplicados se debe escribir UNION ALL en lugar de UNION SELECT nombre_cliente FROM impositor UNION ALL SELECT nombre_cliente FROM prestatario El numero de duplicados es igual al total de valores duplicados que aparecen en ambas relaciones, asi si un cliente tiene 3 cuentas y 2 prestamos su nombre aparecer 5 veces INTERSECCION Si se desea los clientes del banco que tienen cuenta y se les ha concedido prstamos, se usa la interseccin

CISI - GDBD2009

20

Tema 2: Diseo de Bases de Datos

SELECT nombre_cliente FROM impositor INTERSECT SELECT nombre_cliente FROM prestatario Esta operacin tambin elimina los duplicados por lo que de querer conservar los valores duplicados se debe usar INTERSECT ALL. El nmero de duplicados ser el mnimo de valores duplicados que aparecen en cada relacin, por lo tanto si un cliente tiene 2 cuentas y 3 prestamos, su nombre aparecer solo dos veces en el resultado. EXCEPT Para determinar los clientes que tienen cuenta en el banco pero que no tienen prstamos se tiene que usar EXCEPT SELECT nombre_cliente FROM impositor EXCEPT SELECT nombre_cliente FROM prestatario EXCEPT tambin elimina los duplicados automticamente si se desean conservar se usar EXCEPT ALL y el nmero de copias duplicadas de una tupla es el resultado del numero de copias de la primera relacin menos el nmero de copias duplicadas de la segunda relacin, siempre y cuando la diferencia sea positiva, de lo contrario no aparecer.

2.3.3. F UNCIONES DE AGREGACIN Y CLUSULAS GROUP BY Y HAVING

Las funciones de agregacin son funciones que toman una coleccin (un conjunto o multiconjunto) de valores de entrada y devuelve un solo valor. SQL ofrece cinco funciones de agregacin incorporadas: Media: AVG Mnimo: MIN Mximo: MAX Total: SUM Recuento: COUNT
21

CISI - GDBD2009

Tema 2: Diseo de Bases de Datos

Los datos de entrada para SUM y AVG debe ser una coleccin de nmeros, pero los otros operadores tambin pueden operar sobre colecciones de datos de tipo no numrico como las cadenas de caracteres. Por ejemplo determinar el saldo promedio de las cuentas de la sucursal de los chaguaramos, esta consulta se puede formular de la siguiente manera: SELECT AVG(saldo) AS saldo_promedio FROM cuenta WHERE nombre_sucursal = Los Chaguaramos El resultado de esta consulta es una relacin con un nico atributo renombrado como saldo_promedio, que contiene una sola tupla con el valor numrico correspondiente al saldo promedio de las cuentas de esa sucursal. Otros ejemplos Cuantos clientes tiene el banco SELECT COUNT(*) FROM cliente
COUNT(*) 12567

Si se desea eliminar los duplicados antes de calcular los resultados SELECT COUNT(DISTINCT nombre) FROM cliente CLUSULA GROUP BY Existen circunstancias en que es necesario aplicar las funciones de agregacin no solo a un nico conjunto de tuplas sino tambin a un grupo de conjuntos de tuplas, SQL puede definir subconjuntos o grupos, usando la clusula GROUP BY, el atributo o atributos que se especifiquen en esta clusula se usan para formar los grupos. Por ejemplo si se desea Determinar el saldo promedio de cada sucursal SELECT nombre_sucursal, AVG(saldo) AS saldo_promedio FROM cuenta GROUP BY nombre_sucursal Note que ahora se coloc el nombre de la sucursal en el SELECT para que identifique cada uno de los grupos, el resultado de esa consulta puede ser algo como :

CISI - GDBD2009

22

Tema 2: Diseo de Bases de Datos

nombre_sucursal Los Chaguaramos Santa Mnica C.C el Valle La lagunita Mercado Coche Petare

saldo_promedio 40254,6 56345,3 18345,2 1233456,5 1093456,4 134567,7

Si se desea ordenar los resultados se puede usar la clusula ORDER BY CLUSULA HAVING A veces resulta til establecer condiciones que se apliquen a los grupos en vez de a las tuplas, por ejemplo puede que estemos interesados en las sucursales en las que el saldo promedio de las cuentas sea mayor a 50.000 Bs. Esta condicin no se aplica a una sola tupla sino a cada grupo creado por la clusula GROUP BY, para esto se utiliza la clusula HAVING una vez que se hayan formado los grupos, de manera que pueden usarse expresiones de agregacin. Por ejemplo la consulta expresada arriba se puede escribir como: SELECT nombre_sucursal, AVG(saldo) AS saldo_promedio FROM cuenta GROUP BY nombre_sucursal HAVING AVG(saldo) > 50000. Si en la misma consulta aparecen las clusulas WHERE y HAVING, SQL realiza los siguientes pasos: Aplica la condicin de la clusula WHERE. Las tuplas que satisfacen la condicin se separan en grupos segn la clusula GROUP BY. Se aplica la clusula HAVING a los grupos. Se genera el resultado de la consulta.

Ejemplo Determinar el saldo promedio de los clientes que viven en Caracas y que tienen como mnimo 3 cuentas SELECT I.nombre_cliente, AVG(saldo) AS saldo_promedio FROM Impositor I, cuenta C WHERE I.numero_cuenta = C.numero_cuenta AND I.ciudad = Caracas GROUP BY I.nombre_sucursal HAVING COUNT(DISCTINT I.numero_cuenta) >= 3

CISI - GDBD2009

23

Tema 2: Diseo de Bases de Datos

2.4.

SUBCONSULTAS ANIDADAS

SQL proporciona un mecanismo para anidar subconsultas, las subconsultas son expresiones SELECT-FROM-WHERE que estn anidadas dentro de otra consulta. La finalidad principal de las subconsultas es llevar a cabo comprobacin de pertenencia a un conjunto, hacer comparaciones de conjuntos y determinar cardinalidades de conjuntos. 2.4.1. P ERTENENCIA A CONJUNTOS

SQL permite comprobar la pertenencia de las tuplas a una relacin. La conectiva IN comprueba la pertenencia a un conjunto, donde el conjunto es la coleccin de valores resultado de una clusula SELECT, con la conectiva NOT IN se comprueba la no pertenencia a dicho conjunto. Por ejemplo considere la consulta determine todos los clientes que tienen tanto un prstamo como una cuenta en el banco la cual se escribi anteriormente como una interseccin de dos conjuntos. Se puede adoptar un enfoque alternativo que consiste en determinar todos los clientes que tengan cuenta en el banco y luego determinar si son miembros del conjunto de prestatarios, el cual genera el mismo resultado que la anterior. Primero comencemos determinando los clientes con cuentas SELECT nombre_cliente FROM impositor Ahora veamos la consulta completa SELECT DISCTINCT nombre_cliente FROM prestatario WHERE nombre_cliente IN (SELECT nombre_cliente FROM impositor) Este ejemplo muestra que en SQL es posible escribir la misma consulta de varias formas distintas. En el ejemplo anterior se comprueba la pertenencia con un solo atributo, pero es posible comprobar la pertenencia con ms de un atributo, asi se puede formular la consulta Determinar todos los clientes que tienen tanto un prstamo como la sucursal de Los Chaguaramos de una manera distinta SELECT DISCTINCT nombre_cliente FROM prestatario, prestamo WHERE prestatario.num_prestamo = prstamo.num_prestamo AND nombre_sucursal =Los Chaguaramos AND (nombre_sucursal, nombre_cliente) IN (SELECT nombre_sucursal, nombre_cliente FROM impositor I, cuenta C
CISI - GDBD2009 24

Tema 2: Diseo de Bases de Datos

WHERE I.num_cuenta = C.num_cuenta) El operador NOT IN se usa de manera parecida y con un significado semejante al EXCEPT IN y NOT IN tambin se pueden usar en conjuntos numerados, por ejemplo SELECT nombre_sucursal FROM cuenta WHERE nombre_sucursal NOT IN (Los Chaguaramos, Santa Monica, El Valle) 2.4.2. C OMPARACIN DE CONJUNTOS

Como ejemplo de la capacidad de comparar conjuntos de las consultas anidadas, considere la consulta determinar la descripcin de los productos cuyo precio sea mayor que el precio de los productos con con descripcin Etiquetas de CD, se puede escribir la siguiente expresin SQL: SELECT DISCTINT P.descripcin FROM producto AS P, producto AS S WHERE P.precio > T.precio and T.descripcin = Etiquetas CD

SQL tiene como alternativa la expresin mayor que, al menos una que se representa por > SOME que permite volver a escribir la consulta de la siguiente manera: SELECT descripcin FROM producto WHERE precio > SOME (SELECT precio FROM product WHERE descripcion = Etiquetas CD)

La comparacin > SOME de la clusula WHERE de la consulta mas externa es cierta si el valor del precio de la tupla es mayor que al menos uno de los miembros del subconjunto generado por la subconsulta. SQL permite realizar las comparaciones < SOME, <= SOME, >= SOME y <> SOME. La palabra clave ANY es sinnimo de SOME. Ahora modificaremos la consulta para que el precio comparado sea mayor a todos los precios de la subconsulta, para ello se usa > ALL que corresponde a la expresin mayor que todos

CISI - GDBD2009

25

Tema 2: Diseo de Bases de Datos

SELECT descripcin FROM producto WHERE precio > ALL (SELECT precio FROM product WHERE descripcion = Etiquetas CD)

SQL permite realizar las comparaciones < ALL, <= ALL, >= ALL y <> ALL. Como ejercicio compruebe que = SOME es idntico a IN y <> ALL es lo mismo que NOT IN. Como ejemplo adicional considere la consulta Determinar la sucursal que tiene el saldo promedio mximo. En SQL las funciones de agregacin no se pueden componer asi que no se puede usar MAX(AVG(saldo)). En vez de eso se puede usar una estrategia que primero determine todos los saldos promedios por sucursal y luego se anida con una consulta que determina que los saldos promedios por sucursal es mayor o igual a todos los saldos promedios SELECT nombre_sucursal FROM cuenta GROUP BY nombre_sucursal HAVING AVG(saldo) >= ALL (SELECT AVG(saldo) FROM cuenta GROUP BY nombre_sucursal) OTROS COMPARADORES EXIST: devuelve el valor TRUE si la subconsulta argumento no es vaca, lo contrario NOT EXIST UNIQUE: devuelve TRUE si la subconsulta argumento no contiene tuplas duplicadas, lo contrario NOT UNIQUE

3. QBE
Incompleto

CISI - GDBD2009

26

Tema 2: Diseo de Bases de Datos

BIBLIOGRAFA
Silbershatz A, Korth H. Fundamentos de bases de datos. Quinta edicin, 2006, McGraw-Hill Connolly, T. M., Begg C. E. Sistemas de Bases de Datos. Cuarta edicin, 2005, Pearson

CISI - GDBD2009

27

S-ar putea să vă placă și