Sei sulla pagina 1di 16

c 


c   
 
En las secciones anteriores se han estudiado las maneras de modelar información
de manera "relacional" empleando el concepto de entidades que se relacionan
entre sí.

Esta sección presenta la manera de hacer consultas a una base de datos


empleando algunos conceptos matemáticos aplicados a un esquema relacional. Los
lenguajes que se analizan más adelante se derivan precisamente del algebra
relacional.

El álgebra relacional consiste de algunas simples pero poderosas maneras de


construir nuevas relaciones a partir de otras. Si pensamos que las relaciones
iniciales son los datos almacenados entonces las nuevas relaciones se pueden ver
como respuestas a algunas consultas deseadas.

c     


 

x ¦ S, la unión de ¦ y S es el conjunto de elementos que están en ¦ o S o
ambos. Un elemento solo aparece una sola vez.
x ¦ S, el conjunto de elementos que aparecen en ambos ¦ y S
x ¦ - S, la diferencia de ¦ y S, el conjunto de elementos que estan en ¦ pero
no en S. Es importante resaltar que ¦ - S es diferente a S - ¦.
x ¦ / S, la división de una relación entre otra, debe cumplirse que para toda
tupla en ¦ exista su correspondiente en S.

¦estricciones:

1. ¦ y S deben tener esquemas idénticos.


2. El orden de las columnas debe ser el mismo

Ejemplos:

    



Carrie Fisher 123 Maple St. F 9/9/99
Mark Hamill 456 Oak ¦d. M 8/8/88
    

Harrison Ford 789 Palm Dr. M 7/7/77
Carrie Fisher 123 Maple St. F 9/9/99

Unión

    



Harrison Ford 789 Palm Dr. M 7/7/77
Mark Hamill 456 Oak ¦d. M 8/8/88
Carrie Fisher 123 Maple St. F 9/9/99

Intersección

    



Carrie Fisher 123 Maple St. F 9/9/99

¦esta

    



Mark Hamill 456 Oak ¦d. M 8/8/88

c  
  
x Crea una nueva relación a partir de otra, pero incluyendo sólo algunas de
las columnas
x A1,A3,A6 (¦


    
 

Star Wars 1977 124 color Fox
Mighty Ducks 1991 104 color Disney
Wayne's World 1992 95 color Paramount

Movie

Ejemplo:

title,year,length(Movie

   
Star Wars 1977 124
Mighty Ducks 1991 104
Wayne's World 1992 95

filmType(Movie



color

c c 
  
x Crea una nueva relación a partir de otra, pero incluyendo sólo algunas de
las tuplas a partir de un criterio dado.
x El criterio se basa en restricciones sobre los atributos de la relación ¦ y no
pueden incluirse otras relaciones en dicho criterio que no esten en ¦
x A3>16 (¦ , A3>16 and A3 < 45 (¦ , nombre='Carlos' and edad=45 (¦


    
 

Star Wars 1977 124 color Fox
Mighty Ducks 1991 104 color Disney
Wayne's World 1992 95 color Paramount

Movie

Ejemplos:

length>=100 (Movie


    
 

Star Wars 1977 124 color Fox
Mighty Ducks 1991 104 color Disney

length>=100 and studioName='Fox' (Movie


    
 

Star Wars 1977 124 color Fox
title,studioName( length>=100 (Movie


 

Star Wars Fox
Mighty Ducks Disney

c !
 
 "##
Almacena temporalmente el resultado de un operación en un relación dada

LOLO <-- title,studioName( length>=100 (Movie

c $%
&

 
Sean

 '  %
a b c d
a b e f C D
b c e f c d
e d c d e f
e d e f
a b d e S

A B
a b
e d

¦/S

Ejemplo: Estudiantes que han tomado todos los cursos de "IS"

ID,num ( depto='IS' (estudiante_cursos / num( depto='IS'(cursos


c (    
 )
Producto cruz o solo producto

¦ X S, los esquemas de ambas relaciones se mezclan y unen.

Dados

'  %
 '
2 5 6
1 2
4 7 8
3 4
9 10 11
¦
S
 *' '  %
1 2 2 5 6
1 2 4 7 8
1 2 9 10 11
3 4 2 5 6
3 4 4 7 8
3 4 9 10 11

¦XS

c +    ,),
Es un producto cartesiano donde nos interesan únicamente algunas tuplas que
hacen "match" en algun criterio.

 *' '  %
1 2 2 5 6
1 2 4 7 8
1 2 9 10 11
3 4 2 5 6
3 4 4 7 8
3 4 9 10 11
 '  %
1 2 5 6
3 4 7 8

¦ |X| S

c -./

El outer join es una extensión del join para lidear con información no existente.
Exiten 3 tipos, izquierdo, derecho y completo.

 #

  #  #
 
 
Coyote Toon Hollywood
Coyote Mesa 1500
¦abbit Tunnel Carrotville
¦abbit Mesa 1300
Death
Smith ¦evolver Gates ¦edmond 5300
Valley
Williams ¦edmond 1500
Williams Seaview Seattle
ft-works
employee

 #  


  #  
Coyote Toon Hollywood Mesa 1500
¦abbit Tunnel Carrotville Mesa 1300
Williams Seaview Seattle ¦edmond 1500

|X|

c - 0./
 

 #  #



 
 
Coyote Toon Hollywood Mesa 1500
¦abbit Tunnel Carrotville Mesa 1300
Williams Seaview Seattle ¦edmond 1500
Death
Smith ¦evolver null null
Valley
c - *
./


 #  


  #  
Coyote Toon Hollywood Mesa 1500
¦abbit Tunnel Carrotville Mesa 1300
Williams Seaview Seattle ¦edmond 1500
Gates null null ¦edmond 5300

c - 1./
 

 #  #



 
 
Coyote Toon Hollywood Mesa 1500
¦abbit Tunnel Carrotville Mesa 1300
Williams Seaview Seattle ¦edmond 1500
Death
Smith ¦evolver null null
Valley
Gates null null ¦edmond 5300

c 2 

  

Cuáles son los títulos y años de las películas hechas por Fox y que tengan al
menos 100 minutos de duración.

1. Seleccionar aquellas películas que tienen length >=100

length>=100 (Movie

2. Seleccionar aquellas películas que tienen studioName='Fox'

studioName='Fox' (Movie

3. Calcular la intersección de (1 y (2
length>=100 studioName='Fox' (Movie

4. Proyectar únicamente title y year

title,studioName ( length>=100 studioName='Fox' (Movie

Problema:

Dadas las 2 relaciones siguientes, indique un query en algebra relacional para


encontrar los nombres de las estrellas que trabajan en películas cuya duración sera
mayor o igual que 100.

Movie (title,year,length,filmType,studioName

Movie_star(title,year,starName

starName ( length>=100 (Movie |X| Movie_star

c * 
   
¦enombrar una relación para facilitar la interacción con otras

s (¦

Ej.
t.nombre ( s.nombre='carlos' and t.curso='IS341' ( s (P¦OFE X t (CU¦SO

¦enombrar un atributo

Suponiendo ¦ (A,B,C

¦(A,X,C (¦ s(A,X,C (¦ A, B as X, C (¦ B as X (¦
= ¦(A,X,C = S(A,X,C = ¦(A,X,C = ¦(X

c 3 


 
c  4


 

r <-- r - E
depositor <-- depositor - customer-name='Smith'(depositor

c   
 

r <-- r E

account <-- account {(A-973, "Perryridge", 1200 

c   
5
 

r <-- F1,F2,....Fn(r

account <-- account-number, branch-name, balance*1.05 (account

Si sólo queremos actualizar algunas tuplas:

r <-- F1,F2...Fn ( P(r (r- P(r

Suponiendo que se desea que las cuentas con balance superior a $ 10,000 reciban
un aumento del 6% y que todas las demas solo el 5%

account <-- AN, BN, balance*1.06 ( balance > 10000 (account


AN,BN, balance*1.05 ( balance <= 10000 (account

c .
 
 

 
 
¦ S=¦-(¦-S

¦ |X| S = L( c(¦XS

c c. 46 
 
No son parte del estándar del Algebra ¦elacional, pero al ser incluídos en los
lenguajes de consulta más populares se han introducido como una extensión.

c c 4


 



 '
1 2
3 4
1 2
1 2

 '
1 2
3 4

c c . 
 

 '
1 2
3 4
1 2
1 2

x SUM(B = 10
x AVG(A = 1.5
x MIN(A =1
x MAX(B =4
x COUNT(A =4

Es importante resaltar que estos operadores nunca devuelven un "valor" sino una
relación conteniendo el valor.

SUM(B
10

SUM(B (¦

c c 
  

 '
1 2
3 4
1 2
2 8
1 2
2 6

 738'9
1 6
3 4
2 14

A, SUM(B (¦

c c c. 
   

A4,A5 (¦

 738'9
1 6
2 14
3 4

A( A, SUM(B (¦

c !.   


c ! :  


     


   
#  # # # #
# #
 
    


 Brighto Brookly 7100 Pittsfiel
Adams Spring
Downt n n 000 d
A-101 500
own Downt Brookly 9000 Brookly
Brooks Senator
A-102 Perryri 400 own n 000 n
dge Horsen 4000 Curry North¦ye
Mianus
Brighto eck 00 Stamfor
A-201 900 Glenn Walnut
n North 3700 d
¦ye
A-215 Mianus 700 Town 000 Harriso
Hayes Main
Brighto Perryri Horsen 1700 n
A-217 750 dge eck 000
n Johnso Palo
Alma
¦edwo Bennin 3000 n Alto
A-222 700 Pownal
od gton 00
¦ound ¦edwo Palo 2100 customer
A-305 350 od Alto 000
Hill
¦ound Horsen 8000
account Hill eck 000

branch

 #   #   #  #   #


   
    
#  
Hayes A-102  Adams L-16
Johnson A-101 ¦oundH Curry L-93
L-11 900
Johnson A-201 ill Hayes L-15
Jones A-217 Downto Jackson L-14
L-14 1500
Lindsay A-222 wn Jones L-17
Smith A-215 Perryrid Smith L-11
L-15 1500
ge
Turner A-305 Smith L-23
Perryrid
L-16 1300 Williams L-17
ge
depositor Johnson null
Downto
L-17 1000
wn
borrower
¦edwoo
L-23 2000
d
L-93 Mianus 500
null null 1900

loan

x Encontrar branch-name, loan-number and amount para los préstamos


superiores a $1,200
{t|t loan ^ t [amount] > 1200 

x Encontrar el loan-number de cada préstamo cuyo monto sea mayor a


$1,200

{t| s loan ( t [loan-number] = s [loan-number] ^s [amount] >


1200 

x Encontrar los nombres de los clientes que tienen un préstamos de la


sucursal Perryridge

{t| s borrower (t [customer-name] = s [customer-name] ^

u loan ( u[loan-number] = s[loan-number] ^


u[branch-name]="Perryridge" 

x Encontrar todos los clientes que tienen un préstamo, cuenta, o ambos en el


banco.

{t| s borrower ( t [customer-name] = s [customer-name]

v u depositor ( t[customer-name] = u[customer-name] 

x Encontrar todos los clientes que tienen una cuenta en el banco pero no
tienen ningún préstamo.

{t| u depositor ( t[customer-name] = u [customer-name] ^

¬ s borrower ( t[customer-name] = s[customer-name] 

x También es posible usar el símbolo "para todo" junto con una


implicación P-->Q donde si P es verdadero, Q también deberá serlo.

Encontrar todos los clientes que tienen una cuenta en todas las sucursales
localizadas en Brooklyn

{t| r customer ( r[customer-name] = t [customer-name] ^


( u branch ( u[branch-city]= "Brooklyn" -->
s depositor ( t[customer-name] = u
[customer-name] ^

w account ( w[account-number] =
s[account-number] ^
w[branch-name] =
u[branch-name] 

x Expresiones inseguras

{t|¬(t loan 

c ! :  
 



     


   
#  # # # #
# #
 
    


 Brighto Brookly 7100 Pittsfiel
Adams Spring
Downt n n 000 d
A-101 500
own Downt Brookly 9000 Brookly
Brooks Senator
Perryri own n 000 n
A-102 400
dge Horsen 4000 Curry North ¦ye
Mianus
Brighto eck 00 Stamfor
A-201 900 Glenn Walnut
n North 3700 d
¦ye
A-215 Mianus 700 Town 000 Harriso
Hayes Main
Brighto Perryri Horsen 1700 n
A-217 750
n dge eck 000 Johnso Palo
Alma
¦edwo Bennin 3000 n Alto
A-222 700 Pownal
od gton 00
¦ound ¦edwo Palo 2100 customer
A-305 350
Hill od Alto 000
¦ound Horsen 8000
account Hill eck 000

branch

 #   #   #  #   #


   
    
#  

Hayes A-102 ¦oundH Adams L-16
L-11 900
Johnson A-101 ill Curry L-93
Johnson A-201 Downto Hayes L-15
L-14 1500
Jones A-217 wn Jackson L-14
Lindsay A-222 Perryrid Jones L-17
L-15 1500
Smith A-215 ge Smith L-11
Turner A-305 Perryrid Smith L-23
L-16 1300
ge Williams L-17
depositor Downto
L-17 1000 Johnson null
wn
¦edwoo borrower
L-23 2000
d
L-93 Mianus 500
null null 1900

loan

x Encontrar branch-name, loan-number and amount para los préstamos


superiores a $1,200

{ <l,b,a> | <l,b,a> loan ^ a > 1200 

x Encontrar el loan-number de cada préstamo cuyo monto sea mayor a


$1,200

{<l>| b,a ( <l,b,a> loan ^ a > 1200 

x Encontrar los nombres de los clientes que tienen un préstamo de la sucursal


Perryridge

{ <c,a> | l (<c,l> borrower

^ b (<l,b,a> loan ^ b="Perryridge" 

x Encontrar todos los clientes que tienen una cuenta en todas las sucursales
localizadas en Brooklyn.
{ <c> | n ( <c,n> customer ^
x,y,z ( <x,y,z> branch ^ y = "Brooklyn" -->

a,b ( <a,x,b> account ^ <c,a> depositor 

En este caso nuevamente aparece el "para todo" y el símbolo de implicación


P-->Q, indicando que si P es cierto Q también debe serlo.




Potrebbero piacerti anche