Академический Документы
Профессиональный Документы
Культура Документы
Ingeniera
Informtica
Prctica II
SQL: Lenguaje de
Consultas
Bases de
Datos
2016/17
Universidad de Huelva
Prctica II
SQL - Consultas
Objetivo
Saber utilizar, de forma eficiente, el lenguaje SQL para consultar bases de datos relacionales
Contenidos
1 El lenguaje SQL
1.1 Lenguaje de definicin de datos
1.2 Lenguaje de manipulacin de datos
2 Lenguaje de consulta
2.1 Consultas bsicas
2.2 Consultas a ms de una tabla
2.3 Consultas anidadas o subconsultas
2.4 La funcin EXISTS
2.5 Concatenacin externa
2.6 Funciones de agrupacin
2.7 La divisin en SQL
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
Duracin
5 clases
Bibliografa
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
1 El Lenguaje SQL
1.1 Lenguaje de Definicin de Datos
La documentacin sobre el Lenguaje de Definicin de Datos de SQL se encuentra en la seccin "Prctica I"
disponible en la pgina web de la asignatura.
Extraccin de datos
UPDATE: actualizar
DELETE: eliminar
INSERT: insertar
Instrucciones de Actualizacin
La parte del LMD relacionada con la extraccin de los datos se suele denominar lenguaje de consulta
La documentacin sobre las Instrucciones de Actualizacin de SQL se encuentra en la seccin "Prctica I"
disponible en la pgina web de la asignatura.
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
2 Lenguaje de Consulta
2.1 Consultas bsicas
Forma bsica de instruccin SELECT:
SELECT
FROM
WHERE
<lista de atributos>
<lista de tablas>
<condicin>
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
Suele ser habitual asignar alias a los nombres de las tablas y cualificar los atributos, sobre todo
cuando se realizan consultas a varias tablas, con objeto de eliminar la ambigedad y facilitar la
escritura. Esto se consigue anteponiendo el nombre de la tabla o el alias a los atributos y
separando los dos con un punto
Pueden renombrarse los nombres de los atributos en el resultado, escribiendo el nuevo nombre
justo detrs del atributo o bien utilizando la sentencia AS, en la clusula SELECT
Se puede omitir la clusula WHERE para indicar una seleccin de tuplas incondicional
Para obtener los valores de todos los atributos de las tuplas seleccionadas se utiliza el carcter
asterisco (*)
EI-2. Obtener toda la informacin disponible de todos los profesores
SQL trata las tablas como multiconjuntos no elimina las tuplas repetidas que se obtengan en
el resultado
Hay que indicrselo explcitamente mediante la clusula DISTINCT.
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
EI-6. Obtener el nombre de todos los alumnos cuyo nombre empiece por la letra M y hayan nacido en una
ciudad cuyo nombre tenga, al menos, 6 caracteres pero no comience por la letra P
2016-17
Bases de Datos
Universidad de Huelva
Prctica II
SQL - Consultas
TARIFA (tarifa,compaia,descripcion,coste)
CP: (tarifa,compaia)
CAj: compaia COMPAIA (cif)
VNN: coste
TELEFONO (numero,f_contrato,tipo,puntos,
compaa,tarifa,cliente)
CP: numero
CAj: (tarifa,compaa) TARIFA
CAj: compaa COMPAIA (cif)
CAj: cliente CLIENTE (dni)
nico: compaa, tarifa
VNN: compaa, tarifa,cliente
CLIENTE(dni,nombre,f_nac,direccion,cp,ciudad
provincia)
CP: dni
VNN: nombre
Este esquema est creado en la base de datos rabida y su propietario es el usuario mf. Todos vosotros tenis permiso de
lectura (SELECT) sobre las tablas del esquema. Puesto que el propietario es otro usuario, en las consultas debis anteponer el nombre
de las tablas al nombre del propietario.
Ejemplo: SELECT *
FROM mf.cliente
WHERE provincia = 'Huelva';
2016-17
Bases de Datos
Universidad de Huelva
10
Prctica II
SQL - Consultas
- Sesin 1 -
MF-1. Obtener el nombre de las compaas cuya direccin web contenga la cadena et y acabe en com
nombre
-----Kietostar
Petafn
MF-2. Obtener el nombre y direccin de los clientes nacidos en 1973 o 1985 y cuyo cdigo postal comience por
15, ordenado ascendentemente por el nombre y, en caso de igualdad, descendentemente por la direccin
nombre
-------------------------------Ricardo Reyes Neruda
Rita Martnez de Castro
2016-17
Bases de Datos
direccion
-------------------------------Carretera de Isla Negra Km. 20
C/ Sar n 84
Universidad de Huelva
11
Prctica II
SQL - Consultas
- Sesin 1 -
MF-3. Obtener el telfono de destino de las llamadas realizadas desde el nmero 666010101, en el ao 2006
tf_destino
---------666789789
666456456
654234234
MF-4. Obtener los nmeros de telfono que han llamado alguna vez al 666010101, entre las 10:00 y las 12:00
tf_origen
--------666789789
654012012
2016-17
Bases de Datos
Universidad de Huelva
12
Prctica II
SQL - Consultas
EI-8. Obtener los nombres de las asignaturas junto con el nombre del profesor responsable
Se puede obtener el mismo resultado utilizando la clusula INNER JOIN (introducido en SQL2) e
indicando explcitamente la condicin de relacin entre las tablas
2016-17
Bases de Datos
Universidad de Huelva
13
Prctica II
SQL - Consultas
Si coincide el nombre del atributo en ambas tablas, se puede utilizar la clusula USING,
indicando el atributo de combinacin
La clusula NATURAL JOIN se utiliza para combinar tablas segn todos los atributos cuyos
nombre coincidan en ambas tablas
EI-9. Obtener los nmeros de los alumnos que se han matriculado en Bases de Datos I en el curso 2002-03
EI-10. Obtener los nombres de los alumnos que han aprobado la asignatura Algoritmos y Estructuras de
Datos I en la convocatoria de febrero_junio de 2001
2016-17
Bases de Datos
Universidad de Huelva
14
Prctica II
SQL - Consultas
EI-11. Obtener un listado con el nmero de despacho, pero slo de aquellos donde hay al menos 2
profesores
2016-17
Bases de Datos
Universidad de Huelva
15
Prctica II
SQL - Consultas
EI-12. Obtener una lista con todas las asignaturas de las que es responsable o docente la profesora
Dolores Toscano Barriga
2016-17
Bases de Datos
Universidad de Huelva
16
Prctica II
SQL - Consultas
Para preguntar por atributos con valores nulos, SQL utiliza las clusulas IS NULL (es nulo) e IS
NOT NULL (no es nulo) en lugar de usar los operadores = y
EI-13. Obtener los nombres de los alumnos que no se han presentado a Bases de Datos I en diciembre
de 2002 por haberla aprobado en una convocatoria anterior del mismo ao
2016-17
Bases de Datos
Universidad de Huelva
17
Prctica II
SQL - Consultas
- Sesin 2 -
MF-5. Mostrar el cdigo y coste de las tarifas junto con el nombre de la compaa que las ofrecen, de aquellas
tarifas cuya descripcin indique que otras personas deben estar tambin en la misma compaa
TARIFA
COSTE
---------- ---------do
0,2
familiar
0,15
do
0,15
empresa
0,19
NOMBRE
--------Kietostar
Kietostar
Aotra
Petafn
MF-6. Nombre y nmero de telfonos de aquellos abonados con contrato que tienen tarifas inferiores a 0,20 .
NUMERO
--------654789789
678234234
666456456
2016-17
NOMBRE
-----Jos Garca Mrquez
Rita Martnez de Castro
Juan Jimnez Platero
Bases de Datos
Universidad de Huelva
18
Prctica II
SQL - Consultas
- Sesin 2 -
MF-7. Obtener el cdigo de las tarifas, el nombre de las compaas, los nmeros de telfono y los puntos, de
aquellos telfonos que se contrataron en el ao 2006 y que hayan obtenido ms de 200 puntos.
TARIFA
---------familiar
joven
autnomos
NOMBRE
-------------------Kietostar
Kietostar
Aotra
NUMERO
PUNTOS
--------- ---------654789789
24590
654234234
250
678234234
15700
MF-8. Obtener los nmeros de telfono (origen y destino), as como el tipo de contrato, de los clientes que
alguna vez hablaron por telfono entre las 8 y las 10 de la maana
ORIGEN
--------678234234
654123321
2016-17
T
C
C
DESTINO
--------666010101
654345345
Bases de Datos
T
T
C
Universidad de Huelva
19
Prctica II
SQL - Consultas
- Sesin 2 -
MF-9. Interesa conocer los nombres y nmeros de telfono de los clientes (origen y destino) que, perteneciendo
a compaas distintas, mantuvieron llamadas que superaron los 15 minutos. Se desea conocer, tambin, la
fecha y la hora de dichas llamadas as como la duracin de esas llamadas
Cliente origen
----------------------Rita Martnez de Castro
Jos Garca Mrquez
2016-17
Bases de Datos
TF_ORIGEN
--------678234234
654789789
Cliente destino
--------------------Ramn Martnez Sabina
Ricardo Reyes Neruda
TF_DESTIN
--------654123321
678111222
FECHA_HORA
DURACION
----------------- -------01/10/06 13:12:11
2045
08/10/06 10:55:15
1345
Universidad de Huelva
20
Prctica II
SQL - Consultas
2016-17
Bases de Datos
Universidad de Huelva
21
Prctica II
SQL - Consultas
EI-15. Obtener una lista con los alumnos matriculados en BDII y no en BDI
Operador (=ANY): devuelve verdadero si el valor que se est comparando es igual a algn valor
del conjunto (equivalente a IN)
El operador = se puede sustituir por cualquier otro operador de comparacin (>, >=, <, <=, <>)
2016-17
Bases de Datos
Universidad de Huelva
22
Prctica II
SQL - Consultas
EI-16. Obtener una lista de los profesores que tienen ms antigedad que alguno de los profesores del
despacho FC-7366 (sin contar los del propio despacho FC-7366)
Operador (= ALL): devuelve verdadero si el valor que se est comparando es igual a todos los
valores devueltos por la subconsulta
El operador = se puede sustituir por cualquier otro operador de comparacin (>, >=, <, <=, <>)
2016-17
Bases de Datos
Universidad de Huelva
23
Prctica II
SQL - Consultas
EI-17. Obtener una lista con los nombres de los alumnos que hayan sacado una nota ms alta en
septiembre que la ms alta de las notas de febrero/junio, en el ao 2002 y en la asignatura Bases de
Datos I
2016-17
Bases de Datos
Universidad de Huelva
24
Prctica II
SQL - Consultas
- Sesin 3 -
Fecha
---------01/10/2006
MF-11. Obtener el nombre de los abonados de la compaa Aotra con el mismo tipo de tarifa que la del telefono
654123321
nombre
-------------------------------Ricardo Reyes Neruda
2016-17
Bases de Datos
Universidad de Huelva
25
Prctica II
SQL - Consultas
- Sesin 3 -
MF-12. Mostrar, utilizando para ello una subcobsulta, el nmero de telfono, fecha de contrato y tipo de los
abonados que han llamado a telfonos de clientes de fuera de la provincia de La Corua durante el mes de
octubre de 2006.
NUMERO
--------654345345
654789789
666010101
678111222
678234234
2016-17
Bases de Datos
F_CONTRA
-------10/09/06
30/05/06
09/10/05
02/02/02
30/08/06
T
C
C
T
T
C
Universidad de Huelva
26
Prctica II
SQL - Consultas
- Sesin 3 -
MF-13. Se necesita conocer el nombre de los clientes que tienen telfonos con tarifa do pero no autnomos.
Utiliza subconsultas para obtener la solucin.
NOMBRE
---------------------------------------Ramn Martnez Sabina
Ricardo Reyes Neruda
2016-17
Bases de Datos
Universidad de Huelva
27
Prctica II
SQL - Consultas
- Sesin 3 -
MF-14. Obtener mediante subconsultas los nombres de clientes y nmeros de telfono de aquellos que hicieron
llamadas a telfonos de la compaa Petafn pero no Aotra
NOMBRE
-------------------------------------------------Ramn Martnez Sabina
Mara Machado Ruiz
Rita Martnez de Castro
2016-17
Bases de Datos
NUMERO
--------666010101
666789789
678234234
Universidad de Huelva
28
Prctica II
SQL - Consultas
- Sesin 3 -
MF-15. Nombre de los clientes de la compaa Kietostar que hicieron las llamadas de mayor duracin en
septiembre de 2006
NOMBRE
----------------------------------Ramn Martnez Sabina
MF-16. Se necesita conocer el nombre de los clientes que tienen telfonos con fecha de contratacin anterior a
alguno de los telfonos de Ramn Martnez Sabina, excluido, claro, el propio Ramn Martnez Sabina.
NOMBRE
-------------------------------------------------Ricardo Reyes Neruda
Mara Machado Ruiz
Jess Ros Lorca
Juan Jimnez Platero
2016-17
Bases de Datos
Universidad de Huelva
29
Prctica II
SQL - Consultas
La funcin EXISTS
Cuando una consulta anidada o subconsulta puede existir por s sola se dice que es una
subconsulta independiente
Subconsultas correlacionadas: subconsultas cuyos valores de ejecucin dependen de la tupla
que est siendo examinada en la consulta exterior
La consulta anidada se evala una sola vez para cada tupla de la consulta externa
La funcin EXISTS se utiliza para comprobar si el resultado de una consulta correlacionada est
o no vaco (contiene o no tuplas)
Devuelve Verdad si la consulta anidada contiene alguna tupla, y
Falso en caso contrario
2016-17
Bases de Datos
Universidad de Huelva
30
Prctica II
SQL - Consultas
Funcionamiento:
Por cada tupla de la consulta externa (en este caso por cada profesor), se evala la consulta
interna con dicha tupla
En la consulta anidada se seleccionan las tuplas de la tabla ASIGNATURA que cumplen la
condicin de la clusula WHERE del profesor que se est evaluando
Si el resultado de la consulta correlacionada no devuelve ninguna tupla, entonces se
selecciona el profesor
EI-19. Listado de los alumnos que se han matriculado de alguna asignatura en el ao 2000 o 2002, y de
ninguna asignatura en el ao 2001
2016-17
Bases de Datos
Universidad de Huelva
31
Prctica II
SQL - Consultas
Aunque en la mayora de las ocasiones las consultas correlacionadas van asociadas a las
clusulas EXISTS y NOT EXISTS, stas se pueden utilizar para resolver otros tipos de consultas
EI-20. Obtener el nombre de los profesores y los nmeros de sus despachos de aquellos profesores que no
comparten despacho
2016-17
Bases de Datos
Universidad de Huelva
32
Prctica II
SQL - Consultas
- Sesin 4 -
MF-17. Utilizando consultas correlacionadas, mostrar el nombre de los abonados que han llamado el da 16/10/06
NOMBRE
-------------------------Ramn Martnez Sabina
Rita Martnez de Castro
MF-18. Utilizando consultas correlacionadas, obtener el nombre de los abonados que han realizado llamadas de
menos de 1 minuto y medio
NOMBRE
----------------------------Ramn Martnez Sabina
Jos Garca Mrquez
Mara Machado Ruiz
Rita Martnez de Castro
2016-17
Bases de Datos
Universidad de Huelva
33
Prctica II
SQL - Consultas
- Sesin 4 -
MF-19. Utilizando consultas correlacionadas, obtener el nombre de los abonados de la compaa KietoStar que
no hicieron ninguna llamada el mes de septiembre
NUMERO
------------654789789
654234234
654345345
NOMBRE
-----------------------Jos Garca Mrquez
Antonio Hierro Santander
Rita Martnez de Castro
MF-20. Utilizando consultas correlacionadas, mostrar todos los datos de los telefonos que hayan llamado al
nmero 654234234 pero no al 666789789
NUMERO
--------678111222
654345345
2016-17
F_CONTRA
-------02/02/02
10/09/06
T
PUNTOS COMPAIA TARIFA
- ---------- --------- ---------T
1010 B00000002 do
C
170 A00000001 do
Bases de Datos
CLIENTE
--------59000003T
89000002Z
Universidad de Huelva
34
Prctica II
SQL - Consultas
- Sesin 4 -
MF-21. Utilizando consultas correlacionadas, obtener el nombre y nmero de telfono de los clientes de la
compaa Kietostar que no han hecho llamadas a otros telfonos de la misma compaa
NOMBRE
-------------------------------------------------Antonio Hierro Santander
Jess Ros Lorca
2016-17
Bases de Datos
NUMERO
--------654234234
654012012
Universidad de Huelva
35
Prctica II
SQL - Consultas
Concatenacin externa
SQL, al igual que el lgebra relacional, permite la agrupacin de tablas incluso si los campos de
unin no son coincidentes o uno de sus valores es nulo (concatenacin externa)
EI-21. Obtener los nombres de todos los profesores junto con las asignaturas de las que son responsables
Funciones de agrupacin
Funciones ms habituales:
2016-17
Universidad de Huelva
36
Prctica II
SQL - Consultas
Se puede utilizar la funcin COUNT para contar los valores (no nulos) de una columna en vez de
las tuplas. Necesitaremos utilizar la clusula DISTINCT para eliminar los duplicados
EI-22. Se desea saber cuntos despachos ocupan los profesores de la escuela
EI-23. Obtener el nmero de matriculados, la nota mxima, la mnima y la nota media de la asignatura
Bases de Datos I en la convocatoria de septiembre de 2002
Algunas veces resulta necesario utilizar estas funciones para seleccionar tuplas que cumplen
alguna condicin
En este caso, se especifica una consulta anidada (correlacionada) con la funcin deseada y se
usar dicha consulta en la clusula WHERE de una consulta exterior
2016-17
Bases de Datos
Universidad de Huelva
37
Prctica II
SQL - Consultas
EI-24. Obtener, mediante una consulta correlacionada, los nombres de las asignaturas que tienen
recomendadas 2 o ms asignaturas.
EI-25. Obtener, mediante una consulta correlacionada, los nombres de los profesores que tienen ms
antigedad que, al menos, otros cinco profesores.
Suele ser habitual aplicar estas funciones integradas a subgrupos de tuplas de una relacin,
agrupadas por uno o varios atributos
La clusula que realiza la agrupacin segn unos determinados atributos es GROUP BY (agrupar
por)
En la clusula SELECT es correcto que se especifiquen los atributos de agrupacin (que
aparezcan en la clusula GROUP BY) as como funciones de agrupacin, pero no atributos cuyos
valores puedan variar para un mismo grupo
2016-17
Bases de Datos
Universidad de Huelva
38
Prctica II
SQL - Consultas
EI-26. Para cada asignatura y ao acadmico, mostrar el nombre de la asignatura, el ao, el nmero de
alumnos que se han presentado y la nota media obtenida en la convocatoria de febrero_junio
A veces ocurre que solamente queremos utilizar estas funciones con aquellos grupos de tuplas
que satisfagan ciertas condiciones
SQL proporciona la clusula HAVING (que tiene), la cual aparece junto con la clusula GROUP
BY
HAVING especifica una condicin, y slo aquellos grupos que satisfagan dicha condicin,
entrarn en el resultado de la consulta
EI-27. Obtener un listado con el nombre del alumno, el nombre de la asignatura y el nmero de veces que
se ha matriculado en esa asignatura, pero slo cuando se haya matriculado 3 o ms aos
2016-17
Bases de Datos
Universidad de Huelva
39
Prctica II
SQL - Consultas
EI-28. Nombre de los alumnos que hayan sacado ms de un 5 de nota media en junio del 2002
EI-29. Nombre de las asignaturas y nmero de alumnos matriculados de las asignaturas donde se hayan
matriculado ms alumnos en el ao 2002
Hay que tener un especial cuidado cuando queremos restringir tuplas mediante las clusulas
WHERE y HAVING
2016-17
Bases de Datos
Universidad de Huelva
40
Prctica II
SQL - Consultas
EI- 30. Obtener el nmero total de alumnos que han suspendido en cada asignatura en junio de 2002,
pero slo de aquellas asignaturas en las que se hayan matriculado ms de 50 alumnos
Primera tentativa:
2016-17
Bases de Datos
Universidad de Huelva
41
Prctica II
SQL - Consultas
2016-17
Bases de Datos
Universidad de Huelva
42
Prctica II
SQL - Consultas
- Sesin 5 -
NOMBRE
-------------------Kietostar
MF-23. Obtener los nmeros de telfono y los nombres de los abonados que han llamado a todos los nmeros a
los que se llam desde el 654345345 en octubre de 2006
NUMERO
NOMBRE
--------- ---------------------------678234234 Rita Martnez de Castro
2016-17
Bases de Datos
Universidad de Huelva
43
Prctica II
SQL - Consultas
- Sesin 5 -
MF-24. Mostrar el nombre de cada cliente junto con coste total de las llamadas que realiza con cada compaia.
El resultado debe mostrarse ordenado descendentemente por cliente y ascendentemente por compaia
CLIENTE
COMPAIA
COSTETOTAL
--------------------------------------- -------------------- ----------Rita Martnez de Castro
Aotra
11,964
Rita Martnez de Castro
Kietostar
4,11333333
Ricardo Reyes Neruda
Aotra
4,0225
Ramn Martnez Sabina
Kietostar
10,18
Ramn Martnez Sabina
Petafn
2,43516667
Mara Machado Ruiz
Petafn
2,14283333
Jos Garca Mrquez
Kietostar
4,625
Jess Ros Lorca
Kietostar
3,775
MF-25. Para cada cliente residente en la provincia de 'La Corua', mostrar la duracin de todas las llamadas
realizadas a clientes residentes en 'Jan'
CLIENTE
DURACION
--------------------------------------- ---------Rita Martnez de Castro
2753
2016-17
Bases de Datos
Universidad de Huelva
44
Prctica II
SQL - Consultas
- Sesin 5 -
MF-27. Mostrar el nombre de aquellos clientes que hayan contratado con cualquier compaa, de media, una
tarifa superior a la tarifa media total.
CLIENTE
----------------------------------Antonio Hierro Santander
Jess Ros Lorca
Mara Machado Ruiz
Ramn Martnez Sabina
MEDIA
---------,25
,25
,23
,195
MF-28. Mostrar los nombres de los clientes que hayan realizado llamadas a telefonos de la compaia 'Kietostar'
por un coste menor de 100
CLIENTE
-----------------------------Jos Garca Mrquez
Ramn Martnez Sabina
Ricardo Reyes Neruda
Rita Martnez de Castro
2016-17
Bases de Datos
Universidad de Huelva
45