Anda di halaman 1dari 6

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.

Anda mungkin juga menyukai