![Page 1: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/1.jpg)
TUPAR- Bases de Datos I
Cursada 2008
Clase 5: Sentencia SELECTConsultas complejas
Facultad de Ciencias ExactasUniversidad Nac. Centro de la Pcia. de Bs. As.
![Page 2: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/2.jpg)
Repaso
• La sentencia del lenguaje utilizada para la recuperación de datos a partir de la base de datos es la sentencia SELECT
2
SELECT columna, [funcion_grupo]FROM tabla[WHERE condición][GROUP BY expresion_de_agrupamiento][HAVING condición_grupo][ORDER BY columna];
![Page 3: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/3.jpg)
Consultas no VálidasUtilizando Funciones de Grupo
• No se puede utilizar la cláusula WHERE para restringir grupos.
• Utilice la cláusula HAVING para restringir grupos.• No se pueden utilizar funciones de grupo en la
cláusula WHERE.SELECT id_tarea, AVG(horas_aportadas)
3
• No se puede utilizar la cláusula WHERE para restringir grupos
SELECT id_tarea, AVG(horas_aportadas)FROM tvoluntarioWHERE AVG(horas_aportadas) > 8000GROUP BY id_tarea;
WHERE AVG(horas_aportadas) > 8000*
ERROR at line 3:ORA-00934: group function is not allowed here
![Page 4: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/4.jpg)
Exclusión de Resultados de Grupo: La Cláusula HAVING
Utilice la cláusula HAVING para restringir grupos:
1. Las filas se agrupan.
2. Se aplica la función de grupo.
3. Se muestran los grupos que coinciden con la
4
3. Se muestran los grupos que coinciden con la cláusula HAVING.
SELECT id_tarea, MAX(horas_aportadas)
FROM tvoluntario
GROUP BY id_tarea
HAVING MAX(horas_aportadas)>10000 ;
![Page 5: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/5.jpg)
Anidamiento de Funciones de Grupo
Visualice el salario medio máximo.
SELECT MAX(AVG(horas_aportadas))FROM tvoluntarioGROUP BY id_tarea;
5
![Page 6: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/6.jpg)
Consultas de una tabla
SELECT id_pais, nombre_pais,
id_continente
FROM TPAIS;
Listar los países Listar los continentes
SELECT id_continente,
nombre_continente
FROM TCONTINENTE;
6
![Page 7: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/7.jpg)
Consultas de más de una tabla
Listar los países del continente ‘Europeo’
7
![Page 8: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/8.jpg)
Consultas de más de una tabla
SELECT id_pais, nombre_pais
FROM TPAIS P, TCONTINENTE C
Listar los países del continente ‘Europeo’
tablaAlias de
tablatablaAlias de
tabla
8
WHERE P.id_continente = C.id_continente
AND nombre_continente = ‘Europeo’;
Prefijar con el nombre de la tabla!!!!! Sino error
ensambleCondicion de
ensamble
![Page 9: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/9.jpg)
Resultado
Listar los países del continente ‘Europeo’
SELECT id_pais, nombre_pais
FROM TPAIS P, TCONTINENTE C
WHERE P.id_continente = C.id_continente
AND nombre_continente = ‘Europeo’;
9
AND nombre_continente = ‘Europeo’;
![Page 10: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/10.jpg)
Uso de una Subconsultapara Resolver un Problema
¿Cuales son los países de continente Europeo?
¿Qué países tienen el identificador de
Consulta Principal:
10
continente igual al Europeo?
¿Cuál es el identificador del continente Europeo???
Subconsulta
??
![Page 11: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/11.jpg)
Otra opción: consulta anidada
SELECT id_pais, nombre_pais
FROM TPAIS
WHERE id_continente = (SELECT id_continente
Listar los países del continente ‘Europeo’
11
FROM TCONTINENTE
WHERE nombre_continente =
‘Europeo’);
SOLO la puedo utilizar si se que el resultado me devuelve una
SOLA FILA
![Page 12: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/12.jpg)
Otra opción: consulta anidada
SELECT id_pais, nombre_pais
FROM TPAIS
WHERE id_continente IN (SELECT id_continente
Listar los países del continente ‘Americano’
12
FROM TCONTINENTE
WHERE nombre_continente LIKE
‘%Americano’);
SUBCONSULTA
![Page 13: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/13.jpg)
Tipos de Subconsultas
Consulta principal
Subconsultadevuelve
• Subconsulta de una sola fila
13
• Subconsulta de varias filas
Consulta principal
Subconsultadevuelve
![Page 14: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/14.jpg)
Subconsultas de una Sola Fila
• Devuelven una sola fila
• Utilizan operadores de comparación de una sola fila
Operador
=
Significado
Igual que
14
=
>
>=
<
<=
<>
Igual que
Mayor que
Mayor o igual que
Menor que
Menor o igual que
No igual a
![Page 15: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/15.jpg)
SELECT nombre, id_tarea, horas_aportadasFROM tvoluntarioWHERE id_tarea =
(SELECT id_tareaFROM tvoluntarioWHERE id_voluntario = 141)
AND horas_aportadas >
Ejecución de Subconsultas de una Sola Fila
ST_CLERK
2600
15
AND horas_aportadas >(SELECT horas_aportadasFROM tvoluntarioWHERE id_voluntario = 143);
2600
![Page 16: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/16.jpg)
SELECT nombre, id_tarea, horas_aportadasFROM tvoluntarioWHERE horas_aportadas =
(SELECT MIN(horas_aportadas)FROM tvoluntario);
Uso de Funciones de Grupoen una Subconsulta
16
• Voluntarios que aportan la menor cantidad de horas.
![Page 17: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/17.jpg)
La Cláusula HAVING con Subconsultas
• Se ejecuta en primer lugar las subconsultas.• Devuelve resultados a la cláusula HAVING de la consulta
principal.
• Instituciones cuyo aporte mínimo en horas es mayor que el mínimo de la institución 40
17
SELECT id_institucion, MIN(horas_aportadas)FROM tvoluntarioGROUP BY id_institucionHAVING MIN(horas_aportadas) >
(SELECT MIN(horas_aportadas)FROM tvoluntarioWHERE id_institucion = 40);
6500
![Page 18: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/18.jpg)
Subconsultas de Varias Filas
• Devuelven más de una fila
• Utilizan operadores de comparación de varias filas
Operador
IN
Significado
Igual a cualquier miembro de la lista
18
IN
ANY
ALL
Igual a cualquier miembro de la lista
Compara el valor con cada valor devuelto
por la subconsulta
Compara el valor con todos los valores
devueltos por la subconsulta
![Page 19: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/19.jpg)
Uso del Operador ANYen Subconsultas de Varias Filas
9000, 6000, 4200
SELECT nro_voluntario, apellido, id_tarea, horas_aportadasFROM tvoluntarioWHERE horas_aportadas = ANY
(SELECT horas_aportadasFROM tvoluntarioWHERE id_tarea = 'IT_PROG')
19
WHERE id_tarea = 'IT_PROG')AND id_tarea <> 'IT_PROG';
• Voluntarios que aportan la misma cantidad de horas que CUALQUIERA de los que realizar la tarea IT_PROG
![Page 20: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/20.jpg)
Uso del Operador ALLen Subconsultas de Varias Filas
9000, 6000, 4200
SELECT nro_voluntario, apellido, id_tarea, horas_aportadasFROM tvoluntarioWHERE horas_aportadas > ALL
(SELECT horas_aportadasFROM tvoluntarioWHERE id_tarea = 'IT_PROG')
20
WHERE id_tarea = 'IT_PROG')AND id_tarea <> 'IT_PROG';
• Voluntarios que aportan mas horas que TODOS los que realizar la tarea IT_PROG
![Page 21: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/21.jpg)
Subconsulta de Comparación entre Pares
Visualice los detalles de los voluntarios coordinados por el mismo coordinador y que trabajen realicen la misma tarea que los voluntarios identificados con el nro 178 o 174.
SELECT nro_voluntario, id_coordinador, id_tarea
21
SELECT nro_voluntario, id_coordinador, id_tareaFROM tvoluntarioWHERE (id_coordinador, id_tarea) IN
(SELECT id_coordinador, id_tareaFROM tvoluntarioWHERE nro_voluntario IN (178,174))
AND nro_voluntario NOT IN (178,174);
![Page 22: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/22.jpg)
Subconsultas Correlacionadas
Las subconsultas correlacionadas se utilizan para el procesamiento fila a fila. Cada subconsulta se
ejecuta una vez para cada fila de la consulta externa.
OBTENERposible fila de consulta externa
22
posible fila de consulta externa
EJECUTARconsulta interna utilizando valor de posible fila
UTILIZARvalores de la consulta interna para cualificar
o descualificar posible fila
![Page 23: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/23.jpg)
Subconsultas Correlacionadas
SELECT columna1, columna2, ...FROM tabla1WHERE columna1 operador
(SELECT columa1, column2aFROM tabla2
externa
23
FROM tabla2WHERE expr1 =
.expr2);externa
• La subconsulta hace referencia a una columna de una tabla en la consulta principal
![Page 24: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/24.jpg)
SELECT apellido, horas_aportadas, id_institucionFROM tvoluntario externaWHERE horas_aportadas >
Uso de Subconsultas Correlacionadas
Busque todos los voluntarios que aportan mas horas que el promedio de horas de los voluntarios de la misma institucion.
(SELECT AVG(horas_aportadas)FROM tvoluntario
24
Cada vez que se procesa una fila de la consultaexterna, seevalúa la consultainterna.
FROM tvoluntarioWHERE id_institucion =
externa.id_institucion) ;
![Page 25: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/25.jpg)
Uso del Operador EXISTS
• El operador EXISTS comprueba la existencia de filas en el conjunto filas del resultado de la subconsulta.
• Si se encuentra un valor de fila de la subconsulta:
25
– La búsqueda no continúa en la consulta interna.– Se señaliza a la condición como TRUE.
• Si no se encuentra un valor de fila de la subconsulta:– Se señaliza a la condición como FALSE.
– La búsqueda continúa en la consulta interna.
![Page 26: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/26.jpg)
SELECT nro_voluntario, apellido, id_tareaFROM tvoluntario externaWHERE EXISTS ( SELECT 'X'
FROM tvoluntarioWHERE id_coordinador =
Uso del Operador EXISTS
Busque los voluntarios que coordinen al menos a una persona.
26
WHERE id_coordinador = externa.nro_voluntario);
![Page 27: TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia ...users.exa.unicen.edu.ar/catedras/tec-dbases/clases/c5-2008-1s.pdf · Repaso • La sentencia del lenguaje utilizada para](https://reader036.vdocuments.site/reader036/viewer/2022062506/5f02b5607e708231d4059d86/html5/thumbnails/27.jpg)
SELECT id_institucion, nombre_institucionFROM tinstitucion tWHERE NOT EXISTS (SELECT 'X'
FROM tvoluntarioWHERE id_institucion
Uso del Operador NOT EXISTS
Busque todos las instituciones que no tengan voluntarios.
27
WHERE id_institucion= t. id_institucion);