You are on page 1of 54

1

Lenguajes de consulta
Marta Zorrilla
Universidad de Cantabria
2
Lenguajes 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
3
Clculo 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}
4
lgebra 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.
5
Ejemplo banco
numero_cuenta,
nombre_sucursal
saldo
cuenta
nombre_cliente,
numero_cuenta
impositor
nombre_cliente,
numero_prestamo
prestatario
nombre_sucursal,
ciudad_sucursal
activos
sucursal
nombre_cliente
calle_cliente
ciudad_cliente
cliente
numero_prestamo
nombre_sucursal
importe
prestamo
6
Ejemplo: Select
Relacin 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
7
Operacin 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 proposicional
que consta de trminos conectados por: (and),
(or), (not) y cada trmino sigue la expresin:
<attribute> op {<attribute> | <constant>}
donde op es: =, , >, , <,
Ejemplo:
nombre_sucursal=Santander

(cuenta)
8
Ejemplo: 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)
9
Operacin Project
Notacin:
A1, A2, , Ak
(r)
donde A
1
, A
2
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
r
s
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 atributos
2. 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
r
s
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

1
1
1
1
2
2
2
2
C D

10
19
20
10
10
10
20
10
E
a
a
b
b
a
a
b
b
C D

10
10
20
10
E
a
a
b
b
r
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 s
A B

1
1
1
1
2
2
2
2
C D

10
19
20
10
10
10
20
10
E
a
a
b
b
a
a
b
b
A B C D E

1
2
2

10
20
20
a
a
b

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, entonces

x
(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_prestamo
nombre_sucursal
importe
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
impositor
nombre_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_prestamo
nombre_sucursal
importe
prestamo
nombre_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_sucursal
saldo
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 E
1
y E
2
son expresiones de lgebra relacional; las
siguientes expresiones tambin lo son:
E
1
E
2
E
1
- E
2
E
1
x E
2

p
(E
1
), donde P es un predicado de atributos de E
1

s
(E
1
), donde S es una lista que se compone de algunos de los
atributos de E
1

x
(E
1
), donde x es el nuevo nombre del resultado de E
1
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

1
2
1
A B

2
3
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

1
2
4
1
2
C D

a
a
b
a
b
B
1
3
1
2
3
D
a
a
a
b
b
E

r
A B

1
1
1
1
2
C D

a
a
a
a
b
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 S
respectivamente. El resultado de la reunin natural
es una relacin que se obtiene por considerar
cada pareja de tuplas t
r
de r y t
s
de s.
Si t
r
y t
s
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 t
r
en r
t tiene el mismo valor que t
s
en s
29
Ejemplo: Division
Relaciones r, s:
r s:
A
B

1
2
A B

1
2
3
1
1
1
3
4
6
1
2
r
s
30
Otro ejemplo Division
A B

a
a
a
a
a
a
a
a
C D

a
a
b
a
b
a
b
b
E
1
1
1
1
3
1
1
1
Relaciones r, s:
r s:
D
a
b
E
1
1
A B

a
a
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 = (A
1
, , A
m
, B
1
, , B
n
)
S = (B
1
, , B
n
)
El resultado de r s es una relacin en el esquema
R S = (A
1
, , A
m
)
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 R
r 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_sucursal
saldo
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_sucursal
saldo
cuenta
nombre_cliente,
numero_cuenta
impositor
36
lgebra relacional extendida
Proyeccin generalizada Generalized
Projection
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
F
1
, F
2
, , F
n
son expresiones aritmticas que incluyen
constantes y atributos del esquema
P.ej. En la relacin
informacion_credito(nombre_cliente, limite, saldo_credito)
determinar cunto es el importe disponible por cada persona

nombre_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 promedio
min: valor mnimo
max: valor mximo
sum: suma de valores
count: nmero de valores
Operacin agregada en lgebra relacional
G1, G2, , Gn
g gg g
F1( A1), F2( A2),, Fn( An)
(E)
E es una expresin del lgebra relacional
G
1
, G
2
, G
n
lista de atributos bajo la cual se agrupa
Cada F
i
es una funcin agregada
Cada A
i
es un atributo
39
Ejemplo: Aggregate Operation
Relacin r:
A B

C
7
7
3
10
g
sum(c)
(r)
sum-C
27
40
Ejemplo: Aggregate Operation
Relacin cuenta agrupada por nombre_sucursal:
nombre_sucursal
g
sum(saldo)
(cuenta)
Nombre_sucursal Numero_cuenta saldo
Perryridge
Perryridge
Brighton
Brighton
Redwood
A-102
A-201
A-217
A-215
A-222
400
900
750
750
700
Nombre_sucursal saldo
Perryridge
Brighton
Redwood
1300
1500
700
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 importe
L-170
L-230
L-260
3000
4000
1700
Relacin prestatario
Nombre_cliente Numero_prestamo
Jones
Smith
Hayes
L-170
L-230
L-155
Nombre_sucursal
Downtown
Redwood
Perryridge
44
Ejemplo : Outer Join
Inner Join
prestamo prestatario
prestamo prestatario
Left Outer Join
Numero_prestamor imorte
L-170
L-230
3000
4000
Nombre_cliente
Jones
Smith
Nombre_sucursal
Downtown
Redwood
Numero_prestamo importe
L-170
L-230
L-260
3000
4000
1700
Nombre_cliente
Jones
Smith
null
Nombre_sucursal
Downtown
Redwood
Perryridge
45
Ejemplo: Outer Join (Cont.)
Right Outer Join
prestamo prestatario
Numero_prestamo importe
L-170
L-230
L-155
3000
4000
null
Nombre_cliente
Jones
Smith
Hayes
Numero_prestamo importe
L-170
L-230
L-260
L-155
3000
4000
1700
null
Nombre_cliente
Jones
Smith
null
Hayes
prestamo prestatario
Full Outer Join
Nombre_sucursal
Downtown
Redwood
null
Nombre_sucursal
Downtown
Redwood
Perryridge
null
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 E
donde 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 50
prestamo prestamo
importe 0 ^importe 50
(prestamo)
Borrar todas las cuentas de las sucursales de Madrid.
r
1


ciudad_sucursal = Madrid
(cuenta sucursal)
r
2

nombre_sucursal, numero_cuenta, saldo
(r
1
)
r
3

nombre_sucursal, numero_cuenta
(r
2
impositor)
impositor impositor r
3
cuenta cuenta r
2
numero_cuenta,
nombre_sucursal
saldo
cuenta
nombre_cliente,
numero_cuenta
impositor
nombre_sucursal,
ciudad_sucursal
activos
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 E
donde 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 200
como 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).
r
1
(
nombre_sucursal = Santander
(prestatario prestamo))
cuenta cuenta
nombre_sucursal, numero_cuenta,200
(r
1
)
impositor impositor
nombre_cliente, numero_prestamo
(r
1
)
53
Actualizar
Cambia un valor de la tupla sin afectar al resto
Se expresa
r
F1, F2, , Fn,
(r)
donde cada F
i
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))

You might also like