05 Algebra Relacional

54
1 Lenguajes de consulta Marta Zorrilla Universidad de Cantabria

Transcript of 05 Algebra Relacional

  • 1Lenguajes de consulta

    Marta ZorrillaUniversidad de Cantabria

  • 2Lenguajes de consulta Lenguaje con el cual el usuario consulta

    informacin a la BD. Clasificacin

    Procedimentales el usuario indica las operaciones para obtener el resultado

    No procedimentales el usuario describe la informacin deseada sin establecer ningn procedimiento concreto

    Lenguajes puros : base del SQL lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Dominios

  • 3Clculo relacional

    Mientras que en un lenguaje algebraico hay que especificar los operadores que se tienen que aplicar a las relaciones para obtener el resultado, en el clculo relacional (CR) slo es preciso indicar cul es el resultado que se quiere obtener.

    Los lenguajes de clculo relacional pueden ser de dos tipos: orientados a tuplas, en los que una variable se interpreta como

    si representase las tuplas de una relacin. orientados a dominios, en los que una variable se interpreta

    como si representase los valores de un dominio.

    {t | t prestamo t [importe] > 1200}

  • 4lgebra Relacional Lenguaje procedural introducido por Codd 1974 Operaciones fundamentales:

    Seleccin (select) Proyeccin (project) Unin (union) Diferencia de conjuntos (set difference) Producto cartesiano (Cartesian product) x Renombramiento (rename)

    Las operaciones toman una o dos relaciones como entrada y generan una nueva relacin como resultado.

  • 5Ejemplo banco

    numero_cuenta, nombre_sucursalsaldo

    cuenta

    nombre_cliente, numero_cuenta

    impositor

    nombre_cliente, numero_prestamo

    prestatario

    nombre_sucursal, ciudad_sucursalactivos

    sucursal

    nombre_clientecalle_clienteciudad_cliente

    cliente

    numero_prestamonombre_sucursalimporte

    prestamo

  • 6Ejemplo: SelectRelacin r A B C D

    1

    5

    12

    23

    7

    7

    3

    10

    A=B ^ D > 5 (r) A B C D

    1

    23

    7

    10

  • 7Operacin Select Notacin: p(r)

    Seleccin de las tuplas t de la relacin r que satisfacen el predicado p

    Se define : p(r) = {t | t r and p(t)}donde p es una frmula en clculo proposicionalque consta de trminos conectados por: (and), (or), (not) y cada trmino sigue la expresin:

    op { | }donde op es: =, , >, ,

  • 8Ejemplo: Project

    Relacin r:A B C

    10

    20

    30

    40

    1

    1

    1

    2

    A C

    1

    1

    1

    2

    =>

    A C

    1

    1

    2

    A,C (r)

  • 9Operacin Project Notacin: A1, A2, , Ak (r)

    donde A1, A2 son atributos y r es la relacin.

    El resultado se define como la relacin de k columnas obtenidas despus de quitar de la relacin las columnas que no estn en la lista.

    Las filas duplicadas se eliminan del resultado, desde que las relaciones son conjuntos (set)

    E.j. obtener el n de cuenta y el saldo sin indicar la sucursal a la que est asociada la cuenta

    numero_cuenta, saldo (cuenta)

  • 10

    Ejemplo: Union

    Relaciones r, s:

    r s:

    A B

    1

    2

    1

    A B

    2

    3

    rs

    A B

    1

    2

    1

    3

  • 11

    Operacin Union Notacin: r s Se define: r s = { t | t r o t s}Para que r s sea vlido (compatible).

    1. r, s deben tener el mismo n de atributos2. El dominio de los atributos debe ser compatible

    E.j. encontrar todos los clientes que tienen una cuenta o prstamo en el banco

    nombre_cliente (impositor) nombre_cliente (prestatario)

  • 12

    Ejemplo: Set Difference

    Relaciones r, s:

    r s:

    A B

    1

    2

    1

    A B

    2

    3

    rs

    A B

    1

    1

  • 13

    Operacin Set Difference Notacin: r s

    Se define: r s = { t | t r y t s}

    Se debe establecer entre relaciones compatibles. r y s deben tener la misma aridad El dominio de los atributos debe ser compatible

    E.j. encontrar todos los clientes que tienen una cuenta y no tienen prstamo en el banco

    nombre_cliente (impositor) - nombre_cliente (prestatario)

  • 14

    Ejemplo: Cartesian-Product

    Relaciones r, s:

    r x s:

    A B

    1

    2

    A B

    11112222

    C D

    1019201010102010

    E

    aabbaabb

    C D

    10102010

    E

    aabbr

    s

  • 15

    Operacin Cartesian-Product Notacin r x s Se define:

    r x s = {t q | t r y q s}

    Se asume que los atributos de r(R) y s(S) son disjuntos. (Esto es, R S = ).

    Si no fueran disjuntos, se debe utilizar el operador renombrar ().

  • 16

    Composicin de operaciones Se pueden construir expresiones utilizando varias

    operaciones Por ejemplo: A=C(r x s)

    r x sA B

    11112222

    C D

    1019201010102010

    E

    aabbaabb A B C D E

    122

    102020

    aab

    A=C(r x s)

  • 17

    Operacin Rename Permite renombrar y referirse a resultados de expresiones

    del lgebra relacional (alias). Permite referirse a una relacin por ms de un nombre.

    Ejemplo: x (E) devuelve la expresin E bajo el nombre X. Si una expresin relacional E tiene aridad n, entoncesx (A1, A2, , An) (E) devuelve el resultado de la expresin E

    bajo el nombre X, y con los atributos renombrados a A1, A2, ., An.

  • 18

    Ejemplos Encontrar los prstamos > 1200

    importe > 1200 (prestamo)

    Encontrar el nmero de prstamo de aquellos cuyo importe es mayor que 1200

    numero_prestamo (importe > 1200 (prestamo))

    numero_prestamonombre_sucursalimporte

    prestamo

  • 19

    Ejemplos Encontrar los nombres de todos los clientes que

    tienen un prstamo, una cuenta o ambas en el banco

    nombre_cliente (prestatario) nombre_cliente (impositor)

    Encontrar los nombre de todos los clientes que tienen un prstamo y una cuenta en el banco.

    nombre_cliente (prestatario) nombre_cliente (impositor)

    nombre_cliente, numero_cuenta

    impositornombre_cliente, numero_prestamo

    prestatario

  • 20

    Ejemplos Encontrar los clientes que tienen un prstamo en la

    sucursal Santander.

    nombre_cliente(nombre_sucursal = Santander(prestatario.numero_prestamo = prestamo.numero_prestamo(prestatario x prestamo)))

    nombre_cliente(prestamo.numero_prestamo = prestatario.numero_prestamo( (nombre_sucursal = Santander(prestamo)) x prestatario) )

    numero_prestamonombre_sucursalimporte

    prestamonombre_cliente, numero_prestamo

    prestatario

  • 21

    Ejemplos Encontrar los nombres de los clientes que tengan un prstamo

    en la sucursal Santander pero no tienen cuenta en ninguna sucursal del banco.

    nombre_cliente (nombre_sucursal=Santander(prestatario.numero_prestamo= prestamo.numero_prestamo

    (prestatario x prestamo))) nombre_cliente(impositor)

  • 22

    Ejemplos Buscar el saldo mximo de las cuentas del banco. Se

    requiere renombrar cuenta

    saldo(cuenta) - cuenta.saldo(cuenta.saldo < d.saldo (cuenta x d (cuenta)))

    numero_cuenta, nombre_sucursalsaldo

    cuenta

  • 23

    Definicin Formal Una expresin bsica del lgebra relacional se compone de:

    Una relacin de la BD o Una relacin constante ( ({C, centro, 2) ( B, bajo, 3)})

    Si E1 y E2 son expresiones de lgebra relacional; las siguientes expresiones tambin lo son: E1 E2 E1 - E2 E1 x E2 p (E1), donde P es un predicado de atributos de E1 s(E1), donde S es una lista que se compone de algunos de los

    atributos de E1 x (E1), donde x es el nuevo nombre del resultado de E1

  • 24

    Otras operaciones

    Son operaciones que no aaden potencia al lgebra pero que simplifican las consultas habituales. Interseccin de conjuntos (Set intersection) Reunin natural (Natural join) Divisin (Division) Asignacin (Assignment)

  • 25

    Ejemplo: Set-Intersection

    Relaciones r, s:

    r s

    A B

    121

    A B

    23

    r s

    A B

    2

  • 26

    Operacin Set-Intersection

    Notacin: r s Se define:

    r s ={ t | t r y t s } Se asume que:

    r, s tienen la misma aridad Y los atributos son compatibles

    Nota: r s = r - (r - s)

  • 27

    Ejemplo: Natural Join Relaciones r, s:

    A B

    12412

    C D

    aabab

    B

    13123

    D

    aaabb

    E

    r

    A B

    11112

    C D

    aaaab

    E

    s

    r s r.A, r.B, r.C, r.D, s.E (r.B = s.B ^ r.D = s.D (r x s))

  • 28

    Operacin Natural-Join Notacin: r s

    Sean r y s dos tuplas de los esquemas R y Srespectivamente. El resultado de la reunin natural es una relacin que se obtiene por considerar cada pareja de tuplas tr de r y ts de s.

    Si tr y ts tienen los mismos valores en cada uno de los atributos R S, una tupla t se aade al resultado, donde t tiene el mismo valor que tr en r t tiene el mismo valor que ts en s

  • 29

    Ejemplo: DivisionRelaciones r, s:

    r s:

    A

    B

    1

    2

    A B

    12311134612

    r

    s

  • 30

    Otro ejemplo DivisionA B

    aaaaaaaa

    C D

    aabababb

    E

    11113111

    Relaciones r, s:

    r s:

    D

    ab

    E

    11

    A B

    aa

    C

    r

    s

  • 31

    Operacin Division

    Adecuada para las consultas que incluyen la expresin para todos.

    Sean r y s relaciones de los esquemas R y S respectivamente donde R = (A1, , Am, B1, , Bn) S = (B1, , Bn)El resultado de r s es una relacin en el esquemaR S = (A1, , Am)

    r s = { t | t R-S(r) u s ( tu r ) }

    r s

  • 32

    Operacin Division (Cont.) Propiedad

    Sea q = r s Entonces q es una relacin que satisface q x s r

    Definido en trminos del lgebra relacional. Sean r(R)y s(S) relaciones, y S Rr s = R-S (r) R-S ( (R-S (r) x s) R-S,S(r))en donde, R-S,S(r) simplemente reordena atributos de r

    R-S(R-S (r) x s) R-S,S(r)) devuelve las tuplas t en R-S (r) tales que para alguna tupla u s, tu r.

  • 33

    Operacin Asignacin La asignacin () es til para expresar consultas

    complejas. Se realiza sobre una variable de relacin temporal. Ejemplo: escribir r s como

    temp1 R-S (r)temp2 R-S ((temp1 x s) R-S,S (r))result = temp1 temp2

    El resultado a la derecha de se asigna a la variable de la izquierda

    Esta variable puede utilizarse en expresiones posteriores

  • 34

    Ejemplos Encontrar todos los clientes que tienen una cuenta en

    las sucursales de Santander y Bezana.NC(NS=Santander(impositor cuenta))

    NC(NS=Bezana(impositor cuenta))donde NC es nombre_cliente and NS nombre_sucursal.

    nombre_cliente, nombre_sucursal(impositor cuenta) temp(nombre_sucursal) ({(Santander), (Bezana)})

    numero_cuenta, nombre_sucursalsaldo

    cuenta

    nombre_cliente, numero_cuenta

    impositor

  • 35

    Localizar los clientes que tienen una cuenta en todas las oficinas de Madrid.

    nombre_cliente, nombre_sucursal(impositor cuenta) nombre_sucursal (ciudad_sucursal = Madrid (sucursal))

    Ejemplo numero_cuenta, nombre_sucursalsaldo

    cuenta

    nombre_cliente, numero_cuenta

    impositor

  • 36

    lgebra relacional extendida

    Proyeccin generalizada GeneralizedProjection

    Reunin externa Outer Join Funciones de agregacin Aggregate

    Functions

  • 37

    Operacin Generalized Projection Extiende la proyeccin permitiendo que se utilicen funciones

    aritmticas en la lista de proyeccin. F1, F2, , Fn(E)

    E es una expresin del lgebra relacional F1, F2, , Fn son expresiones aritmticas que incluyen

    constantes y atributos del esquema

    P.ej. En la relacininformacion_credito(nombre_cliente, limite, saldo_credito)

    determinar cunto es el importe disponible por cada personanombre_cliente, limite-saldo_credito (informacion_credito)

  • 38

    Operaciones y funciones agregadas Funcin agregada toman un cjto de valores y devuelven

    como resultado un nico valor.avg: valor promediomin: valor mnimomax: valor mximosum: suma de valorescount: nmero de valores

    Operacin agregada en lgebra relacional

    G1, G2, , Gn gggg F1( A1), F2( A2),, Fn( An) (E) E es una expresin del lgebra relacional G1, G2 , Gn lista de atributos bajo la cual se agrupa Cada Fi es una funcin agregada Cada Ai es un atributo

  • 39

    Ejemplo: Aggregate Operation

    Relacin r: A B

    C

    77310

    g sum(c) (r)sum-C

    27

  • 40

    Ejemplo: Aggregate OperationRelacin cuenta agrupada por nombre_sucursal:

    nombre_sucursal g sum(saldo) (cuenta)

    Nombre_sucursal Numero_cuenta saldoPerryridgePerryridgeBrightonBrightonRedwood

    A-102A-201A-217A-215A-222

    400900750750700

    Nombre_sucursal saldoPerryridgeBrightonRedwood

    13001500700

  • 41

    Aggregate Functions (Cont.) El resultado de una agregacin no tiene

    nombre Se puede utilizar la operacin renombrar En el ejemplo se renombra como parte de la

    operacin de agregacin

    Nombre_sucursal g sum(saldo) as suma_saldos (cuenta)

  • 42

    Relacin externa: Outer Join

    Es una ampliacin de la operacin reunin para trabajar con informacin ausente.

    Computa el join y luego aade las tuplas de cada relacin que no casan con las de la otra, rellenando el resultado con valores nulos.

    Uso del valor nulo: null significa que el valor es desconocido o no existe

  • 43

    Ejemplo: Outer Join Relacin prstamo

    Numero_prestamo importeL-170L-230L-260

    300040001700

    Relacin prestatarioNombre_cliente Numero_prestamoJonesSmithHayes

    L-170L-230L-155

    Nombre_sucursalDowntownRedwoodPerryridge

  • 44

    Ejemplo : Outer Join Inner Join

    prestamo prestatario

    prestamo prestatario Left Outer Join

    Numero_prestamor imorteL-170L-230

    30004000

    Nombre_clienteJonesSmith

    Nombre_sucursalDowntownRedwood

    Numero_prestamo importeL-170L-230L-260

    300040001700

    Nombre_clienteJonesSmithnull

    Nombre_sucursalDowntownRedwoodPerryridge

  • 45

    Ejemplo: Outer Join (Cont.) Right Outer Join

    prestamo prestatarioNumero_prestamo importeL-170L-230L-155

    30004000null

    Nombre_clienteJonesSmithHayes

    Numero_prestamo importeL-170L-230L-260L-155

    300040001700null

    Nombre_clienteJonesSmithnullHayes

    prestamo prestatario Full Outer Join

    Nombre_sucursalDowntownRedwoodnull

    Nombre_sucursalDowntownRedwoodPerryridgenull

  • 46

    Valores nulos

    Las tuplas pueden tener valores nulos (null) en algunos de sus atributos

    null significa desconocido o no existe El resultado de una operacin aritmtica con valor

    null es null Las funciones agregadas ignoran los valores

    nulos Para eliminar duplicados y agrupar, el valor nulo

    se trata como cualquier otro valor Dos valores nulos se asumen iguales

  • 47

    Valores nulos (cont.) Comparaciones con valores nulos devuelven el valor

    desconocido

    Tabla de verdad: OR: (unknown or true) = true,

    (unknown or false) = unknown(unknown or unknown) = unknown

    AND: (true and unknown) = unknown, (false and unknown) = false,(unknown and unknown) = unknown

    NOT: (not unknown) = unknown

    Select: si el predicado devuelve true, se aade al resultado; en caso contrario, no.

  • 48

    Modificacin de datos

    Operaciones: Borrado Deletion Insercin Insertion Actualizacin Updating

    Todas las operaciones se expresan utilizando el operador asignacin.

  • 49

    Borrado

    Una peticin de borrado se expresa de forma similar a una consulta, pero en vez de mostrarlas, las elimina de la BD

    Borra tuplas completas, no atributos Se expresa:

    r r Edonde r es una relacin y E es una consulta del lgebra relacional.

  • 50

    Ejemplos Borrar todas las cuentas de la sucursal Santander.

    cuenta cuenta nombre_sucursal = Santander (cuenta) Borrar todos los prstamos con importe entre 0 y 50prestamo prestamo importe 0 ^importe 50 (prestamo) Borrar todas las cuentas de las sucursales de Madrid.

    r1 ciudad_sucursal = Madrid (cuenta sucursal)r2 nombre_sucursal, numero_cuenta, saldo (r1)r3 nombre_sucursal, numero_cuenta(r2 impositor)impositor impositor r3cuenta cuenta r2

    numero_cuenta, nombre_sucursalsaldo

    cuenta

    nombre_cliente, numero_cuenta

    impositornombre_sucursal, ciudad_sucursalactivos

    sucursal

  • 51

    Insertar Para insertar o:

    Especificamos la tupla que se va a insertar O escribimos una consulta cuyo resultado sea el

    conjunto de tuplas que se van a insertar Se expresa:

    r r Edonde r es una relacin y E es una expresin del lgebra relacional

    La insercin de una sla tupla se expresa haciendo que E sea una relacin constante que contiene una tupla.

  • 52

    Ejemplos Insertar: Smith tiene 1200 en la cuenta A-973 de la

    sucursal de Santander.cuenta cuenta {(Santander, A-973, 1200)}impositor impositor {(Smith, A-973)}

    Se desea ofrecer una nueva cuenta de ahorro con 200como regalo a todos los clientes con prstamos concedidos a la sucursal de Santander (se usa el n de prstamo como n de esta cuenta de ahorro).r1 (nombre_sucursal = Santander (prestatario prestamo))cuenta cuenta nombre_sucursal, numero_cuenta,200 (r1)impositor impositor nombre_cliente, numero_prestamo(r1)

  • 53

    Actualizar Cambia un valor de la tupla sin afectar al resto Se expresa

    r F1, F2, , Fn, (r)

    donde cada Fi es el i-th atributo de r en el caso de que este atributo no se vaya a actualizar o, en caso contrario, una expresin solo con constantes y atributos de r que proporciona el nuevo valor del atributo.

  • 54

    Ejemplos Aplicar un inters del 5% a las cuentas

    cuenta c, s, sal * 1.05 (cuenta)donde C, S y SAL son n de cuenta, nombre de sucursal y saldo.

    Ahora para las cuentas con saldo >10,000 es el 6% y al resto el 5%.cuenta C, S, SAL * 1.06 ( SAL > 10000 (cuenta))

    C, S, SAL * 1.05 (SAL 10000 (cuenta))