Top Banner
Copyright © 2007, Oracle. All rights reserved. Subconsultas
24

07 - Subconsultas

Nov 28, 2014

Download

Documents

calmosca
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.

Subconsultas

Page 2: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 2

Objetivos

Después de completar esta lección, usted debería ser capaz

de hacer lo siguiente:

• Definir subconsultas.

• Describir los tipos de problemas que las subconsultas

pueden resolver.

• Enumerar los tipos de subconsultas.

• Escribir subconsultas de una sola fila o de múltiples files.

Page 3: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 3

Agenda

• Subconsultas: Tipos, la sintaxis, y las directrices.

• Subconsulta de una fila:

– Funciones de grupo en una subconsulta.

– Cláusula HAVING con subconsultas.

• Subconsulta de varias de filas.

– Uso de los operadores ALL, ANY o IN.

• Valor Null en una subconsulta.

Page 4: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 4

Uso de subconsultas para resolver un problema

¿Quién cobra más que Abel?

¿Qué empleados tiene el salario más alto que el

salario de Abel?

Consulta principal:

Cuál es el salario de Abel?

Subconsulta:

Page 5: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 5

Sintaxis de subconsulta

• La subconsulta (consulta interna) se ejecuta antes de la

consulta principal (consulta externa).

• El resultado de la subconsulta es utilizado por la consulta

principal.

SELECT select_list

FROM table

WHERE expr operator

(SELECT select_list

FROM table);

Page 6: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 6

SELECT last_name, salary

FROM employees

WHERE salary >

(SELECT salary

FROM employees

WHERE last_name = 'Abel');

Uso de una subconsulta

11000

Page 7: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 7

Instrucciones para el uso de subconsultas

• Las subconsultas deben ir entre paréntesis.

• Las subconsultas aparecen a la derecha del operador por

legibilidad (Sin embargo, la subconsula puede aparecer en

cualquier lado del operador).

• Utilice operadores de una fila para subconsulta de una fila y

operadores de múltiples filas para subconsultas que

devuelven más de una fila.

Page 8: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 8

Tipos de subconsultas

• Subconsultas de fila

• Subconsultas de un grupo de filas

Main query

Subquerydevuelve

ST_CLERK

ST_CLERK

SA_MAN

Main query

Subquerydevuelve

Page 9: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 9

Agenda

• Subconsultas: Tipos, la sintaxis, y las directrices.

• Subconsulta de una fila:

– Funciones de grupo en una subconsulta.

– Cláusula HAVING con subconsultas.

• Subconsulta de varias de filas.

– Uso de los operadores ALL, ANY o IN.

• Valor Null en una subconsulta.

Page 10: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 10

Subconsulta de una sola fila

• Devuelve sólo una fila.

• Utilice operadores de una sola fila

Mayor o igual que>=

Menor que<

Menor o igual que<=

Igual a=

Diferente a<>

Mayor que>

SignificadoOperador

Page 11: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 11

SELECT last_name, job_id, salary

FROM employees

WHERE job_id =

(SELECT job_id

FROM employees

WHERE last_name = ‘Taylor’)

AND salary >

(SELECT salary

FROM employees

WHERE last_name = ‘Taylor’);

Ejecución de subconsultas de una sola fila

SA_REP

8600

Page 12: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 12

SELECT last_name, job_id, salary

FROM employees

WHERE salary =

(SELECT MIN(salary)

FROM employees);

Utilizar funciones de una subconsulta

2500

Page 13: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 13

SELECT department_id, MIN(salary)

FROM employees

GROUP BY department_id

HAVING MIN(salary) >

(SELECT MIN(salary)

FROM employees

WHERE department_id = 50);

La cláusula HAVING con subconsultas

• El servidor Oracle ejecuta la subconsulta primera.

• El servidor Oracle devuelve los resultados en la cláusula HAVING de la consulta principal.

2500

Page 14: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 14

SELECT employee_id, last_name

FROM employees

WHERE salary =

(SELECT MIN(salary)

FROM employees

GROUP BY department_id);

¿Qué está mal en esta sentencia?

Single-row operator

with multiple-row

subquery

Page 15: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 15

SELECT last_name, job_id

FROM employees

WHERE job_id =

(SELECT job_id

FROM employees

WHERE last_name = 'Haas');

No devuelve filas para la consulta interna

La subconsulta no devuelve filas porque no hay

ningún empleado llamado “Haas”.

Page 16: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 16

Agenda

• Subconsultas: Tipos, la sintaxis, y las directrices.

• Subconsulta de una fila:

– Funciones de grupo en una subconsulta.

– Cláusula HAVING con subconsultas.

• Subconsulta de varias de filas.

– Uso de los operadores ALL, ANY o IN.

• Valor Null en una subconsulta.

Page 17: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 17

Subconsultas de varias filas

• Devuelve más de una fila.

• Utiliza operadores de multiples filas

Debe ir precedido de =, !=, >, <, <=, >=.

Compara un valor a cada valor en una lista o

devuelto por una consulta. Devuelve TRUE si la

consulta no devuelve ninguna fila.

ALL

Igual a algún elemento de la listaIN

Debe ir precedido de =, !=, >, <, <=, >=.

Compara un valor a cada valor en una lista o

devuelto por una consulta. Se evalúa como

FALSE si la consulta no devuelve ninguna fila.

ANY

SignificadoOperador

Page 18: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 18

SELECT employee_id, last_name, job_id, salary

FROM employees

WHERE salary < ANY

(SELECT salary

FROM employees

WHERE job_id = 'IT_PROG')

AND job_id <> 'IT_PROG';

Uso del operador ANY

en subconsultas de más de una fila

9000, 6000, 4200

Page 19: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 19

SELECT employee_id, last_name, job_id, salary

FROM employees

WHERE salary < ALL

(SELECT salary

FROM employees

WHERE job_id = 'IT_PROG')

AND job_id <> 'IT_PROG';

Uso del operador ALL

en subconsultas de más de una fila

9000, 6000, 4200

Page 20: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 20

Agenda

• Subconsultas: Tipos, la sintaxis, y las directrices.

• Subconsulta de una fila:

– Funciones de grupo en una subconsulta.

– Cláusula HAVING con subconsultas.

• Subconsulta de varias de filas.

– Uso de los operadores ALL, ANY o IN.

• Valor Null en una subconsulta.

Page 21: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 21

SELECT emp.last_name

FROM employees emp

WHERE emp.employee_id NOT IN

(SELECT mgr.manager_id

FROM employees mgr);

Valores null en una subconsulta

Page 22: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 22

SELECT last_name FROM employees

WHERE employee_id NOT IN

(SELECT manager_id

FROM employees

WHERE manager_id IS NOT NULL);

Valores null en una subconsulta

Page 23: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 23

SELECT select_list

FROM table

WHERE expr operator

(SELECT select_list

FROM table);

Resumen

En esta lección, usted debe haber aprendido a:

• Identificar cuando una subconsulta puede ayudar a resolver

un problema.

• Escribir subconsultas cuando una consulta está basada en

valores desconocidos.

Page 24: 07 - Subconsultas

Copyright © 2007, Oracle. All rights reserved.7 - 24

Práctica 7: Información general

Esta práctica abarca los siguientes temas:

• Crear subconsultas para consultar valores.

• Usar subconsultas para encontrar valores que existen en un

conjunto de datos y no en otro.