Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pract3 PDF
Pract3 PDF
Lenguaje SQL
1 Parte: Manipulacin de
Bases de Datos
Objetivos
Presentar
la sintaxis del lenguaje SQL (slo del Lenguaje
de Manipulacin).
Ver
algunos ejemplos sencillos para clarificar la semntica
del SQL.
Presentar
las bases de datos CICLISMO, MSICA y
BIBLIOTECA.
Realizar
de menor a mayor complejidad consultas SQL
sobre dichas bases de datos.
Realizar
todo lo anterior usando la herramienta SQL del
sistema de gestin de bases de datos ORACLE.
1
Lenguaje de Manipulacin del SQL
Se presentan las instrucciones que se pueden ejecutar desde un
intrprete de SQL, lo que se denomina SQL interactivo.
SQL es un lenguaje muy expresivo y, en general, permite muchas
formas de expresar las mismas rdenes.
Las cuatro instrucciones que componen el lenguaje de manipulacin
de datos son las siguientes:
SELECT: permite la declaracin de consultas para la recuperacin de
informacin de una o ms tablas de una base de datos.
INSERT: realiza la insercin de una o varias filas sobre una tabla.
DELETE: permite efectuar el borrado de una o varias filas de una
tabla.
UPDATE: realiza una modificacin de los valores de una o ms
columnas de una o varias filas de una tabla.
2
1.1.1. Condiciones en consultas simples
SELECT [ALL | DISTINCT] comalista_tem_seleccionado | *
FROM tabla
[WHERE expresin_condicional]
[ORDER BY comalista_referencia_col]
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}
3
Ciclismo
Maillot
Equipo
codigo
nomeq
Ciclista tipo
director Llevar
dorsal
dorsal premio
nombre
netapa color
edad
codigo
Etapa nomeq
Puerto
netapa
nompuerto
km
altura
salida
categoria
llegada
pendiente
dorsal
netapa
Esquema de Prcticas. dorsal
4
EJEMPLO: Obtener el nombre y la edad de todos los
ciclistas.
SELECT nombre, edad FROM Ciclista;
5
COMPARACIN DE VALORES NULOS
Las comparaciones entre cualquier valor y NULL resultan
en indefinido. Ejemplo:
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.
6
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 %
7
FUNCIONES AGREGADAS EN CONSULTAS NO
AGRUPADAS
EJEMPLO:
SELECT Nm. de ciclistas =, COUNT(*), Media Edad =,
AVG(edad)
FROM Ciclista
WHERE nomeq = Banesto;
En consultas no agrupadas, la seleccin slo podr incluir referencias
a funciones agregadas o literales ya que las funciones van a devolver
un nico valor.
EJEMPLO INCORRECTO:
SELECT nombre, AVG(edad)
FROM Ciclista
WHERE nomeq = ONCE;
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
8
CONSULTAS SIMPLES SOBRE VARIAS TABLAS
Cuando la informacin que se desea obtener de la base
de datos se encuentra almacenada en ms de una tabla
se hace indispensable el declarar una consulta que
manipule estas tablas.
9
Ejemplo: SELECT * FROM T1, T2 WHERE T1.n = T2.n
T1 T2
n n
a1 b1 c1 d1
a2 b2 c2 b2
a3 b3
T1 x T2
n n
X a1 b1 c1 d1
X a1 b1 c2 b2
X a2 b2 c1 d1
a2 b2 c2 b2
X a3 b3 c1 d1
X a3 b3 c2 b2
[tabla | variable_recorrido].columna
Es una instancia de la tabla. Es virtual
10
EJEMPLO: Obtener el nombre de los ciclistas compaeros de equipo
de Miguel Indurin que sean ms jvenes que l.
1. En qu tablas se encuentra la informacin?
FROM Ciclista Pero, como se requiere comparar con tuplas de la misma tabla,
entonces se necesita tener varias imgenes de ella
FROM Ciclista C1, Ciclista C2
2. Qu condicin deben cumplir las filas resultantes?
WHERE C2.nombre=Miguel Indurin AND C1.nomeq = C2.nomeq
AND C1.edad < C2.edad;
3. Qu informacin queremos visualizar?
SELECT DISTINCT C1.nombre
SELECT DISTINCT C1.nombre FROM Ciclista C1, Ciclista C2
==> WHERE C2.nombre=Miguel Indurin AND C1.nomeq =
C2.nomeq AND C1.edad < C2.edad;
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
EJEMPLO: Obtener los nombres de los ciclistas pertenecientes
al equipo dirigido por lvaro Pino.
Antes, se haban usado igualdades:
SELECT C.nombre FROM Ciclista C, Equipo E
WHERE C.nomeq = E.nomeq AND E.director = lvaro Pino;
13
PREDICADOS DE COMPARACIN (=, <>, >, <, >=, <=)
Cada uno de los dos lados de un predicado de comparacin debe ser una nica
tupla formada por el mismo nmero de columnas. Es decir:
(A1, A2, , An) predicado_comparacin (B1, B2, , Bn)
Las subconsultas pueden ser argumentos, siempre y cuando devuelvan una
nica fila y el nmero de columnas coincida en nmero y tipo con el
otro lado del predicado de comparacin.
Llamaremos constructor_fila a una lista de atributos entre parntesis o una
subconsulta.
constructor_fila predicado_comparacin constructor_fila
En el caso que la subconsulta est vaca, se convierte a una fila con valores
nulos en todas las columnas.
14
EJEMPLO: Obtener los nombres de los puertos cuya altura es
mayor que la media de altura de los puertos de 2 categora.
15
Predicado IN
Comprueba que un valor pertenece a una coleccin dada mediante una
subconsulta
constructor_fila [not] IN(expresin_tabla)
A la derecha de IN puede aparecer ms de una fila y por eso se
denomina expresin_tabla.
16
Predicados de comparacin cuantificados (ALL, ANY)
Permiten comparar un valor con un conjunto de valores.
17
Predicado EXISTS
EXISTS (expresin_tabla)
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
EJEMPLO: Obtener el nombre de los ciclistas que no han ganado
etapas.
Ejercicios:
Prctica 3: El lenguaje SQL (1a Parte)
Hacer el bloque de consultas con subconsultas
de las bases de datos Ciclismo y Msica
19
Uso de EXISTS para cuantificacin universal (NO HAY EN
SQL)
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
Problemas con la cuantificacin universal
Obtener el nombre de los profesores que imparten todas las
asignaturas de su departamento de mas de 6 crditos.
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?
El profesor PX aparecera en el
CIERTO
resultado de la consulta!
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!.
21
El lenguaje SQL.
SELECT PX.nombre
SQL
FROM Profesor PX
WHERE EXISTS (SELECT *
FROM Asignatura AX
WHERE AX.cod_dep=PX.cod_dep AND (AX.teora+AX.prac)>6)
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)
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
Para poder expresar esta consulta en SQL se convertir en:
Obtener el nombre del ciclista tal que no existe una etapa de
ms de 200 km. que l no haya ganado
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
AUTOR(autor_id: tira(4), nombre: tira(35), nacionalidad: tira(20))
Clave Primaria: {autor_id}
LIBRO(id_lib: tira(10), titulo: tira(80), ao: entero, num_obras: entero)
Clave Primaria: {id_lib} VNN: {titulo}
TEMA(tematica: tira(20), descripcion: tira(50))
Clave Primaria: {tematica}
OBRA(cod_ob: entero, titulo: tira(80), ao: d_cat, tematica: tira(20))
Clave Primaria: {cod_ob}
Clave Ajena: {tematica} TEMA
VNN: {titulo}
24
Consultas Agrupadas
SELECT [ALL | DISTINCT] A1i, A2j,..., Ank| *
FROM R1, R2, ..., Rn
[WHERE condicin]
[GROUP BY B1, B2,..., Bm]
[HAVING condicin]
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).
25
Las funciones agregadas en las consultas agrupadas
funcionan de forma diferente que en las consultas
normales, devolviendo un valor por cada grupo formado.
Nomeq Edad
Banesto 22
Banesto 25
Banesto 28
ONCE 25 Un Valor
ONCE 30 por Grupo
PDM 32
Kelme 29
Kelme 28
La solucin, es:
Nomeq Edad
Banesto 25
ONCE 27,5
PDM 32
Kelme 28,5
26
Consultas Agrupadas
EJEMPLO: Obtener el nmero total de profesores de cada departamento
Profesor
cod_pro nombre tel!fono cod_dep
JCC Juan C. Casamayor R!denas 7796 DSIC
RFC Robert Fuster i Capilla 6789 MAT cod_dep
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 Juan C. Casamayor R!denas 7796 DSIC
RFC Robert Fuster i Capilla 6789 MAT cod_dep
27
EJEMPLO INCORRECTO:
GROUP y WHERE
28
Evaluacin:
29
EJEMPLO: Obtener el nombre de cada equipo y la edad
media de sus ciclistas con ms de 25 aos, de aquellos
equipos con ms de 3 corredores mayores de 25 aos.
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
El Lenguaje Estndar SQL
Operador lgebra SQL
Relacional
Seleccin R Donde F SELECT ... FROM R WHERE F
Producto R1 x R2, ... x Rn SELECT ... FROM R1, R2, ..., Rn, o
Cartesiano SELECT...FROM R1 CROSS JOIN
R2, ..., CROSS JOIN Rn
Concatenacin R1 R2 SELECT... FROM R1 NATURAL JOIN R2
32
UNION
expresin_tabla union [ALL] trmino_tabla
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
INTERSECT
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.
EXCEPT
SELECT cod_dep
FROM Departamento
EXCEPT
SELECT DISTINCT cod_dep
FROM Asignatura
35
Concatenacin de tablas
Concatenacin de tablas
Corresponden a variantes del operador concatenacin del
lgebra Relacional.
36
Producto Cartesiano
(CROSS JOIN)
SELECT * from referencia_tabla1,
referencia_tabla2
Concatenacin Interna
37
Ejemplo- Natural Join
SELECT PX.cod_pro, PX.nombre, COUNT(DX.cod_asg)
FROM Profesor PX, Docencia DX
WHERE PX.cod_pro = DX.cod_pro concatenacin de
Profesor y Docencia
GROUP BY cod_pro
Concatenacin JOIN...USING
SELECT [ALL | DISTINCT] A1, A2,..., An| *
FROM tabla1 JOIN tabla2 USING (C1, C2,..., Cn) (1)
[WHERE condicin] (2)
(3)
[GROUP BY B1, B2,..., Bm]
(4)
[HAVING condicin]
38
Concatenacin JOIN...ON
SELECT [ALL | DISTINCT] A1, A2,..., An| *
FROM tabla1 JOIN tabla2 ON condicin1 (1)
[WHERE condicin2] (2)
(3)
[GROUP BY B1, B2,..., Bm]
(4)
[HAVING condicin]
Es til cuando:
interesa concatenar tuplas de tabla1 y tabla2 por condiciones
distintas de la igualdad.
los atributos por los que se desea concatenar no tienen el mismo
nombre en ambas relaciones.
Forma ya conocida:
SELECT e.nomeq, e.director
FROM Equipo E, Ciclista C
WHERE E.nomeq=C.nomeq
Empleo del JOIN:
SELECT e.nomeq, e.director
FROM Equipo E JOIN Ciclista C ON E.nomeq=C.nomeq
39
Concatenacin Externa
referencia_tabla [natural]
{left [outer] |
right [outer] |
full [outer] } JOIN referencia_tabla
[on expresin_condicional | using
(comalista_columna) ]
40
Concatenacin Unin
41
EJERCICIO 33: Obtener nombre de todos los equipos
indicando cuantos ciclistas tiene cada uno
42