You are on page 1of 10

1

Algebra Relacional y SQL


Tablas sobre las que se basarn las operaciones de consulta
Cuenta






Prstamo



















Cliente














nombre-sucursal nmero-cuenta nom bre-cliente saldo
Centro 101 Daz 500
Sur 215 Allasino 700
Casa Central 102 Carletti 400
Norte 305 Gonzalez 350
Casa Central 201 Brollo 900
Este 222 Miele 700
Oeste 217 Prez 750
Centro 105 Prez 850
nombre-
sucursal
nmero-
prstamo
nom bre-
cliente
cantid
ad
Centro 17 Daniele 1000
Este 23 Allasino 2000
Casa
Central
15 Carletti 1500
Centro 14 Marquez 1500
Sur 93 Trejo 500
Norte 11 Gonzalez 900
SurOeste 29 Brollo 1200
NorEste 16 Balbastro 1300
Centro 18 Daz 2000
Casa
Central
25 Vignatti 2500
Oeste 10 Riera 2200
nom bre-
cliente
calle ciudad-cliente
Daniele Garibaldi Rafaela
Allasino Avda. Freyre Santa Fe
Carletti Garibaldi Rafaela
Trejo Avda. Freyre Santa Fe
M iele Santa Fe Santo Tom
Gonzalez Oroo Esperanza
Brollo 25 de M ayo Galvez
Balbastro Sarmiento Santo Tom
Daz Saavedra Recreo
Vignatti Necochea Rosario
Riera Catamarca Coronda
Prez Constitucin Esperanza
2
Sucursal

nombre-
sucursal
activo ciudad-
sucursal
Centro 9000000 Coronda
Este 2100000 Recreo
Casa
Central
1700000 Paran
Sur 400000 Paran
Norte 8000000 Paran
SurOeste 300000 Venado
Tuerto
NorEste 3700000 Santa Fe
Oeste 7100000 Coronda
3
Algebra Relacional
Lenguaje de consulta procedural
Conjunto de operaciones que toman una o dos relaciones(tablas) como entrada y producen una nueva
relacin(tabla) como resultado
Operaciones fundamentales: seleccionar, proyectar, producto cartesiano, unin, interseccin y
diferencia de conjuntos, join, divisin
La operacin seleccionar
Operacin unitaria, selecciona tuplas que satisfacen un predicado (condicin dado)

nombre-sucursal = Casa Central
(prestamo)

nombre-sucursal = Casa Central ^ cantidad > 1800
(prestamo)

La operacin proyectar

Operacin unitaria que devuelve su relacin argumento con ciertas columnas omitidas; se eliminan las filas
duplicadas

nombre-sucursal, nombre-cliente
(prestamo)


La operacin producto cartesiano

Operacin binaria, que combina cada una de las tuplas de una relacin con todas las tuplas de la otra

prestamo x cliente


Las operaciones se pueden combinar para producir resultados diversos

Operaciones de conjunto

Las tablas deben ser compatibles para la operacin de conjunto, para ello deben cumplir con las siguientes
condiciones:

Las relaciones deben tener el mismo nmero de atributos
Los dominios de los atributos deben ser los mismos


4
Unin de conjuntos

Operacin binaria, que contiene las tuplas de que aparecen en ambas relaciones (tablas) eliminando los
duplicados

Ej.: Encontrar los clientes de la CasaCentral

nombre--cliente
(
nombre-sucursal = Casa Central
(cuenta))



nombre--cliente
(
nombre-sucursal = Casa Central
(prestamo))


Interseccin de conjuntos

Operacin binaria, que contiene las tuplas que son iguales en ambas relaciones (tablas). Las lista una sola
vez.
Ej.: Encontrar los clientes que tienen cuenta y prstamo en la CasaCentral

nombre--cliente
(
nombre-sucursal = Casa Central
(cuenta))



nombre--cliente
(
nombre-sucursal = Casa Central
(prestamo))


Diferencia de conjuntos

Operacin binaria, que contiene las tuplas que estn en una relacin (tabla) pero que no est en la otra.
Ej.: Encontrar los clientes que tienen cuenta pero que prstamo en la CasaCentral

nombre--cliente
(
nombre-sucursal = Casa Central
(cuenta))

-

nombre--cliente
(
nombre-sucursal = Casa Central
(prestamo))



Producto Natural (Concatenacin/Join)

Operacin binaria, que contiene las tuplas que son combinacin de dos relaciones (tablas) pero que tienen un
valor igual en un atributo que toma valores del mismo dominio en ambas relaciones (tablas).

Esta operacin surge como un producto cartesiano seguido de una operacin de seleccin. La seleccin se
realiza forzando la igualdad en aquellos atributos que estn en ambas relaciones y que toman valores del
mismo dominio (obviamente de aquellos que interesa aparear).

Ej.: Encontrar los clientes que tienen cuenta y prstamo en la CasaCentral

nombre_cliente
(
deposito.nombre-sucursal = prestamo.nombre sucursal and nombre sucursal =Casa Central
(cuenta
x prestamo)

||

nombre_cliente
(
nombre sucursal =Casa Central
(cuenta
deposito.nombre-sucursal = prestamo.nombre sucursal Prestamo)
5
Divisin

Esta operacin se establece en consultas que incluyen la frase para todos.
Sea el siguiente ejemplo: se quiere obtener los clientes que tienen cuenta en todas las sucursales de la ciudad
de Paran.
Las sucursales de la ciudad de Santa Fe se obtiene por medio de:

nombre-sucursal
(
ciudad-sucursal = Paran
(sucursal))


Los clientes y las sucursales donde tienen cuenta se obtiene por medio

nombre-cliente, nombre-sucursal
(depsito)
La consulta final resultante es:

nombre-cliente, nombre-sucursal
(depsito)

%

-sucursal
(
ciudad-sucursal = Paran
(sucursal))


La respuesta son solo los nombres de los clientes que cumplen con los valores de la sucursal que
corresponden a Paran


6
SQL


Sentencia SQL bsica

SELECT corresponde a la operacin de proyeccin aqu se especifican las columnas que se quieren mostrar

FROM corresponde al producto cartesiano, lista de relaciones (tablas) que se van a examinar

WHERE corresponde a la operacin de seleccin y/o producto natural aqu se especifican las condiciones
que deben cumpl las tuplas para que formen parte de la tabla respuesta

Operaciones del Algebra Relacional

Select *
from Prestamo
where monto >100000

Seleccin pura


Select Nombre-sucursal, nombre-cliente
from Prestamo
Proyeccin pura



Select Nombre-sucursal, nombre-cliente
from Prestamo
where monto >100000
Seleccin +Proyeccin (puede ser divisin
dependiendo de cmo se haga la consulta)
7


Select *
from prstamo, cliente Producto cartesiano


Select nombre, direccin
from prstamo, cliente
Producto natural

where cliente.numero-cliente
=prstamo.nmero-cliente


Las condiciones pueden
Select nombre, direccin
ser separadas por los operadores
from prstamo, cliente

lgicos and y or y por los
where cliente.numero- cliente

operadores de relacin
=prstamo.nmero-cliente

=, <>, >=, <=,>, < and cantidad >100000




Operaciones de conjunto


(select distinct nombre-cliente
from depsito
where nombre-sucursal = Casa Central)
union {all}
(select distinct nombre-cliente
from prstamo
where nombre-sucursal = Casa Central)


(select distinct nombre-cliente
from depsito
where nombre-sucursal = Casa Central)
intersect
(select distinct nombre-cliente
from prstamo
where nombre-sucursal = Casa Central)

Si no se pone distinct los duplicados tambin se
listan

(select distinct nombre-cliente
from depsito
where nombre-sucursal = Casa Central)
minus
(select distinct nombre-cliente
from prstamo
where nombre-sucursal = Casa Central)
8

El operador IN

El conector in prueba si se es miembro de un conjunto, donde el conjunto es una coleccin de valores
producidos por una clusula select. El conector not in prueba la no pertenencia al conjunto.

Encontrar todos los clientes que tienen un prstamo y una cuenta en la sucursal Casa Central .
Encontrar todos los clients que tienen un prstamo pero no tienen una cuenta en la sucursal Casa Central


select distinct nombre-cliente select distinct nombre-cliente
from prstamo
from prstamo
where nombre-sucursal = Casa Central
where nombre-sucursal =Casa Central
and nombre-cliente in
and nombre-cliente not in
(select nombre-cliente (select nombre-cliente
from depsito
from depsito
where nombre-sucursal = Casa Central)
where nombre-sucursal= Casa Central)




Variables de tupla
Las variables de tupla se definen en la clusula from.
Encontrar el nombre y la ciudad de todos los clientes que tienen un prestamo en alguna sucursal

select distinct T.nombre-cliente, ciudad-cliente
from prstamo S, cliente T
where S.nombre-cliente = T.nombre-cliente

En consultas que contienen subconsultas, se aplica una regla de mbito las variables de tupla.

En una subconsulta, est permitido usar slo variables de tupla definnidas e la misma subconsulta o en
cualquier consulta que contenga a la subconsulta Si una variable de tupla est definida tanto localmente como
globalmente (en una consulta que la contiene), se aplica la definicin local.

Las variables de tupla son muy tiles para comparar dos tuplas de la misma relacin.








9


Encontrar a todos los clientes que tienen una cuenta en la misma sucursal en la que Miele tiene una
cuenta

select distinct T.nombre-cliente
from depsito S, depsito T
where S.nombre-cliente = Miele and
S.nombre-sucursal = T.nombre-sucursal

Un camino alternativo para expresar esta consulta sera:
select distinct nombre-cliente
from depsito
where nombre-sucursal in
(select nombre-sucursal
from depsito
where nombre-cliente = Miele)


Comparacin de conjuntos
Sea la consulta Encontrar los nombres de todas las sucursales q un activo mayor que alguna sucursal
situada en Santa Fe.
select distinct T.nombre-sucursal
from sucursal T, sucursal S
where T.activo > S.activo and
S.ciudad-sucursal = Santa Fe

Es una comparacin mayor que, no podemos escribir la expresin usando la construccin in. La frase
mayor que algn se representa en SQL por > some
select nombre-sucursal
from sucursal
where activo > some
(select activo
from sucursal
where ciudad-sucursal = Santa Fe)
Lo que se compara aqu es el valor individual de cada tupla con el conjunto de valores que se obtienen en la
subconsulta anidada.






10
Comparacin de conjuntos

La comparacin devolver verdadero y se mostrar el resultado si la fila individual de la consulta externa es
(mayor, menor, menor-igual, etc.) que ANY (alguno), SOME (alguno) ALL (todos) los miembros del
conjunto devuelto por la subconsulta

SQL tambin permite las comparaciones < some, <= some, > some, >= some y <> some. La palabra clave
any es sinnimo de some en SQL.
Si quisiramos encontrar los nombres de las sucursales que tienen un activo mayor que todas las sucursales
de Santa Fe, deberamos usar la construccin > all.

select nombre-sucursal
from sucursal
where activo > all
(select activo
from sucursal
where ciudad-sucursal = Santa Fe)

Del mismo modo SQL permite las comparaciones < all, <= all, >all, >= all y <> all.

You might also like