Your SlideShare is downloading. ×
PostgreSQL - Lección 6 - Subconsultas
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PostgreSQL - Lección 6 - Subconsultas

9,472

Published on

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,472
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
586
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Autor: Nicola Strappazzon C. e-mail: nicola51980@gmail.com 6 Blog: http://www.swapbytes.com/ Revisión: 17/11/11 Lección SubconsultasEste material se encuentra basado en el curso de Fundamentos a SQL de ORACLE, el cual es adaptado parael producto PostgreSQL, todos los ejemplos, códigos fuentes y la Base de Datos HR es propiedad de ORACLE.
  • 2. Objetivos Al completar esta lección usted podrá entender los siguientes puntos: • Definir que son Subconsultas. • Describir los diferentes tipos de problemas que se pueden presentar para resolverlos con subconsultas. • Listar los tipos de subconsultas. • Escribir subconsultas.L6 -L -- 2 L
  • 3. ¿Cuando usar Subconsultas? ¿Quien tiene el salario mas alto que Abel’s? Consulta Principal ¿Que empleado tiene el salario mas alto que Abel’s? Subconsulta ¿Cual es el salario de Abel’s?L6 -L -- 3 L
  • 4. ¿Que es una Subconulta? Es una consulta que utiliza únicamente la sentencia SELECT la cual se encuentra embebida dentro de la consulta principal. • Para extraer un grupo de datos en específicos, los cuales dependen de una consulta principal. • Se puede utilizar en cualquier parte de una consulta. Consulta Principal SubconsultaL6 -L -- 4 L
  • 5. Sintaxis Básica • Primero se ejecuta la Subconsulta y luego la consulta principal. • La Subconsulta arroja un resultado, el cual será utilizado para la consulta principal. SELECT column FROM from_item WHERE condition (SELECT column FROM from_item WHERE condition);L6 -L -- 5 L
  • 6. Usando la Subconsulta SELECT last_name FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name ILIKE Abel); last_name ----------- salary Russell -------- Partners 11000 Errazuriz (1 row) Ozer Kochhar De Haan Greenberg Hartstein Higgins King (10 rows)L6 -L -- 6 L
  • 7. Consideraciones para usar Subconsultas • Encerrar la Subconsulta dentro de los paréntesis. • Escriba la Subconsulta del lado derecho de la condición. • No usar la cláusula ORDER BY dentro de la Subconsulta, esta no será necesario y compromete el rendimiento de la misma. • Utilice los operadores adecuados para las Subconsultas que arrojan uno o múltiples registro.L6 -L -- 7 L
  • 8. Tipos de Subconsultas • Por un solo registro: Consulta Principal Subconsulta Retorna ST_CLERK • Por múltiples registros: Consulta Principal Subconsulta Retorna ST_CLERK SA_MANL6 -L -- 8 L
  • 9. Por un solo registro • Retorna un solo valor. • Se utilizan los siguientes operadores de comparación: Operador Significado = Igual > Mayor que < Menor que >= Mayor e igual que <= Menor e igual que <> DiferenteL6 -L -- 9 L
  • 10. ¿Cómo retornar un solo valor? SELECT last_name, job_id, salary FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141) AND salary > (SELECT salary FROM employees WHERE employee_id = 143); last_name | job_id | salary job_id -------------+----------+-------- ---------- Nayer | ST_CLERK | 3200 ST_CLERK Mikkilineni | ST_CLERK | 2700 (1 row) Bissot | ST_CLERK | 3300 Atkinson | ST_CLERK | 2800 salary Mallin | ST_CLERK | 3300 -------- Rogers | ST_CLERK | 2900 2600 ▪ ▪ ▪ (1 row) (11 rows)L6 -L -- 10 L
  • 11. Usando las funciones de grupo SELECT last_name, job_id, salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees); last_name | job_id | salary min -----------+----------+-------- ------ Olson | ST_CLERK | 2100 2100 (1 row) (1 row)L6 -L -- 11 L
  • 12. Usando la cláusula HAVING SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50); department_id | min min ---------------+------- ------ | 7000 2100 30 | 2500 (1 row) 110 | 8300 60 | 4200 90 | 17000 10 | 4400 40 | 6500 70 | 10000 ▪ ▪ ▪ (11 rows)L6 -L -- 12 L
  • 13. Errores que se cometen, ejemplo #1 SELECT employee_id, last_name FROM employees WHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id); ERROR: more than one row returned by a min subquery used as an expression ------- 7000 2500 8300 4200 17000 4400 6500 10000 ▪ ▪ ▪ (12 rows)L6 -L -- 13 L
  • 14. Errores que se cometen, ejemplo #2 SELECT last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE last_name = Haas); last_name | job_id job_id -----------+-------- -------- (0 rows) (0 rows)L6 -L -- 14 L
  • 15. Múltiples registros • Se retorna mas de un registro. • Se utilizan operadores de comparación para múltiples registros. • Se puede utilizar el operador NOT en cualquiera de los siguientes operadores de comparación. Operador Significado IN Compara si uno o mas de los elementos retornados por la subconsulta coinciden con los de la lista de la consulta principal. ANY Compara el valor de la consulta por cualquiera de los valores que son retornados por la subconsulta. ALL Compara el valor de la consulta con todos los valores que retorna la subconsulta.L6 -L -- 15 L
  • 16. Usando el operador ANY 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; employee_id | last_name | job_id | salary salary -------------+-------------+------------+-------- -------- 153 | Olsen | SA_REP | 8000 9000 154 | Cambrault | SA_REP | 7500 6000 155 | Tuvault | SA_REP | 7000 4800 159 | Smith | SA_REP | 8000 4800 160 | Doran | SA_REP | 7500 4200 161 | Sewall | SA_REP | 7000 (5 rows) 164 | Marvins | SA_REP | 7200 165 | Lee | SA_REP | 6800 166 | Ande | SA_REP | 6400 ▪ ▪ ▪ (76 rows)L6 -L -- 16 L
  • 17. Usando el operador ALL 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; employee_id | last_name | job_id | salary salary -------------+-------------+----------+-------- -------- 115 | Khoo | PU_CLERK | 3100 9000 116 | Baida | PU_CLERK | 2900 6000 117 | Tobias | PU_CLERK | 2800 4800 118 | Himuro | PU_CLERK | 2600 4800 119 | Colmenares | PU_CLERK | 2500 4200 125 | Nayer | ST_CLERK | 3200 (5 rows) 126 | Mikkilineni | ST_CLERK | 2700 127 | Landry | ST_CLERK | 2400 128 | Markle | ST_CLERK | 2200 ▪ ▪ ▪ (44 rows)L6 -L -- 17 L
  • 18. Valores NULL en las Subconsultas SELECT emp.last_name FROM employees emp WHERE emp.employee_id NOT IN(SELECT mgr.manager_id FROM employees mgr); last_name manager_id ----------- ------------ (0 rows) 100 100 100 100 100 145 145 145 145 ▪ ▪ ▪ (1 row)L6 -L -- 18 L
  • 19. Resumen En esta lección, usted debió entender como: • Identificar cuando se necesita resolver un determinado problema utilizando la Subconsulta. • Escribir Subconsultas dentro de una consulta base cuando se desconocen ciertos valores.L6 -L -- 19 L

×