27
TUPAR- Bases de Datos I Cursada 2008 Clase 5: Sentencia SELECT Consultas complejas Facultad de Ciencias Exactas Universidad Nac. Centro de la Pcia. de Bs. As.

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

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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);