Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pract 3
Pract 3
Lenguaje SQL
1 Parte: Manipulacin de
Bases de Datos
Objetivos
Presentar
Ver
Presentar
Realizar
Realizar
Ciclismo
EQUIPO (nom_eq: d_eq, director: d_dir)
Clave Primaria: {nom_eq}
CICLISTA (dorsal: d_dor, nombre: d_nom, edad: d_edad, nom_eq: d_eq))
Clave Primaria: {dorsal}
CAj: {nom_eq} hace referencia a EQUIPO
VNN: {nom_eq}
ETAPA (netapa: d_n, km: d_km, salida: d_sal, llegada: d_lleg, dorsal: d_dor)
Clave Primaria: {netapa}
CAj: {dorsal} hace referencia a CICLISTA
PUERTO (nombre:d_nom,altura:d_alt,categora:d_cat, netapa:d_n,dorsal: d_dor)
Clave Primaria: {nombre}
CAj: {netapa} hace referencia a ETAPA
CAj: {dorsal} hace referencia a CICLISTA
VNN: {netapa}
MAILLOT (cdigo: d_cdigo, tipo: d_tipo, premio: d_pre, color: d_col)
Clave Primaria: {cdigo}
LLEVAR (dorsal: entero, netapa: d_n, cdigo: d_cdigo)
Clave Primaria: {netapa, cdigo}
CAj: {netapa} hace referencia a ETAPA
CAj: {dorsal} hace referencia a CICLISTA
CAj: {cdigo} hace referencia a MAILLOT
VNN: {dorsal}
Ciclismo
Maillot
Equipo
codigo
nomeq
director
Ciclista
dorsal
nombre
edad
Etapa
netapa
nomeq
km
Llevar
tipo
dorsal
premio
netapa
color
codigo
Puerto
nompuerto
altura
salida
categoria
llegada
pendiente
dorsal
netapa
Esquema de Prcticas.
dorsal
select *
from T
where atrib1 > atrib2
Si en una fila se diera el caso que atrib1 = 50 y atrib2 fuera
nulo, el resultado de la comparacin sera indefinido y por
tanto dicha fila no se incluira en la seleccin.
MS EJEMPLOS DE COMPARACIONES
Uso de operadores aritmticos: + (suma), - (diferencia), *
(producto), / (divisin), etc.
EJEMPLO: Obtener de los maillots el tipo y el premio en dlares
(supongamos que est en pesetas) ($1 = 150 ptas.) de aquellos maillots
cuyo premio supere los 100 dlares.
SELECT tipo, premio / 150 FROM Maillot
WHERE premio / 150 > 100;
Uso de LIKE
EJEMPLO: Obtener el nombre y la edad de los ciclistas que pertenezcan a
equipos cuyo nombre contenga la cadena 100%.
SELECT nombre, edad FROM Ciclista
WHERE nomeq LIKE %100\%% ESCAPE \
Se ha utilizado \ para indicar que el carcter comodn tiene su valor %
Ejercicios:
Prctica 3: El lenguaje SQL (1a Parte)
Hacer el bloque de consultas sobre una sola relacin
de las bases de datos Ciclismo y Msica
T2
n
a1
a2
a3
b1
b2
b3
c1
c2
d1
b2
T1 x T2
n
X
X
X
X
X
a1
a1
a2
a2
a3
a3
b1
b1
b2
b2
b3
b3
n
c1
c2
c1
c2
c1
c2
d1
b2
d1
b2
d1
b2
[tabla | variable_recorrido].columna
Es una instancia de la tabla. Es virtual
10
11
Ejercicios:
Prctica 3: El lenguaje SQL (1a Parte)
Hacer el bloque de consultas sobre varias
tablas de las bases de datos Ciclismo y Msica
12
WHERE
13
14
Es un valor a la vez
==> No puede hacer la comparacin
INCORRECTO: (error de ejecucin)
15
Predicado IN
Comprueba que un valor pertenece a una coleccin dada mediante una
subconsulta
Tambin, con IN
Encadenadas:
16
17
Predicado EXISTS
EXISTS (expresin_tabla)
El predicado EXISTS se evala a cierto si la expresin SELECT
devuelve al menos una fila.
En general, IN y EXISTS son intercambiables y se pueden
eliminar haciendo consultas a mltiples tablas e igualando por
claves ajenas.
O bien:
SELECT C.nombre FROM Ciclista C, Llevar L
WHERE C.dorsal = L.dorsal AND
L.codigo IN (SELECT M.codigo
FROM Maillot M
WHERE M.premio < 120 )
18
Ejercicios:
Prctica 3: El lenguaje SQL (1a Parte)
Hacer el bloque de consultas con subconsultas
de las bases de datos Ciclismo y Msica
19
X F(X) X F(X)
Obtener el nombre de los profesores que imparten todas
las asignaturas.
SELECT P.nombre
FROM Profesor P
WHERE NOT EXISTS (SELECT * FROM Asignatura A
WHERE NOT EXISTS (SELECT *
FROM Docencia D
WHERE D.cod_pro=P.cod_pro
D.cod_asg=A.cod_asg))
El lenguaje SQL
qu pasa si en el departamento de
un profesor no hay asignaturas de
mas de 6 crditos?
20
El lenguaje SQL
qu pasa si en el departamento de
un profesor PX no hay asignaturas
de mas de 6 crditos?
FALSO para todo valor de AX
{PX.nombre| Profesor (PX)
DX (Docencia (DX)
DX.cod_pro = PX.cod_pro DX.cod_asg = AX.cod_asg) ) }
El profesor PX aparecera en el
resultado de la consulta!
CIERTO
El lenguaje SQL
Si estos profesores no deben salir en la consulta, entonces se
debe hacer un control para comprobar que en el departamento
del profesor existe alguna asignatura de mas de seis crditos!.
{PX.nombre| Profesor (PX)
AX (Asignatura (AX) AX.cod_dep= PX.cod_dep (AX.teora+AX.prac)>6)
AX ( (Asignatura (AX) AX.cod_dep= PX.cod_dep (AX.teora+AX.prac)>6)
DX (Docencia (DX)
DX.cod_pro = PX.cod_pro DX.cod_asg = AX.cod_asg) ) }
21
El lenguaje SQL.
SELECT PX.nombre
SQL
FROM Profesor PX
WHERE EXISTS (SELECT *
FROM Asignatura AX
AND
NOT EXISTS (SELECT * FROM Asignatura AX
WHERE AX.cod_dep= PX.cod_dep AND (AX.teora+AX.prac)>6
AND
NOT EXISTS (SELECT * FROM Docencia DX
WHERE DX.cod_pro=PX.cod_pro AND
DX.cod_asg=AX.cod_asg) ) )
X F(X) X F(X)
Obtener el nombre del ciclista que ha ganado todas las
etapas de ms de 200 km.
C.nombre| Ciclista(C) X
(Etapa(X)X.Km>200C.dorsal=X.dorsal)
es equivalente a:
C.nombre| Ciclista(C)
X(Etapa(X)X.Km>200C.dorsal<>X.dorsal)
22
Solucin:
SELECT C.nombre FROM Ciclista C
WHERE NOT EXISTS (SELECT * FROM Etapa E
WHERE E.km > 200 AND C.dorsal <>
E.dorsal ) AND EXISTS (SELECT * FROM ETAPA E2
WHERE E2.km > 200);
23
Ejercicios:
Prctica 3: El lenguaje SQL (1a Parte)
Hacer el bloque de consultas con cuantificacin
universal de las BDs Ciclismo y Msica
Biblioteca
24
Consultas Agrupadas
SELECT [ALL | DISTINCT] A1i, A2j,..., Ank| *
FROM R1, R2, ..., Rn
[WHERE condicin]
[GROUP BY B1, B2,..., Bm]
[HAVING condicin]
GROUP BY: define grupos de tuplas en el conjunto de tuplas
seleccionadas por la condicin WHERE. Los grupos se definen
por la igualdad de valor en los atributos de agrupacin (B1, B2,...,
Bm).
HAVING: de los grupos definidos se seleccionan aquellos que
cumplen la condicin expresada.
Consultas Complejas
Relacin Seleccin-Agrupamiento
Un grupo se puede entender como un conjunto de filas con el mismo
valor para el conjunto de columnas por las que se agrupa (las incluidas
en la clusula GROUP BY).
Nomeq
Banesto
Edad
22
ONCE
PDM
25
32
Banesto
25
Kelme
ONCE
Kelme
28
30
29
Banesto
28
25
Edad
22
25
Banesto
ONCE
28
25
ONCE
PDM
Kelme
Kelme
30
32
29
28
Un Valor
por Grupo
Nomeq
Banesto
ONCE
PDM
Kelme
Edad
25
27,5
32
28,5
26
Consultas Agrupadas
EJEMPLO: Obtener el nmero total de profesores de cada departamento
Profesor
cod_pro
nombre
tel!fono
cod_dep
JCC
7796
DSIC
RFC
6789
MAT
cod_dep
JBD
5760
DISCA
DSIC
DSIC
MAT
IDM
DISCA
OEM
IDM
OEM
MAF
CPG
JTM
3560
7439
4590
IGP
3423
OEM
DGT
5679
DISCA
MCG
7756
DSIC
Consultas Agrupadas
Obtener el nmero total de profesores de los departamentos que tienen
mas de 2 profesores.
cod_pro
nombre
tel!fono
cod_dep
JCC
7796
DSIC
RFC
6789
MAT
cod_dep
JBD
5760
DISCA
DSIC
MAF
3560
DSIC
CPG
7439
IDM
JTM
4590
OEM
IGP
3423
OEM
DGT
5679
DISCA
MCG
7756
DSIC
27
EJEMPLO INCORRECTO:
SELECT nomeq, nombre, AVG(edad)
FROM Ciclista
GROUP BY nomeq;
La regla sintctica que aplican los sistemas relacionales
para asegurar el buen funcionamiento de las consultas
agrupadas es la siguiente:
En la seleccin de una consulta agrupada, slo pueden
aparecer referencias a columnas por las cuales se agrupa,
referencias a funciones agregadas o literales.
GROUP y WHERE
Si se incluye la clusula where, la aplicacin de esta
clusula se produce previamente a la agrupacin.
4
FROM Ciclista
GROUP BY nomeq;
28
Evaluacin:
1) Se seleccionan n tuplas de las relaciones que
cumplan la condicin de la clusula WHERE.
2) En el conjunto de tuplas seleccionadas se definen
grupos basados en el valor de los atributos de
agrupacin.
3) De los grupos definidos se seleccionan los que
cumplen la condicin de la clusula HAVING.
29
30
Ejercicios:
Prctica 3: El lenguaje SQL (1a Parte)
Hacer el bloque de consultas agrudapas de las BDs
Ciclismo y Msica
COMBINACIONES DE TABLAS
Existen otras formas de combinar varias tablas en consultas y
todas ellas, junto con las ya vistas, dan lugar a una expresin de
tabla.
Existen, en definitiva, varias formas de combinar dos tablas en el
lenguaje SQL:
Incluir varias tablas en la clusula from.
Uso de subconsultas en las condiciones de las clusulas
where o having.
Combinaciones conjuntistas de tablas: utilizando
operadores de la teora de conjuntos para combinar las
tablas.
Concatenaciones de tablas: utilizando diferentes formas
variantes del operador concatenacin del lgebra
Relacional.
31
lgebra
Relacional
SQL
Seleccin
R Donde F
Proyeccin
Producto
Cartesiano
R1 x R2, ... x Rn
Concatenacin
R1 R2
Unin
R1 R2
Diferencia
R1 - R2
Interseccin
R1 R2
compatibles
32
UNION
expresin_tabla union [ALL] trmino_tabla
Realiza la unin de las filas de las tablas provenientes de las
dos expresiones.
Se permitirn o no duplicados segn se incluya o no la opcin
ALL.
EJEMPLO: Obtener el nombre de todo el personal de la
vuelta.
(SELECT nombre FROM Ciclista)
UNION
(SELECT director FROM Equipo)
UNION
Ejemplo 2. Obtener el nombre de todo el personal
(profesores y directores de departamento).
SELECT director
FROM Departamento
UNION
SELECT nombre
FROM Profesor
33
INTERSECT
expresin_tabla intersect trmino_tabla
Realiza la interseccin de las filas de las tablas provenientes de
las dos expresiones.
EJEMPLO: Obtener los nombres de las personas que son tanto
ciclistas como directores de equipo .
(SELECT nombre FROM Ciclista)
INTERSECT
(SELECT director FROM Equipo)
INTERSECT
Ejemplo 2. Obtener los departamentos que tienen
adscritas asignaturas y profesores.
SELECT DISTINCT cod_dep
FROM Profesor
INTERSECT
SELECT DISTINCT cod_dep
FROM Asignatura
34
EXCEPT
expresin_tabla except trmino_tabla
En Oracle es Minus
Realiza la diferencia de las filas de las tablas
provenientes de las dos expresiones.
EJEMPLO: Obtener los nombres que aparecen en la tabla de
ciclistas y no en la de directores.
(SELECT nombre FROM Ciclista)
MINUS
(SELECT director FROM Equipo)
EXCEPT
Ejemplo 2. Obtener los departamentos que no tienen
adscritas asignaturas.
SELECT cod_dep
FROM Departamento
EXCEPT
SELECT DISTINCT cod_dep
FROM Asignatura
35
Concatenacin de tablas
SELECT [ALL | DISTINCT] A1i,...,A2j,...,Ank| *
FROM Rconcatenacin
1, R2, ..., Rde
n tablas
[WHERE condicin]
[GROUP BY B1, B2,..., Bm]
[HAVING condicin]
concatenacin interna: INNER JOIN
concatenacin externa: OUTER JOIN
Concatenacin de tablas
Corresponden a variantes del operador concatenacin del
lgebra Relacional.
Producto cartesiano CROSS JOIN
Concatenacin interna NATURAL JOIN
Concatenacin externa LEFT, RIGHT, FULL
Concatenacin unin UNION JOIN
36
Producto Cartesiano
(CROSS JOIN)
Concatenacin Interna
referencia_tabla1 [natural] [inner] join referencia_tabla2
[on expresin_condicional | using (comalista_columna) ]
tabla1 join tabla2 on expresin_condicional
37
concatenacin de
Profesor y Docencia
Concatenacin JOIN...USING
SELECT [ALL | DISTINCT] A1, A2,..., An| *
(1)
(2)
(3)
(4)
38
Concatenacin JOIN...ON
SELECT [ALL | DISTINCT] A1, A2,..., An| *
(1)
(2)
(3)
(4)
39
Concatenacin Externa
referencia_tabla [natural]
{left [outer] |
right [outer] |
full [outer] } JOIN referencia_tabla
[on expresin_condicional | using
(comalista_columna) ]
FULL, se muestran las tuplas no concatenadas de tabla1 y tabla2
union
(tuplas de la tabla1 que no estn en la concatenacin interna
con valores nulos en el resto de columnas)
40
Concatenacin Unin
referencia_tabla union join referencia_tabla
Crea una tabla donde el esquema es la unin de los esquemas
de las dos tablas, que pueden ser distintos.
El equipo PDM
con 0 ciclistas no
aparece
41
Se pone (+) en la
parte de la ICA de
la tabla de la que
no se quieren
mantener las
tuplas
42