You are on page 1of 18

Lenguajes de consulta

Un

lenguaje de consulta es un lenguaje con el que los usuarios solicitan informacin de la BBDD.
Estos lenguajes suelen ser de nivel superior que el de los lenguajes de programacin habituales. Procedimientales
z

Clasificacin

El usuario indica al sistema que lleve a cabo una serie de operaciones en la BBDD para calcular el resultado. El usuario describe la informacin deseada sin dar un procedimiento concreto para obtener la informacin.

No procedimientales
z

Lenguajes Formales del Modelo Relacional


Se

parte de los esquemas de relaciones y se define un lenguaje de manipulacin de datos. Dentro de estos lenguajes podemos encontrar

lgebra Relacional (Procedimental) Clculo Relacional de Tuplas (No procedimental) Clculo Relacional de Dominios (No procedimental)

Estos

lenguajes son estrictos y formales y han servido como base para los lenguajes implementados en los SGBD comerciales que veremos posteriormente.

lgebra Relacional

Lenguaje de consulta procedimental basado en lgebra de conjuntos. Serie de operaciones que toman una o dos relaciones como entrada y generan una relacin como salida, pero siempre sin modificar los datos de la base de datos (es un lenguaje de consulta). Las operaciones son:

Seleccin Proyeccin Reunin (JOIN o producto cartesiano con condicin) Divisin Operaciones habituales de conjuntos: unin, interseccin, resta y producto cartesiano.

El conjunto completo (conjunto de operaciones que permiten realizar todas las operaciones posibles) en este lenguaje es: {unin, resta, producto cartesiano, seleccin, proyeccin}

Seleccin
La

operacin de seleccin da como resultado un conjunto de tuplas que cumplen la condicin de seleccin aplicada sobre la entrada.

c(R)= conjunto de tuplas de la relacin R que cumplen la

condicin c.

R ser un esquema de relacin o una expresin que lo represente. c ser un conjunto de clusulas conectadas entre s mediante operadores booleanos (, , ). Cada clusula ser de la forma
z z

<nombre atributo> OPCOMP <nombre atributo> donde OPCOMP ser un operador de comparacin (=, , <, , >, )

El

resultado de la consulta es una seleccin con los mismos atributos que la original.
4

Seleccin (cont.)
Ejemplo:

base de datos de empleados. con sueldo superior a 1.200 : cuyos apellidos sean iguales:

EMP (DNI, NOM, AP1, AP2, SUELDO)


Empleados

SUELDO > 1200 (EMP)


Empleados

AP1 = AP2 (EMP)


Empleados

con sueldo superior a 1.200 cuyos apellidos sean iguales:

(SUELDO > 1200) (AP1 = AP2) (EMP)

Proyeccin
La

operacin de proyeccin devuelve las tuplas de la relacin que se le pasa como argumento, omitiendo ciertas columnas.
Los atributos que queramos obtener se colocan como subndice de la operacin, separados por comas.

LISTA_ATRIBUTOS (R)= conjunto de tuplas de R con los

atributos de la lista.

R ser un esquema de relacin o una expresin que lo represente. LISTA_ATRIBUTOS ser una sucesin de atributos separados por comas.

Una

proyeccin no repite tuplas porque su resultado es una relacin que a su vez es un conjunto de tuplas
Los conjuntos no repiten elementos Dos tuplas son iguales si son iguales componente a componente

Proyeccin (cont.)
Ejemplo:

base de datos de empleados (ejemplo anterior). DNI y sueldo de todos los empleados:

DNI, SUELDO ( EMP )


DNI

de los empleados con ms de 1.200 de sueldo:

DNI ( SUELDO > 1200 ( EMP ) )


DNI

de los empleados con ms de 1.200 de sueldo, dos pasos:


R1 R2
SUELDO > 1200 DNI

( EMP ) /* Tuplas de EMP con sueldo > 1200 */ /* DNI empleados con sueldo > 1200 */

( R1 )

Renombramiento
La

operacin de renombramiento permite cambiar el nombre del esquema y de las columnas de otro esquema.

E(LISTA_ATRIBUTOS)(R) = La relacin resultante tiene nombre E

con nombre de atributos LISTA_ATRIBUTOS.


R ser un esquema de relacin o una expresin que lo represente. E ser el nombre del esquema resultantes. LISTA_ATRIBUTOS ser una sucesin de atributos separados por comas. stos sern los nuevos nombres para los atributos definidos en el esquema R.

La

relacin resultante contiene las mismas tuplas que el esquema original.


8

Renombramiento
Ejemplo:

Los atributos de una relacin se pueden renombrar para facilitar el manejo de atributos:
/* Renombramiento de DNI a D */ (EMP) /* Renombramiento de todos los atributos */

EMP (D,NOM,AP1,AP2,SUELDO) EMP (D,N,A1,A2,S) (EMP)

Es tambin posible realizar copias de relaciones renombrando o no sus atributos:


/* Copia de EMP a EMP1sin renombrar atributos */

EMP1(DNI, NOM, AP1, AP2, SUELDO)

(EMP)

Unin , Interseccin y Resta Operaciones

tpicas de conjuntos. Las relaciones deben ser

compatibles:

Mismo nmero de atributos y mismo dominio dos a dos: R1 (A1, A2, ... An) R2 (B1, B2, Bn)
Para todo i, 1 i n, Dom (Ai) = Dom (Bi)

El

resultado de estas operaciones ser otra relacin (no repite tuplas). En la relacin resultante, los atributos sern los de la relacin que pongamos como primer operando. Lo habitual es realizar uniones, intersecciones y restas con esquemas exactamente iguales.

10

Unin, Interseccin y Resta


Ejemplo:

EST (DNI_EST, NOMB_EST) PROF (DNI_PROF, NOMB_PROF) Personas que son alumnos o son profesores PER (DNI, NOMBRE) (EST (DNI, NOMBRE) (EST) PROF (DNI, NOMBRE)(PROF))
z z

Las tuplas resultantes pasaran a la relacin PER. Si hay algn alumno que es a la vez profesor y alumno slo aparecer una vez en la relacin PER.

11

Producto Cartesiano

Esta es una operacin binaria. No exige que las relaciones sean compatibles. R1 (A1, ..., An) R2 (B1, ..., Bm) R (A1, ..., An, B1, ..., Bm) La relacin resultante, R, contiene tuplas con los atributos de ambas relaciones. Pero esas tuplas son el resultado de combinar cada una de las tuplas de la primera relacin con todas las de la segunda.

Ejemplo: R1 (A1, ..., An) x1, ..., x1 x2, ..., x2 x3, ..., x3

R2 (B1, ..., Bm) y1, ..., y1 y2, ..., y2

R1 (A1, ..., An) R2 (B1, ..., Bm) x1, ..., x1,y1, ..., y1 x1, ..., x1, y2, ..., y2 x2, ..., x2, y1, ..., y1 x2, ..., x2, y2, ..., y2 x3, ..., x3, y1, ..., y1 x3, ..., x3, y2, ..., y2
12

Ejemplos

Ejemplo: para el siguiente esquema se pide obtener el DNI de los empleados que trabajan en el departamento Contabilidad.
EMP (DNI, NUMDEP) 123 456 235 987 1 2 2 1 1 2 DPTO (ND, NOMD) Ventas Contabilidad"

Pasos a seguir:

Combinar los datos de ambas tablas. Quedarse con las filas donde cada empleado aparezca junto a su departamento y adems el nombre del departamento sea Contabilidad Filtrar campos para obtener DNI.

13

Ejemplos
Solucin

1: 2:
/* Tuplas con NOMD = Contabilidad*/

RES DNI ( NUMDEP = ND NOMD = Contabilidad ( EMP DPTO ) )


Solucin

R1 NOMD = Contabilidad (DPTO) R2 ND (R1) R3 EMP R2 RES DNI (R4)

/* Prod. cartesiano como antes, pero slo con ND */

R4 NUMDEP = ND (R3) /* Tuplas de los empleados de Contabilidad.*/


/* Escoge slo el DNI. Resultado que queramos*/

14

Producto Cartesiano
En

un producto cartesiano puede aparecer el mismo nombre de atributo en R1 y R2


es necesario crear un convenio de denominacin para distinguir unos atributos de otros. En este caso se realiza adjuntando el nombre de la relacin de la que procede originalmente. Conviene evitarlo utilizando renombramiento

P.

ej.:
EMP(DNI, NUM) DPTO(NUM, NOMD)

RES DNI (

EMP.NUM = DPTO.NUM NOM = Contabilidad ( EMP DPTO ) )

15

Ejemplos
para el siguiente esquema se pide obtener el DNI de los empleados que trabajan en el departamento Contabilidad. DPTO (NUM, NOMD) EMP (DNI, NUM) solucin con renombramiento.
Ejemplo:

R1 NOMD = Contabilidad (DPTO) /* Tuplas con NOMD = Contabilidad */ R2 NUMDEP

(NUM (R1))

/* Renombrado */

R3 EMP R2 RES DNI (R4)

/* Prod. cartesiano */

R4 NUM = NUMDEP (R3) /* Tuplas de los empleados de Contabilidad. */


/* Escoge slo el DNI. Resultado que queramos */

16

Ejemplos
Para el siguiente esquema se pide obtener el nombre de los empleados que trabajan en proyectos dirigidos por Lpez. EMP (DNI, NOM) PROY (NP, DIRECTOR) TRABAJA ( DNIE, NPRO ) Observaciones:
Ejemplo:

El atributo que formar la relacin resultado est en EMP El atributo sobre el que se aplica la condicin est en PROY Se deben combinar los datos de las relaciones y luego filtrar para obtener aquellas filas donde los atributos de reunin coinciden, adems de aplicar las condiciones correspondientes.

17

Ejemplos
Solucin:

R1 NP (DIRECTOR = Lpez (PROY) )


Lpez */

/* NP de proyectos dirigidos por

R2 TRABAJA R1 R4 DNIE (R3) R5 R4 EMP R6 DNI = DNIE (R5) RES NOM (R6)

/* Combinacin de proyectos con trabajas */

R3 NP = NPRO (R2) /* Seleccin de las filas que contienen datos relacionados */


/* Aqu solo tenemos DNI, nos piden el nombre. */ /* Mismo proceso de combinacin y seleccin */

/* Resultado final*/

18

Ejemplos
Ejemplo:

Para el siguiente esquema se pide obtener el DNI de los empleados cuyo supervisor gana ms de 2.000 .
EMP (DNI, SUELDO, DNISUPERVISOR)

Soluciones:

EMP1 (DNI1, S1, DNI_S1) (EMP) R1 EMP EMP1 R2 DNISUPERVISOR = DNI1 S1 > 2000 (R1) RES DNI (R2)

R1 SUELDO > 2000 (EMP) R2 (DNI_S) (DNI (R1)) R3 EMP R2 R4 DNISUPERVISOR = DNI_S (R3) RES DNI (R4)

19

Ejemplos
Ejemplo:

Para el siguiente esquema se pide obtener el DNI de los empleados con al menos dos hijos.
EMP (DNI, NOM) HIJOS (DNI,NOM)

Solucin:

R1 (DNI1, NOM1) (HIJO) /* Primero renombramos para no confundirnos. */ R2 HIJO R1


/* R2 tiene tuplas as: DNI, NOM, DNI1, NOM1 */ DNI del padre, y distinto nombre) */

R3 DNI1 = DNI NOM NOM1 (R2) /* Interesan tuplas as: 1 A 1 B (igual RES DNI (R3)

20

Ejemplos

Ejemplo: para el siguiente esquema se pide obtener el DNI de los empleados supervisados por DNI = 123 EMP (DNI, SUELDO, DNISUP)

DNI de los empleados supervisados a uno y dos niveles por DNI = 123

RES DNI ( DNISUP = 123 (EMP) ) /* DNI de los supervisados directamente */ R1 (DNI1) (DNI (DNISUP = 123 (EMP) )) R2 DNISUP = DNI1 (EMP R1) R3 DNI (R2) /* En R3 estn los DNI de los superv. a 2 niveles por 123. */ RES R1 R3 No se puede responder a empleados supervisados a cualquier nivel.

21

Reunin/Join
Operacin

binaria que implementa el producto cartesiano con

condicin. R1 c R2 = conjunto de tuplas resultantes del producto cartesiano R1 R2 que cumplen la condicin c.

c es la condicin de reunin, y ser un conjunto de clusulas conectadas entre s mediante operadores booleanos (, , ), cada una de la forma
z z

<nombre atributo> OPCOMP <nombre atributo> donde OPCOMP ser un operador de comparacin (=, , <, , >, )

En

realidad se da la siguiente correspondencia: R1


c

R2 c (R1 R2)
22

Reunin/Join

c (cont.)

La reunin entre dos relaciones puede dar como resultado el conjunto vaco si ninguna de las tuplas del producto cartesiano cumple la condicin de reunin. Las tuplas cuyos atributos de reunin sean nulos no aparecen en el resultado. Ejemplo: para el siguiente esquema se pide obtener el DNI de los empleados que trabajan en el departamento Contabilidad. EMP (DNI, NUMDEP) DPTO (ND, NOMD) Solucin:

R1 NOMD = Contabilidad (DPTO) /* Tuplas con NOMD = Contabilidad */ R2 EMP /* Tuplas de los empleados de NUMDEP = ND R1
Contabilidad. */

RES DNI (R2)

23

Reunin/Join Natural
Producto

cartesiano con condicin implcita: se seleccionan aquellas tuplas cuyos valores coincidan en los atributos con igual nombre.

Se eliminan los atributos duplicados Dados R1(r) y R2(s) donde Ai, 1<=i<=k son atributos comunes a R1 y R2

R1

Si no hay atributos comunes, es decir, r s=

R2 rs(R1.A1=R2.A1R1.Ak=R2.Ak(R1 R2)) R1 R2 R1 R2

24

Reunin/Join natural
Ejemplos:

(cont.)

EMP (DNI, ND)

DPTO (ND, NOMD)

EMP DPTO devuelve una relacin con los atributos (DNI,ND,NOMD)

EMP (DNI, NOM, APES, ND)

DPTO (ND, NOM)

EMP
z

DPTO probablemente devolver una relacin vaca

Nombre empleado distinto de nombre de departamento

25

Reunin/Join natural
Ejemplo:

(cont.)

dado el siguiente esquema, obtener el nombre de los propietarios de coches modelo Ferrari F50.

CLIENTES (DNI, NOM, DIR) COCHES (MATR, MODELO, ANIO) PROPIEDAD (DNI,MATR)
Solucin:

R1 MODELO = Ferrari F50 (COCHES)

/* Tuplas del modelo Ferrari F50 */

R2 PROPIEDAD

R1 R2)

/* DNI de propietarios junto a los datos de sus coches */

RES NOM (CLIENTES

/* Nombre de los propietarios de Ferrari F50 */

26

Reunin/Join externa
Existen

dos variantes

Reunin externa por la izquierda, reunin externa por la derecha.


En ambos casos se aaden tuplas adicionales a la reunin natural

Izquierda:

R1

R2,

Aade todas las tuplas de la relacin de la izquierda que no coinciden con ninguna tupla de la relacin de la derecha Estas tuplas aparecern con los atributos correspondientes a la relacin R2 con valor nulo.

Derecha:

R1

R2

anloga a la anterior, salvo que ahora la prioridad la tiene R2.

27

Reunin/Join externa (cont.)


Ejemplo:
EMP (DNI, ND) 123 456 235 987 1 2 2 4 1 2 3 DPTO (ND, NOMD) Ventas Contabilidad" Marketing

La

operacin join natural dar como resultado la instancia siguiente:


EMP DPTO

RES (DNI, ND, NOMD) 123 456 235 1 2 2 Ventas Contabilidad" Contabilidad"
28

Reunin/Join externa (cont.)

EMP

DPTO
RES (DNI, ND, NOMD) 123 456 235 1 2 2 3 Ventas Contabilidad" Contabilidad" Marketing

EMP

DPTO
RES (DNI, ND, NOMD) 123 456 235 987 1 2 2 4 Ventas Contabilidad" Contabilidad" 29

Divisin

Sean R1 y R2 dos esquemas de relacin, con X e Y como conjuntos de atributos respectivamente, para realizar la divisin debe ocurrir que Y sea subconjunto de X R1 (X) R2 (Y)

el resultado es una relacin R cuyos atributos son X Y.

Una tupla u est en R1 R2 cuando para todo v de R2, la tupla que se obtiene al unir los valores de u y v est en R1. Matemticamente: R1 (A1, A2, ... , An) R2 (An-s, , An) R (A1, A2, , An-s-1)

<a1, a2, , an-s-1> R si <an-s, , an> R2 <a1, , an-s-1, an-s, , an> R1

Idea

Consultas en las que se busca que algn atributo de una relacin tome (al menos) todos los valores de otro atributo en otra relacin (para todo).
30

Divisin (cont.)
dado el siguiente esquema de relacin, obtener el DNI de los empleados que trabajan en todos los proyectos en los que trabaja el empleado con DNI = 123. EMP (DNI, NOM) TRAB (DNI, NPRO) Solucin:
Ejemplo:

TEMP NPRO (DNI = 123 (TRAB))

/* NPRO de todos los proyectos en los que trabaja DNI=123 */ /* DNI tales que todas las concatenaciones de los DNI con los NPRO de TEMP existe en TRAB. */

RES TRAB TEMP

31

Divisin (cont.)

TRAB (DNI, NPRO) 123 123 456 456 456 987 1 2 1 2 3 1

TEMP (NPRO)

RES (DNI)

1 2

123 456

32

Divisin (cont.)

Ejemplo 2: obtener el DNI de los empleados que trabajan en todos los proyectos en los que trabaja el empleado con DNI = 123. EMP (DNI, NOM) Solucin 1:

z

TRAB (DNI, NPRO, NHORAS)

R1 NPRO (DNI = 123 (TRAB)) RES TRAB R1


z

/* NPRO de todos los proyectos en los que trabaja DNI=123 */ /* CONJUNTO VACO (probablemente) */

Solucin 2:

R1 NPRO (DNI = 123 (TRAB))


z

/* NPRO de todos los proyectos en los que trabaja DNI=123 */ /* Todas la tuplas DNI, NPRO */ /* DNI de los empleados que trabajan todos los proyectos en que trabaja 123 */
33

R2 DNI, NPRO (TRAB)


z

RES R2 R1
z

Observaciones sobre valores nulos


Los

valores nulos afectan a las diferentes operaciones del lgebra relacional. Cualquier comparacin (=, , <, , >, ) que incluya un valor nulo, tiene como resultado un valor desconocido. Los valores nulos tambin pueden aparecer en operaciones booleanas

NULO cierto = desconocido , NULO falso = falso, NULO NULO = desconocido NULO cierto = cierto , NULO falso = desconocido, NULO NULO = desconocido NULO = desconocido

34

Observaciones sobre valores nulos (cont.)


Seleccin

Si la evaluacin del predicado sobre una tupla devuelve cierto, la tupla se incluye en el resultado en otro caso (falso o desconocido), no se incluye. La operacin de proyeccin trata los nulos como cualquier otro valor a la hora de eliminar duplicados. Si una parte de valores de las tuplas coinciden y las dos tienen valores nulos en el resto, se tratan como duplicados.

Proyeccin

Unin,

interseccin y diferencia

Estas operaciones tratan los valores nulos como las proyecciones.

35

Observaciones sobre valores nulos (cont.)


Reunin

Se utiliza la equivalencia reunin = seleccin(producto cartesiano) Por tanto dos tuplas con valor nulo en el atributo comn no coinciden.

Reunin

externa

Funciona de manera similar para aquellas tuplas que cumplan las condiciones de reunin. Para el resto de tuplas, dependiendo del tipo de reunin externa, se incluirn el resto de tuplas rellenando con valores nulos.

36

You might also like