P. 1
algebra relacional PDF

algebra relacional PDF

5.0

|Views: 3.448|Likes:
Publicado porluemivr

More info:

Published by: luemivr on Jul 09, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/12/2013

pdf

text

original

ALGEBRA RELACIONAL

Tendencias en Desarrollo de Software
TECNOLOGICO DE ANTIOQUIA (TDA) Docente: Luis Emilio Velásquez Restrepo El Algebra relacional consta de un conjunto de operaciones sobre las relaciones; los operandos de cada operación están formulados por una o más relaciones y como resultado se tiene otra relación. Consultas Asociadas SQL incluye las operaciones UNION (unión), INTERSECT (intersección) y MINUS (diferencia), que operan sobre relaciones y se corresponden con los operadores del álgebra relacional. l. Recuperación usando UNION Obtener los números de los artículos de los que se han comprado más de 75 unidades o en la fecha 1/05/91. (SELECT num-art FROM compras WHERE cantidad> 75) UNION (SELECT num-art FROM compras WHERE fecha = "1/05/91") 2. Recuperación usando INTERSECT Obtener los mímeros de los artículos de los que se han comprado más de 75 unidades en la fecha 1/05/91. (SELECT num-art FROM compras WHERE cantidad > 75) INTERSECT (SELECT num-art FROM compras WHERE fecha = "1/05/91") 3. Recuperación usando MINUS Obtener los números de los artículos de los que se han comprado más de 75 unidades, pero la compra no se efectuó en la fecha 1/05/91. (SELECT FROM compras WHERE cantidad> 75) MINUS (SELECT FROM WHERE num-art WHERE fecha = "1/05/91")

SQL ofrece la posibilidad de aplicar funciones de grupo de tuplas mediante la cláusula GROUP BY (agrupar por). Un grupo se define como el conjunto de filas que tienen el mismo valor en la columna atributo especificada El formato del bloque es el siguiente: SELECT función FROM reLación [GROUP BY...] [HAVING. función operador-comparación ...]

Las funciones pueden ser: COUNT (número de tuplas), SUM (total), MIN (mínimo), MAX (máxímo) y A VG (promedio). Admiten los Formatos: - COUNT (*): Cuenta las fiJas de la tabla. - COUNT (DISTINCT atributo): Proyecta y cuenta. - SUM (DISTINCT atributo): Proyecta y suma. - SUM (ALL atributo): Suma todas las filas. - MIN (atributo>. - MAX (atributo>. - AVG (DISTINCT atributo>: Proyecta y promedia. - AVG (ALL atributo). 1. Recuperación con la función COUNT (*). Obtener el número total de artículos. SELECT COUNT (*) FROM artículos 2. Recuperación con la función COUNT (DISTINCT atributo) Contar el número total de artículos comprados. SELECT COUNT (DISTINCT num-art) FROM compras 3. Recuperación con la función SUM. Obtener la cantidad total comprada del artículo 11. SELECT SUM (cantidad) FROM compras WHERE num-art = "11" 4. Recuperación con la función MAX o MIN Obtener el artículo de mayor precio. SELECT concepto, MAX(pvp) FROM compras 5. Recuperación con la función AVG. Obtener la cantidad promedio de las compras del artículo 11. SELECT AVG (cantidad) FROM compras WHERE num-art = "11" 6. Recuperación con la cláusula GROUP BY Obtener los números de todos los artículos comprados y su cantidad total. SELECT num-art, SUM(cantidad) FROM compras GROUP BY num-art 7. Ejemplo con varias funciones Obtener ordenadamente el número del artículo y la suma de las cantidades compradas para aquellos artículos cuya cantídad total comprada sea mayor de 100. SELECT num-art, SUM(cantidad) FROM compras GROUP BY num-art ORDER BY num-art HAVING SUM (cantidad) > 100

CONSULTAS ANIDADAS l. Recuperación usando IN Obtener los nombres de los proveedores que suministran el artículo número 22, SELECT FROM WHERE nombre FROM proveedores WHERE dni IN (SELECT dni FROM art-prove número = "22") El nombre del proveedor sólo se escoge si en la subconsulta (SELECT dni FROM art-prove WHERE número = "22") Hay algún artículo con el número 22, Esta consulta también se puede escribir, sin necesidad de utilizar bloques anidados, de la siguiente forma: SELECT DISTINCT a.nombre FROM proveedores.a, art-prove.b WHERE a.dni = b.dni AND número = "22" 2. Recuperación usando> ANY Obtener los nombres de los proveedores cuyo DNI sea mayor que el DNI más bajo de los proveedores que residen en Barcelona. SELECT Nombre FROM proveedores WHERE dni>ANY (SELECT dni FROM proveedores WHERE Localidad = "BarceLona") También se puede escribir como una reunión de una tabla consigo misma. 3. Recuperación usando ALL Obtener los nombres de los proveedores que no suministran el artículo número 11, SELECT nombre FROM proveedores WHERE "11" <> ALL (SELECT número FROM art-prove WHERE dni = proveedores .dni) En la última línea, el primer DNI pertenece a la relación ART-PROVE seleccionada en el bloque interno; sin embargo, para referirse a un atributo del bloque externo dentro del bloque interno hay que especificar el nombre de su relación, proveedores.dni. 4. Recuperación usando EXISTS Obtener los nombres de los proreedores que suministran el artículo número 11. SELECT nombre FROM proveedores WHERE EXISTS (SELECT * FROM art.prove WHERE dni = proveedores.dni AND número = "11") 5. Recuperación usando NOT EXISTS Obtener los nombres de los proveedores que no suministran el artículo número 11. SELECT nombre FROM proveedores WHERE NOT EXISTS (SELECT *

FROM art-prove WHERE dni = proveedores.dni AND número = "11") 6. Recuperación con una subconsulta utilizando la misma relación en ambos bloques Obtener los DNI de los proveedores que suministran al menos una parte suministrada por el proveedor 3333. SELECT DISTINCT dni FROM art-prove WHERE número IN (SELECT número FROM art-prove WHERE dni;:: "3333") 7. Recuperación con niveles múltiples de anidamiento Obtener los nombres de los proveedores a los que se les ha comprado papel. SELECT DISTINCT nombre FROM proveedores WHERE dni IN (SELECT dni FROM compras WHERE num-art IN (SELECT num-art FROM articulos WHERE concepto = "PapeL"))

OPERACIONES DE ACTUALIZACIÓN

El DML del SQL incluye las siguientes operaciones de actualización: UPDA TE (modificar), INSERT (insertar) y DELETE (suprimir). Estas operaciones son directas, es decir, no auguran la integridad de los datos, y será tarea del usuario su control; por ejemplo, el sistema no impedirá dar de alta a un artículo en la relación COMPRAS aunque no esté en ARTICULOS. l. Actualización de un solo registro Cambiar el precio al artículo 11 a 120. UPDATE artículos SET pvp = 120 WHERE número = 11 2. Actualización de registros múltiples Aumentar en 10 unidades el precio a todos los artículos. UPDATE articulos SET pvp = pvp + 10 3. Actualización con una subconsulta A los artículos suministrados por el proveedor 3333 aumentar les el precio en cinc, unidades. UPDATE articulos SET pvp = pvp + 5 WHERE"3333" = (SELECT dni FROM art-prove WHERE número = articuLos.número) 4. Actualización de tablas múltiples. Aumentar en 10 unidades el precio del artículos 22. UPDATE articuLos SET pvp = pvp + 10 WHERE número = 22 UPDATE compras SET cantidad = cantidad + 10 WHERE número = 22

Con una proposición UPDATE sólo se puede actualizar una relación, por lo cual habrá que especificar tantas proposiciones UPDA TE como relaciones se deseen modificar. 5. Inserción de un solo registro Insertar el artículo disco con el número 33 al precio de 200. INSERT INTO articulos: ("33", "Disco", 200)

6. Inserción de múltiples registros Insertar en la relación OTRA que tiene una columna NUM los números de los artículos suministrados por el proveedor 3333. INSERT INTO otra SELECT número FROM art-prove WHERE dni = "3333" 7. Supresión de un solo registro Borrar el artículo disco. DELE TE artículos WHERE concepto = "Disco" 8. Supresión de múltiples registros Borrar todas las compras. DELETE compras. Se han suprimido todas las filas de la relación; está vacía, pero sigue existiendo la tabla. 9. Supresión en relaciones múltiples de registros múltiples Borrar al proveedor 5555 y las compras realizadas. DELETE compras WHERE "5555" = (SELECT dni FROM proveedor WHERE dni = compras.dni) DELETE art-prove WHERE "5555" = (SELECT dni FROM proveedor WHERE dni = art-prove.dni) DELETE proveedores WHERE dni = "5555"

Lenguajes huésped El modelo relacional no requiere de un lenguaje huésped de consulta que incluya ciclos o punteros para acceder a los datos; sin embargo, la posibilidad de hacerlo muchas veces es útil en las aplicaciones comerciales de bases de datos. Para facilitar estas aplicaciones, el SYSTEM R incluye al SQL inmerso en un lenguaje de programación, como puede ser el PL/l o el Cobol. Cuando se utiliza SQL inmerso se pueden producir dos situaciones: l. El resultado es una sola tupla. 2. El resultado es varias tuplas.

En el primer caso se utilizan las mismas sentencias del SQL estudiadas hasta ahora (SELECT de una sola tupla, UPDA TE, INSERT, DELETE) con los mismos formatos. Sólo en la sentencia SELECT se va a incluir una nueva cláusula (INTO, «a»), que especifica las variables locales definidas en el programa, precedidas del símbolo $, para recibir los valores que devuelva la sentencia. Su formato sería: $ SELECT *atributos INTO $ varibles FROM relaciones [WHERE condiciones] En el segundo caso, mientras con un comando (SQL), cada vez que se ejecuta una operación de E/S se recupera un conjunto de registros, el lenguaje anfitrión sólo es capaz de operar con un registro a la vez. Para solucionar este problema se define un cursor. Un cursor es un puntero a una tupla. Su función es similar a los punteros deactualidad del lenguaje de manipulación de datos DBTG. La forma de acceder mediante un lenguaje huésped a una base de datos es la siguiente: • Se llama a un procedimiento para que ejecute la consulta SQL. • Se abre un cursor para la relación que resulta de la consulta SQL y permita procesar las tuplas una a una. • Se hace una llamada de búsqueda para obtener la primera tupla de la relación asociada con el cursor que se acaba de abrir. • Mediante un ciclo se continúan haciendo más llamadas de búsqueda con el fin de mover el cursor a la siguiente tupla y poder procesarlas todas. Sin embargo, un programa es más complejo debido a que necesita: • Un preprocesador para analizar el código del programa fuente, con sus comandos SQL incorporados, antes de su compilación. • Un procedimiento para transferir los valores de una tupla a variables del lenguaje huésped. Los comandos que utilizan curso res van precedidos del signo dólar ($); son los siguientes: • $DECLARE (declarar). Define las variables del lenguaje huésped que se utilizan en consultas SQL. • $LET nombre-cursar BE proposición-SQL. Define y asocia el paso a la proposición-SQL. • $OPEN nombre-cursor. Permite activar y asociar al cursor con un conjunto de registros. • $FECTH nombre-cursor. Posiciona el cursar en el siguiente registro de la relación; efectúa una lectura secuencia!. • $CLOSE nombre-cursor. Permite cerrar un cursor. También es necesaria la cláusula TO.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->