SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
Autor: Nicola Strappazzon C.
                 e-mail: nicola51980@gmail.com




                                                                         6
                 Blog: http://www.swapbytes.com/
                 Revisión: 17/11/11




 Lección
                      Subconsultas

Este material se encuentra basado en el curso de Fundamentos a SQL de ORACLE, el cual es adaptado para
el producto PostgreSQL, todos los ejemplos, códigos fuentes y la Base de Datos HR es propiedad de ORACLE.
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
¿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
¿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

                                                Subconsulta




L6 -L -- 4
     L
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
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
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
Tipos de Subconsultas

    • Por un solo registro:
                Consulta Principal
                      Subconsulta    Retorna
                                               ST_CLERK



    • Por múltiples registros:
                Consulta Principal
                      Subconsulta    Retorna   ST_CLERK
                                               SA_MAN




L6 -L -- 8
     L
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
               <>       Diferente




L6 -L -- 9
     L
¿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
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
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
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
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
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
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
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
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
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

Contenu connexe

Tendances (20)

Trigger in mysql
Trigger in mysqlTrigger in mysql
Trigger in mysql
 
Complex queries in sql
Complex queries in sqlComplex queries in sql
Complex queries in sql
 
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
 
Vistas en SQL
Vistas en SQLVistas en SQL
Vistas en SQL
 
8.ejercicios SQL access
8.ejercicios SQL access8.ejercicios SQL access
8.ejercicios SQL access
 
Ejercicios uml
Ejercicios umlEjercicios uml
Ejercicios uml
 
Modelo Entidad - Relacion
Modelo Entidad - RelacionModelo Entidad - Relacion
Modelo Entidad - Relacion
 
SQL BASIC QUERIES SOLUTION ~hmftj
SQL BASIC QUERIES SOLUTION ~hmftjSQL BASIC QUERIES SOLUTION ~hmftj
SQL BASIC QUERIES SOLUTION ~hmftj
 
Sql Queries
Sql QueriesSql Queries
Sql Queries
 
SQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question BankSQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question Bank
 
All questions
All questionsAll questions
All questions
 
Conceptos basicos(base de datos)
Conceptos basicos(base de datos)Conceptos basicos(base de datos)
Conceptos basicos(base de datos)
 
Packages in PL/SQL
Packages in PL/SQLPackages in PL/SQL
Packages in PL/SQL
 
Aggregate functions in SQL.pptx
Aggregate functions in SQL.pptxAggregate functions in SQL.pptx
Aggregate functions in SQL.pptx
 
PL/SQL TRIGGERS
PL/SQL TRIGGERSPL/SQL TRIGGERS
PL/SQL TRIGGERS
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Manual sql server parte 1
Manual sql server parte 1Manual sql server parte 1
Manual sql server parte 1
 
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
 
Basic sql Commands
Basic sql CommandsBasic sql Commands
Basic sql Commands
 
Ejercicio bancoss
Ejercicio bancossEjercicio bancoss
Ejercicio bancoss
 

En vedette

MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLJesus Alberto Casco Agudelo
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2EQ SOFT EIRL
 
Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgresHIPOLITO GRULLON
 
SENTENCIAS SQL
SENTENCIAS SQL SENTENCIAS SQL
SENTENCIAS SQL Jair Cruz
 
Ejercicios en prolog
Ejercicios en prologEjercicios en prolog
Ejercicios en prologJeffoG92
 
Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Bryan Rodríguez
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQLbrobelo
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzadodrakatiadiaz
 
26 prolog con base de datos postgresql paso a paso
26 prolog con  base de datos postgresql   paso a paso26 prolog con  base de datos postgresql   paso a paso
26 prolog con base de datos postgresql paso a paso.. ..
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos josecuartas
 
Manual de php con ejercicios
Manual de php con ejerciciosManual de php con ejercicios
Manual de php con ejercicioswilliam kozisck
 

En vedette (19)

PostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - VistasPostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - Vistas
 
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
 
Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgres
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
SENTENCIAS SQL
SENTENCIAS SQL SENTENCIAS SQL
SENTENCIAS SQL
 
Ejercicios en prolog
Ejercicios en prologEjercicios en prolog
Ejercicios en prolog
 
Php Con Postgres
Php Con PostgresPhp Con Postgres
Php Con Postgres
 
Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3Arquitectura e implementación de PostgreSQL 9.3
Arquitectura e implementación de PostgreSQL 9.3
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Introducción a PostgreSql
Introducción a PostgreSqlIntroducción a PostgreSql
Introducción a PostgreSql
 
Sentencias sql
Sentencias sqlSentencias sql
Sentencias sql
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzado
 
ejercicios php rfo
ejercicios php rfoejercicios php rfo
ejercicios php rfo
 
26 prolog con base de datos postgresql paso a paso
26 prolog con  base de datos postgresql   paso a paso26 prolog con  base de datos postgresql   paso a paso
26 prolog con base de datos postgresql paso a paso
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos
 
Curso Php
Curso PhpCurso Php
Curso Php
 
Manual de php con ejercicios
Manual de php con ejerciciosManual de php con ejercicios
Manual de php con ejercicios
 

Similaire à PostgreSQL - Lección 6 - Subconsultas

Similaire à PostgreSQL - Lección 6 - Subconsultas (20)

Sql2
Sql2Sql2
Sql2
 
Sql2
Sql2Sql2
Sql2
 
Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)
 
Fundamentos sql
Fundamentos sqlFundamentos sql
Fundamentos sql
 
Sub consultas
Sub consultasSub consultas
Sub consultas
 
Pl
PlPl
Pl
 
Oracle sep 01
Oracle sep 01Oracle sep 01
Oracle sep 01
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
sub Consultas Oracle SQL
sub Consultas Oracle SQLsub Consultas Oracle SQL
sub Consultas Oracle SQL
 
Lecc01
Lecc01Lecc01
Lecc01
 
Consultas Basicas En Sql Server 2005
Consultas Basicas En Sql Server 2005Consultas Basicas En Sql Server 2005
Consultas Basicas En Sql Server 2005
 
Teorico palabras reservada
Teorico palabras reservadaTeorico palabras reservada
Teorico palabras reservada
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
 
Lenguaje sql
Lenguaje sqlLenguaje sql
Lenguaje sql
 
5 mejoras en-rendimiento Oracle 10g
5 mejoras en-rendimiento Oracle 10g5 mejoras en-rendimiento Oracle 10g
5 mejoras en-rendimiento Oracle 10g
 
Lab5 sql
Lab5 sqlLab5 sql
Lab5 sql
 
Postgre S Q L 4
Postgre S Q L 4Postgre S Q L 4
Postgre S Q L 4
 
Subconsultas
SubconsultasSubconsultas
Subconsultas
 
CONSULTAS BASICAS
CONSULTAS BASICASCONSULTAS BASICAS
CONSULTAS BASICAS
 
P1_SQL_Repaso.pdf
P1_SQL_Repaso.pdfP1_SQL_Repaso.pdf
P1_SQL_Repaso.pdf
 

Dernier

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 

Dernier (11)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 

PostgreSQL - Lección 6 - Subconsultas

  • 1. Autor: Nicola Strappazzon C. e-mail: nicola51980@gmail.com 6 Blog: http://www.swapbytes.com/ Revisión: 17/11/11 Lección Subconsultas Este material se encuentra basado en el curso de Fundamentos a SQL de ORACLE, el cual es adaptado para el 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 Subconsulta L6 -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_MAN L6 -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 <> Diferente L6 -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