Post on 16-Oct-2015
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))