Está en la página 1de 59

Lenguajes de

Manipulacin de Datos
Profesor:
MS Luis Serna Jherry
Lenguajes de Manipulacin de
Datos
Son lenguajes que el usuario utiliza para
consultar y modificar la base de datos.
Procedimentales:
Se instruye al sistema para llevar a cabo una
serie de operaciones en la BD para calcular el
resultado (lgebra Relacional)
No Procedimentales:
Se describe la informacin deseada sin
establecer el procedimiento para obtenerla
(Clculo Relacional)
Lenguajes de Manipulacin de
Datos Evolucin histrica
Junio 1970 E. Codd A relational Model of
data for large shared databanks
1974 SEQUEL (laboratorios de IBM)
1976 SQL (SEQUEL 2)
Dcada del 80 Se comercializan productos
basados en SQL
SQL/86, SQL/89, SQL/92 Estndares ANSI
SQL/99 para soporte de datos de naturaleza
compleja
lgebra Relacional
Es un lenguaje de procedimientos de alto
nivel que permite, mediante el uso de ciertos
operadores, derivar las tablas deseadas desde
las tablas base del modelo relacional.

Consta de un conjunto de operadores que
toman como entrada una o dos relaciones y
producen como resultado una nueva relacin.

lgebra Relacional
Operaciones fundamentales:
Seleccin, Proyeccin, Unin, Diferencia,
Producto Cartesiano y Renombramiento

Otras operaciones, que pueden definirse en
trminos de las operaciones fundamentales:
Interseccin, Reunin natural (JOIN) y
Divisin
El Algebra Relacional en el DBMS
analizador
SQL
Expresin
en lgebra
relacional
Expresin
optimizada
en lgebra
relacional
Optimizador de
Consultas
Generador
de cdigo
Plan de
ejecucin
Cdigo
ejecutable
DBMS
Extrae tuplas de una
relacin dada que
satisfacen una
condicin especfica.
Smbolo: o (sigma)
Trmino Comn: (WHERE)
Operadores Relacionales
SELECCIN
Notacin: o
condicin
(Relacin)
Operadores Relacionales
SELECCIN
Prestamo
N_Sucursal #Prestamo $Importe
Miraflores P-17
200,000
La Aurora P-23 400,000
Lima Cercado P-15
300,000
Chacarilla P-14
300,000
Primavera P-93 100,000
Surquillo P-11 180,000
La Molina P-16 260,000
o
N Sucursal = <Miraflores>
(Prestamo)
N_Sucursal #Prestamo $Importe
Miraflores P-17 200,000
Extrae atributos
especficos de una
relacin dada
Smbolo: H
Trmino Comn: PROJECT
Operadores Relacionales
PROYECCIN
Notacin: H
atributo 1, atributo 2, ... Atributo n
(Relacin)
Operadores Relacionales
PROYECCIN
H
# Prstamo, $ Importe
(Prstamo)
#Prestamo $Importe
P-17 200,000
P-23 400,000
P-15 300,000
P-14 300,000
P-93 100,000
P-11 180,000
P-16 260,000
Ejemplo: Mostrar los atributos #prstamo e $Importe de la relacin
Prstamo.
Prestamo
N_Sucursal #Prestamo $Importe
Miraflores P-17
200,000
La Aurora P-23 400,000
Lima Cercado P-15
300,000
Chacarilla P-14
300,000
Primavera P-93 100,000
Surquillo P-11 180,000
La Molina P-16 260,000
Operadores Relacionales
Composicin de Operaciones Relacionales
El resultado de una operacin relacional es
una relacin
Las operaciones relacionales se pueden
componer para formar una expresin del
lgebra relacional (igual que las
expresiones aritmticas)
Operadores Relacionales
Composicin de Operaciones Relacionales
Mostrar el atributo #Prestamo de aquellas sucursales
cuyo nombre es Miraflores de la relacin Prstamo.
H
#Prestamo
(o
N_Sucursal = Miraflores
(Prestamo))
#Prestamo
P-17
Prestamo
N_Sucursal #Prestamo $Importe
Miraflores P-17
200,000
La Aurora P-23 400,000
Lima Cercado P-15
300,000
Chacarilla P-14
300,000
Primavera P-93 100,000
Surquillo P-11 180,000
La Molina P-16 260,000
SELECT #Prestamo FROM Prestamo WHERE N_Sucursal LIKE Miraflores;
EJEMPLO:
Construye una relacin
formada por todas las
tuplas que aparecen en
cualquiera de dos
relaciones especificas,
eliminndose las
duplicadas
Smbolo:
Trmino Comn: UNION
Operadores Relacionales
UNIN
Notacin: R1 R2
Las relaciones deben ser Compatibles: la misma cantidad
de atributos, y los atributos correspondientes deben provenir
del mismo dominio
Operadores Relacionales (UNION)
Se desea averiguar todos los clientes que tienen una
cuenta, un prstamo o ambos:
N_Cliente
Gonzlez
Santos
Rodrguez
Lpez
Abril
Soto
Prez
Gmez
Fernndez
Titular_cuenta
N_Cliente #Cuenta
Santos
C-101
Gmez
C-215
Lpez
C-102
Abril C-305
Gonzlez C-201
Santos C-217
Rodrguez C-222
Prestatario
N_Cliente #Prestamo
Santos P-17
Gmez P-23
Lpez P-15
Soto P-14
Prez P-93
Gmez P-11
Fernndez P-16
H
N_Cliente
(Titular_cuenta) H
N_Cliente
(Prestatario)
SELECT N_Cliente FROM Titular_Cuenta UNION SELECT N_Cliente FROM Prestatario;
EJEMPLO:
Operadores Relacionales (UNION)
1. Se desea averiguar todas las ciudad que tienen un
componente, un articulo o ambos:
H
ciudad
(articulos) H
ciudad
(componentes)
SELECT ciudad FROM articulos UNION SELECT ciudad FROM componentes;
EJEMPLO:
Operadores Relacionales (UNION)
2. Se desea averiguar todas las ciudades que tengan un
componente y un articulo en la misma ciudad:
H
articulos.ciudad
(o
articulos.ciudad = componentes.ciudad
(articulos,
componentes)) H
componentes.ciudad
(o
componentes.ciudad = articulos.ciudad

(componentes, articulos))
SELECT articulos.ciudad FROM articulos, componentes WHERE articulos.ciudad
LIKE componentes.ciudad UNION SELECT componentes.ciudad FROM
componentes, articulos WHERE articulos.ciudad LIKE componentes.ciudad;
EJEMPLO:
SELECT articulos.ciudad FROM articulos,
componentes WHERE articulos.ciudad
LIKE componentes.ciudad UNION
SELECT componentes.ciudad FROM
componentes, articulos WHERE
articulos.ciudad LIKE componentes.ciudad;
H
articulos.ciudad
(o
articulos.ciudad = componentes.ciudad
(articulos, componentes))
H
componentes.ciudad
(o
componentes.ciudad = articulos.ciudad
(componentes, articulos))
Operadores Relacionales (UNION)
3. Se desea averiguar el nombre de los proveedores que
surten artculos o componentes en la ciudad de Comitn.
EJEMPLO:
Operadores Relacionales (UNION)
3. Se desea averiguar el nombre de los proveedores que
surten artculos o componentes en la ciudad de Comitn.
EJEMPLO:
H
proveedores.nombre
(o
envios.numcompo = componentes.numcompo

and

envios.numartic =
articulos.numartic and componentes.ciudad = comitan or articulos.ciudad = comitan
(proveedores,
articulos, componentes)) H
provedores.pnombre
(o
componentes.numcompo =
envios.numcompo

and

envios.numartic = articulos.numartic and componentes.ciudad = comitan or
articulos.ciudad = comitan
(provedores, componentes, articulos)
SELECT provedores.pnombre FROM proveedores, articulos, componentes WHERE envios.numcompo =
componentes.numcompo and envios.numartic = articulos.numartic and articulos.ciudad LIKE comitan and
componentes.ciudad LIKE comitan UNION SELECT proveedores.pnombre FROM proveedores,
componentes, articulos WHERE envios.numcompo = componentes.numcompo and envios.numartic =
articulos.numartic and articulos.ciudad LIKE comitan and componentes.ciudad LIKE comitan;
Dadas dos relaciones
especficas, construye una
tercera relacin formada
por todas las tuplas de la
primera relacin que no
aparecen en la segunda.
Smbolo:
Trmino Comn: MINUS
Operadores Relacionales
DIFERENCIA
Notacin: R1 R2
Las relaciones deben ser Compatibles
R1
R2
Operadores Relacionales
DIFERENCIA
Se desea averiguar todos los clientes que tienen abierta una
cuenta, pero que no tienen concedido ningn prstamo:
N_Cliente
Gonzlez
Rodrguez
Abril
Titular_cuenta
N_Cliente #Cuenta
Santos
C-101
Gmez
C-215
Lpez
C-102
Abril C-305
Gonzlez C-201
Santos C-217
Rodrguez C-222
Prestatario
N_Cliente #Prestamo
Santos P-17
Gmez P-23
Lpez P-15
Soto P-14
Prez P-93
Gmez P-11
Fernndez P-16
SELECT N_Cliente FROM Titular_Cuenta UNION SELECT N_Cliente FROM Prestatario;
H
N Cliente
(Titular_cuenta) H
N Cliente
(Prestatario)
Dadas dos relaciones
especficas, construye
una tercera relacin
que contiene todas las
combinaciones posibles
de tuplas, una de cada
una de las relaciones.
A
a
1
a
1
a
2
a
2
a
3

a
3
R
3

b
1
b
2
b
1
b
2
b
1
b
2
B
R
2

X
A
B
a
1
a
2
a
3

b
1
b
2
R
1

Smbolo: X
Trmino Comn: TIMES
Operadores Relacionales
PRODUCTO CARTESIANO
Los resultados de las expresiones de lgebra
relacional no tienen nombre, a pesar de ser relaciones.
Dada una expresin E, la expresin

x
(E)
devuelve el resultado de la expresin E con el
nombre X
Smbolo: (ro)
Trmino Comn: RENAME
Operadores Relacionales
RENOMBRAMIENTO

Tambin es til para renombrar los atributos de una
relacin:
La expresin

X (A1, A2, ..., An)
(E)

devuelve el resultado de la expresin E con el
nombre X y con los atributos con el nombre
cambiado a A1, A2, ...., An
Operadores Relacionales
RENOMBRAMIENTO
Operadores Relacionales
RENOMBRAMIENTO - Ejemplo
Buscar el mximo saldo de la cuenta de un banco
Calcular primero una relacin intermedia con los
saldos que no son el mximo.
Realizar la diferencia entre H
saldo
(Cuenta) y la
relacin intermedia calculada.
Cuenta
Sucursal cuenta saldo
Miraflores C-101 100,000
La Aurora C-215 140,000
Lima Cercado C-102 80,000
Calcular una relacin intermedia con los saldos que
no son el mximo:
Calcular el producto cartesiano Cuenta x Cuenta
Formar una seleccin sobre el resultado,
comparando los valores de los saldos que aparecen
en una tupla

H
cuenta.saldo
(o
cuenta.saldo < d.saldo
(Cuenta x
d
(Cuenta) )
Operadores Relacionales
RENOMBRAMIENTO - Ejemplo
select * from articulos, componentes;
Cuenta x
d
(Cuenta)
Renombramiento - Ejemplo
Miraflores C101 100,000 Miraflores C101 100,000
Miraflores C101 100,000 La Aurora C215 140,000
Miraflores C101 100,000 Lima Cercado C102 80,000
La Aurora C215 140,000 Miraflores C101 100,000
La Aurora C215 140,000 La Aurora C215 140,000
La Aurora C215 140,000 Lima Cercado C102 80,000
Lima Cercado C102 80,000 Miraflores C101 100,000
Lima Cercado C102 80,000 La Aurora C215 140,000
Lima Cercado C102 80,000 Lima Cercado C102 80,000
Cuenta. Cuenta. Cuenta. d. d. d.
Sucursal cuenta saldo sucursal cuenta saldo
Seleccion - Ejemplo
o
cuenta.saldo < d.saldo
(Cuenta x
d
(Cuenta)
Miraflores C101 100,000 La Aurora C215 140,000
Lima Cercado C102 80,000 Miraflores C101 100,000
Lima Cercado C102 80,000 La Aurora C215 140,000
Cuenta. Cuenta. Cuenta. d. sucursal d. cuenta d. saldo
Sucursal cuenta saldo
Renombramiento - Ejemplo
H
cuenta.saldo
(o
cuenta.saldo < d.saldo
(Cuenta x
d
(Cuenta) )
Cuenta.saldo
100,000
80,000
Renombramiento - Ejemplo
Realizar la diferencia entre H
saldo
(Cuenta) y la
relacin intermedia calculada.
H
saldo
(Cuenta) H
cuenta.saldo
(o
cuenta.saldo < d.saldo

(Cuenta x
d
(Cuenta) )
saldo
100,000
140,000
80,000

saldo
100,000
80,000
=
saldo
140,000
Dadas dos relaciones Compatibles
especficas, construye una tercera
relacin formada por todas las
tuplas que aparecen en ambas
relaciones.
Operadores Relacionales
INTERSECCIN
Smbolo:
Trmino Comn: INTERSECT
Notacin: R1 R2
Equivalencia: R1 R2 = R1 - (R1 - R2)
Resultado:
Cabecera - idntica a la de R1 R2
Cuerpo - todas las tuplas que aparecen en R1 y en
R2 a la vez.
Operadores Relacionales
INTERSECCIN
R1 R2
Operadores Relacionales
INTERSECCIN - Ejemplo

Averiguar los clientes que tienen un prstamo concedido y una
cuenta abierta
H
N Cliente
(Prestatario) H
N Cliente
(Titular-cuenta)
Titular_cuenta
Prestatario
N_Cliente #Cuenta
Santos
C-101
Gmez
C-215
Lpez
C-102
Abril C-305
Gonzlez C-201
Santos C-217
Rodrguez C-222
N_Cliente #Prestamo
Santos P-17
Gmez P-23
Lpez P-15
Soto P-14
Prez P-93
Gmez P-11
Fernndez P-16
Operadores Relacionales
INTERSECCIN - Ejemplo

H
N Cliente
(Prestatario) H
N Cliente
(Titular-cuenta)
N_Cliente
Santos
Gmez
Lpez
Dadas dos relaciones
especficas, construye
una tercera relacin que
combina ciertas
selecciones, proyeccin
y un producto
cartesiano en una sola
operacin.
R
2

O
A B
a
1
a
2
a
3

b
1
b
2
b
3
R
1

B
b
1
b
2
b
4
C
c
1
c
2
c
4
A
a
1
a
2

R
3

c
1
c
2
C
b
1
b
2

B
Smbolo: O
Trmino Comn: JOIN
Notacin: R1 O R2
Operadores Relacionales
FUSIN (JOIN) o Reunin Natural
Operadores Relacionales
FUSIN (JOIN) - Ejemplo
Averiguar los nombres de todos los clientes que
tienen concedido un prstamo, el importe de ste y la
sucursal donde se lo otorgaron
(Prestatario O Prstamo)
N_Cliente #Prestamo
Santos P-17
Gmez P-23
Lpez P-15
Soto P-14
Prez P-93
Gmez P-11
Fernndez P-16
N_Sucursal #Prestamo $Importe
Miraflores P-17
200,000
La Aurora P-23 400,000
Lima Cercado P-15
300,000
Chacarilla P-14
300,000
Primavera P-93 100,000
Surquillo P-11 180,000
La Molina P-16 260,000
Operadores Relacionales
FUSIN (JOIN) - Ejemplo
Procedimiento:
Calcular el producto cartesiano de las relaciones
Prestatario y Prstamo:
Prestatario x Prstamo

Seleccionar las tuplas correspondientes al mismo
numero-prstamo:
o
prestatario.# Prstamo = prstamo.# Prstamo
(Prestatario x
Prstamo)

Operadores Relacionales
FUSIN (JOIN) - Ejemplo
Realizar la proyeccin de nombre-cliente, sucursal
nmero-prstamo e importe de la relacin resultante
(eliminando as la doble ocurrencia del # Prstamo):
H
N Cliente, N Sucursal, prstamo.# prstamo, importe
(o
prestatario. #
prstamo = prstamo.# prstamo
(Prestatario x Prstamo))
=
Prestatario O Prstamo
Operadores Relacionales
FUSIN (JOIN) Ejemplo

(Prestatario O Prstamo)
N_Cliente N_Sucursal #Prestamo $Importe
Santos Miraflores P-17
200,000
Gmez La Aurora P-23 400,000
Lpez Lima Cercado P-15
300,000
Soto Chacarilla P-14
300,000
Prez Primavera P-93 100,000
Gmez Surquillo P-11 180,000
Fernndez La Molina P-16 260,000
Dadas R1 y R2, donde R2 _ R1 (la
cabecera de R2 es un subconjunto de la
cabecera de R1), Se construye una nueva
relacin formada por los atributos de R1
que no estn en R2, donde los valores de
los otros atributos concuerdan con todos los
valores de la relacin R2.
A
a
1
R
3

R
2


A B
a
1
a
1
a
2
a
3
b
1
b
4
b
1
b
4
R
1

B
b
1
b
4
Smbolo:
Trmino Comn: DIVIDE BY
Notacin: R1 R2
Operadores Relacionales
DIVISIN
Equivalencia:
T1
(H
b
(R1))

T2
(H
b
((R2 x T1) R1)
T1 T2
La relacin resultante de R1 R2 es como sigue:
Cabecera : X
Cuerpo : tuplas (X:x) tales que - (X:x, Y:y) en R1 para todas las
tuplas (Y:y) en R2
R1 R2 = X y (X x R2) subconjunto de R1
Operadores Relacionales
DIVISIN
Sean R1 = (X
1
, X
2
, ..., X
M
, Y
1
, Y
2
, ..., Y
N
)
R2 = (Y
1
, Y
2
, ..., Y
N
)
Consideremos (X
1
, ..., X
M
) y (Y
1
, ..., Y
N
) como si
fueran atributos compuestos X e Y. Entonces
Hallar todos los clientes que tengan abierta una cuenta
en todas las sucursales de Surco
Operadores Relacionales
DIVISIN - Ejemplo
Sucursal
N_Sucursal N_Distrito
Cuenta (1)
Titular-cuenta (1) N_Cliente Cuenta
N_Sucursal Cuenta Saldo
Cuenta (1)
Titular-cuenta (1)
N_Cliente Cuenta
Gonzlez C-101
Gmez C-215
Lpez C-102
Abril C-305
Gonzlez C-201
Santos C-217
Rodrguez C-222
N_Sucursal Cuenta Saldo
Chacarilla C-101 100,000
La Aurora C-215 140,000
Lima Cercado C-102 80,000
Chacarilla C-305 70,000
Primavera C-201 180,000
Surquillo C-222 140,000
La Molina C-217 150,000
N_Sucursal N_Distrito
Miraflores Miraflores
La Aurora Surquillo
Lima Cercado Lima
Chacarilla Surco
Primavera Surco
Surquillo Surquillo
La Molina La Molina
Barrios Altos Lima
Sucursal
Operadores Relacionales
DIVISIN - Ejemplo
Hallar todos los clientes que tengan abierta una cuenta
en todas las sucursales de Surco
Obtener todas las sucursales de Surco:
R1 = [
N sucursal
( o
Distrito = Surco
( Sucursal))
N_Sucursal
Chacarilla
Primavera
Operadores Relacionales
DIVISIN - Ejemplo
Hallar todos los clientes que tengan abierta una cuenta
en todas las sucursales de Surco
Encontrar todos los pares (nombre-cliente, nombre-sucursal)
para los que el cliente tiene una cuenta en una sucursal:
R2 = [
N cliente, N sucursal
( Titular-cuenta O Cuenta)
N_Cliente N_Sucursal
Gonzlez Chacarilla
Gmez La Aurora
Lpez Lima Cercado
Abril Chacarilla
Gonzlez Primavera
Santos La Molina
Rodrguez Surquillo
Operadores Relacionales
DIVISIN - Ejemplo
Hallar todos los clientes que tengan abierta una cuenta
en todas las sucursales de Surco
Hallar los clientes que aparecen en R2 con los nombres
de todas las sucursales de R1:
[
N cliente, N sucursal
( Titular-cuenta O Cuenta)
[
N sucursal
( o
N Distrito = Surco
( Sucursal))
N_Cliente
Gonzlez
Precedencia de Operadores
Relacionales
Proyeccin
Seleccin
Producto cartesiano
JOIN, Divisin
Interseccin
Unin, Diferencia

El producto y el join son asociativos y
conmutativos
Ejemplos de Operaciones Relacionales
Considere el siguiente esquema relacional:

CLIENTE: (C_cliente, N_cliente, T_cli_direccion, Npais, $SaldoIni,
$SaldoAct)
VENDEDOR: (C_vendedor, N_vendedor, C_jefe, N_oficina, %Comision)
PRODUCTO: (C_producto, N_producto, C_fabricante, $Costo, $Precio)
FABRICANTE: (C_fabricante, N_fabricante, T_fab_direccion, N_pais)
VENTA: (D_venta, C_cliente, C_vendedor, C_producto, Q_unidades)
Ejemplos de Operaciones Relacionales
C_vendedor N_vendedor C_jefe N_oficina %Comision
10 Rodney Jones 27 Chicago 10
14 Masaji Matsu 44 Tokyo 11
23 Francoise
Moire
35 Bruselas 9
37 Elena Horna 12 Bs. Aires 13
39 Goro Azuma 44 Tokyo 10
27 Terry Cardoso Chicago 15
44 Albert Ige 27 Tokyo 12
35 Brigit Bovary 27 Bruselas 11
42 Bruno Snchez 27 Bs. Aires 10
Unin
Ejemplos de Operaciones Relacionales
Si consideramos:
Vendedor_subordinado: todos aquellos que
tienen un jefe
Vendedor_jefe: todos aquellos que son jefe de
alguien

Vendedor = Vendedor_subordinado Vendedor_jefe
Jefes de nivel intermedio:
Vendedor_subordinado Vendedor_jefe
Interseccin
Ejemplos de Operaciones Relacionales
C_VENDEDOR

N_VENDEDOR

C_JEFE

OFICINA

%_COMISION

44

Albert Ige

27

Tokyo

12

35

Brigit Bovary

27

Bruselas

11

12

Bruno Snchez

27

Bs.
Aires

10

Seleccin
Vendedores de Tokyo:
o
oficina=Tokyo
(Vendedor)
Ejemplos de Operaciones Relacionales
C_VENDEDOR

N_VENDEDOR

C_JEFE

OFICINA

%_COMISION

14

Masaji Matsu

44

Tokyo

11

39

Goro Azuma

44

Tokyo

10

44

Albert Ige

27

Tokyo

12

Seleccin
o
oficina=Tokyoand %_comision > 11
(Vendedor)
Ejemplos de Operaciones Relacionales
Informacin de los vendedores de la oficina de
Tokyo que tienen una comisin mayor a 11%
C_VENDEDOR

N_VENDEDOR

C_JEFE

OFICINA

%_COMISION

44

Albert Ige

27

Tokyo

12

H
N_Vendedor
(o
%_comision < 11
(Vendedor))
Proyeccin
Ejemplos de Operaciones Relacionales
Nombres de los vendedores que tienen una comisin
menor que 11 %
N_VENDEDOR

Rodney Jones

Francois Moire

Goro Azuma

Bruno Snchez

Fusin (Join)
Ejemplos de Operaciones Relacionales
Nombres de los clientes que han comprado el producto
2518
H
N_Cliente
((o
C_producto =2518
(Venta)) O
(Cliente))
Ejemplos de Operaciones Relacionales
Muestre los nombres de los vendedores cuyos jefes
obtienen una tasa de comisin mayor al 11 %
Multiplicar Vendedor por s mismo:

d
(Vendedor) X Vendedor
Seleccionar las filas donde la primera ocurrencia de
Id_jefe coincide con la segunda ocurrencia de
C_vendedor:
o
Vendedor.C_jefe = d.C_vendedor
(
d
(Vendedor) X
Vendedor))
Ejemplos de Operaciones Relacionales
Renombramos esta expresin, como R:

R
(o
Vendedor.C_jefe = d.C_vendedor
(
d
(Vendedor)
X Vendedor))
Seleccionar las filas donde la comisin del jefe sea
mayor a 11, y proyectamos el nombre del vendedor:
H
N_Vendedor
( o
d.%comisin > 11
(R))
Muestre los nombres de los vendedores cuyos jefes
obtienen una tasa de comisin mayor al 11 %
Ejemplos de Operaciones Relacionales
N_VENDEDOR

Rodney Jones

Masaji Matsu

Goro Azuma

Albert Ige

Brigit Bovary

Buster Snchez

Muestre los nombres de los vendedores cuyos jefes
obtienen una tasa de comisin mayor al 11 %

También podría gustarte