buscador

Visita

Mostrando las entradas con la etiqueta Uso de Subconsultas para Solucionar Consultas en SQL Developer. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Uso de Subconsultas para Solucionar Consultas en SQL Developer. Mostrar todas las entradas

lunes, 9 de enero de 2023

SQL Capitulo 7 : Uso de Subconsultas para Solucionar Consultas en SQL Developer

Sean bienvenidos a esta secci贸n donde se revisa el uso de subconsultas para solucionar consultas, recuerden estas sentencias estan siendo ejecutadas en SQL developer administrador de la Base de datos Oracle. 


Objetivos de la publicaci贸n:
Al finalizar esta lecci贸n, deber铆a estar capacitado para lo siguiente:

  • Definir subconsultas
  • Describir los tipos de problemas que pueden solucionar las subconsultas
  • Mostrar los tipos de subconsultas
  • Escribir subconsultas de una o varias filas

En esta lecci贸n aprender谩 funciones avanzadas de la sentencia SELECT. Puede escribir subconsultas en la cl谩usula WHERE de otra sentencia SQL para obtener valores basados en un valor condicional desconocido. En esta lecci贸n se tratan tambi茅n subconsultas de una y de varias filas.



Subconsulta: tipos, sintaxis e instrucciones
Uso de una Subconsulta para Solucionar Problemas
¿Qui茅n tiene un salario mayor que el de Abel?
Supongamos que desea escribir una consulta para saber qui茅n gana un salario mayor que el de Abel. 
Para solucionar este problema, necesita dos consultas: Una para saber cu谩nto gana Abel y otra para saber qui茅n gana m谩s que esa cantidad. 
Tambi茅n puede solucionar este problema combinando las dos consultas y colocando una dentro de la otra.
La consulta interna (o subconsulta) devuelve un valor que utiliza la consulta externa (o consulta principal). El uso de una subconsulta es equivalente a la realizaci贸n de dos consultas secuenciales y al uso del resultado de la primera consulta como el valor de b煤squeda en la segunda consulta.

Sintaxis de la Subconsulta
  • La subconsulta (consulta interna) se ejecuta una vez antes de la consulta principal (consulta externa).
  • La consulta principal utiliza el resultado de la subconsulta.
Una subconsulta es una sentencia SELECT que est谩 embebida en la cl谩usula de otra sentencia SELECT. Puede crear sentencias potentes a partir de sentencias simples utilizando las subconsultas. Pueden ser muy 煤tiles cuando necesite seleccionar filas de una tabla con una condici贸n de que dependa de los datos de la propia tabla.
Puede colocar la subconsulta en diferentes cl谩usulas SQL, entre las que se incluyen las siguientes:
Cl谩usula WHERE
Cl谩usula HAVING
Cl谩usula FROM
En la sintaxis:
operator  incluye una condici贸n de comparaci贸n como >, = o IN

Nota: las condiciones de comparaci贸n pueden ser de dos clases: operadores de una sola fila (>, =, >=, <, <>, <=) y operadores de varias filas (IN, ANY, ALL, EXISTS).
Se suele hacer referencia a la subconsulta como una sentencia SELECT anidada, una subconsulta SELECT o una sentencia SELECT interna. Por lo general, la subconsulta se ejecuta en primer lugar y su resultado se utiliza para completar la condici贸n de consulta para la consulta principal (o externa).



Uso de Subconsultas

En la ejemplo, la consulta interna determina el salario del empleado Abel. La consulta externa obtiene el resultado de la consulta interna y lo utiliza para mostrar a todos los empleados que ganan m谩s que el empleado Abel.

Instrucciones para el Uso de Subconsultas
  • Incluir subconsultas entre par茅ntesis.
  • Coloque las subconsultas a la derecha de la condici贸n de comparaci贸n para facilitar la legibilidad. (Sin embargo, la subconsulta puede aparecer a cualquier lado del operador de comparaci贸n.)
  • Utilizar operadores de una sola fila con subconsultas de una fila y utilizar los operadores de varias filas con subconsultas de varias filas.
Una subconsulta debe estar incluida entre par茅ntesis.
Coloque las subconsultas a la derecha de la condici贸n de comparaci贸n para facilitar la legibilidad. Sin embargo, la subconsulta puede aparecer a cualquier lado del operador de comparaci贸n.
En las subconsultas, se utilizan dos clases de condiciones de comparaci贸n: operadores de una sola fila y operadores de varias filas.

Tipos de Subconsultas
Subconsulta de una sola fila

Subconsulta de varias filas
Subconsultas de una sola fila: consultas que devuelven s贸lo una fila de la sentencia SELECT interna.
Subconsultas de varias filas: consultas que devuelven m谩s de una fila de la sentencia SELECT interna.

Nota: tambi茅n existen varias subconsultas de varias columnas, que son consultas que devuelven m谩s de una columna de la sentencia SELECT interna. 脡stas se tratan en el curso Oracle Database: Conceptos Fundamentales de SQL II.

Subconsultas de una sola fila:
Funciones de grupo en una subconsulta
          Cl谩usula HAVING con subconsultas

Subconsultas de Una Sola Fila
  • Devuelven una sola fila
  • Utilizan operadores de comparaci贸n de una sola fila


Una subconsulta de una sola fila devuelve una fila de la sentencia SELECT interna. Este tipo de subconsulta utiliza un operador de una sola fila. El ejemplo proporciona una lista de los operadores de una sola fila. 

Ejemplo:
Muestre los empleados cuyo ID de cargo sea el mismo que el del empleado 141: 

SELECT last_name, job_id
FROM   employees
WHERE  job_id =
               (SELECT job_id
                FROM   employees
                WHERE  employee_id = 141);

Ejecuci贸n de Subconsultas de una Sola Fila



Una sentencia SELECT se puede considerar como un bloque de consulta. El ejemplo muestra los empleados que realizan el mismo trabajo que “Taylor”, pero que tienen un salario mayor que 茅l.
El ejemplo tiene tres bloques de consulta: la consulta externa y las dos consultas internas. Los bloques de consulta internos se ejecutan primero, produciendo los resultados de consulta SA_REP y 8600, respectivamente. A continuaci贸n, se procesa el bloque de consulta externo y utiliza los valores devueltos por las consultas internas para completar sus condiciones de b煤squeda. 
Tanto las consultas internas como externas devuelven valores 煤nicos (SA_REP y 8600, respectivamente), por lo que a esta sentencia SQL se la denomina subconsulta de una sola fila.

Nota: las consultas externas e internas pueden obtener datos de diferentes tablas.

Uso de Funciones de Grupo en una Subconsulta
Puede mostrar los datos de una consulta principal utilizando una funci贸n de grupo en una subconsulta para que devuelva una sola fila. La subconsulta est谩 entre par茅ntesis y se coloca al final de la condici贸n de comparaci贸n.
El ejemplo muestra el apellido del empleado, el ID de cargo y el salario de todos los empleados cuyo salario sea igual al salario m铆nimo. La funci贸n de grupo MIN devuelve un valor 煤nico (2500) a la consulta externa.

Cl谩usula HAVING con Subconsultas
El servidor de Oracle ejecuta primero las subconsultas.
El servidor de Oracle devuelve los resultados a la cl谩usula HAVING de la consulta principal.
Puede utilizar las subconsultas en la cl谩usula WHERE y en la cl谩usula HAVING. El servidor de Oracle ejecuta la subconsulta y los resultados se devuelven en la cl谩usula HAVING de la consulta principal.
La sentencia SQL muestra todos los departamentos que tienen un salario m铆nimo mayor que el del departamento 50.

Ejemplo:
Busque el puesto con el salario medio m谩s bajo.
   SELECT   job_id, AVG(salary)
   FROM     employees
   GROUP BY job_id
   HAVING   AVG(salary) = (SELECT   MIN(AVG(salary))
                           FROM     employees
                           GROUP BY job_id);

¿Qu茅 Parte de esta Sentencia Es Incorrecta?


Un error muy com煤n en las subconsultas se produce cuando se devuelve m谩s de una fila para una subconsulta de una sola fila.
En la sentencia SQL, la subconsulta contiene una cl谩usula GROUP BY, que implica que la subconsulta devolver谩 varias filas, una por cada grupo que encuentre. En este caso, los resultados de la subconsulta son 4400, 6000, 2500, 4200, 7000, 17000 y 8300.
La consulta externa toma esos resultados y los utiliza en su cl谩usula WHERE. La cl谩usula WHERE contiene un operador igual (=), un operador de comparaci贸n de una sola fila que espera un 煤nico valor. El operador = no puede aceptar m谩s de un valor de la subconsulta y, por lo tanto, genera el error.
Para corregir este error, cambie el operador = a IN.

La Consulta Interna No Devuelve Ning煤n Resultado
Otro problema com煤n de las subconsultas se produce cuando la consulta interna no devuelve ninguna fila.
En la sentencia SQL, la subconsulta contiene una cl谩usula WHERE. Supuestamente, la intenci贸n es encontrar el empleado cuyo nombre es Haas. La sentencia es correcta, pero no selecciona ninguna fila al ejecutarse porque no hay ning煤n empleado con el nombre Haas. Por lo tanto, la subconsulta no devuelve ninguna fila. 
La consulta externa toma los resultados de la subconsulta (nula) y los utiliza en la cl谩usula WHERE. La consulta externa no encuentra ning煤n empleado con un ID de cargo igual que un valor nulo, por lo tanto, no devuelve ninguna fila. Si exist铆a un cargo con un valor nulo, la fila no se devolver谩 porque la comparaci贸n de dos valores nulos tiene como resultado un valor nulo; por lo tanto, la condici贸n WHERE no es verdadera.

Subconsultas de varias filas
        Usar el operador IN, ALL o ANY
Uso del operador EXISTS

Subconsultas de Varias Filas
  • Devuelven m谩s de una fila
  • Utilizan operadores de comparaci贸n de varias filas
Las subconsultas que devuelven m谩s de una fila se denominan subconsultas de varias filas. Con una subconsulta de varias filas, puede utilizar un operador de varias filas en lugar de utilizar un operador de una sola fila. El operador de varias filas espera uno o m谩s valores:
 
   SELECT last_name, salary, department_id
   FROM   employees
   WHERE  salary IN (SELECT   MIN(salary)
                     FROM     employees
                     GROUP BY department_id);
Ejemplo:
Busque los empleados que ganan el mismo salario que el salario m铆nimo de cada departamento.
Primero se ejecuta la consulta interna, produciendo el resultado de consulta. A continuaci贸n, se procesa el bloque de consulta principal y se utilizan los valores devueltos por la consulta interna para completar la condici贸n de b煤squeda. De hecho, la consulta principal aparece en el servidor de Oracle de la siguiente forma:

   SELECT last_name, salary, department_id
   FROM   employees
   WHERE  salary IN (2500, 4200, 4400, 6000, 7000, 8300, 8600, 17000);

Uso del Operador ANY en Subconsultas de Varias Filas

El operador ANY  (y su sin贸nimo, el operador SOME) compara un valor con cada valor devuelto por una subconsulta. El ejemplo muestra los empleados que no son programadores de TI y cuyo salario es menor al de cualquier programador de TI. El salario m谩ximo de un programador es de 9.000 d贸lares.
<ANY significa menos que el m谩ximo. 
>ANY significa m谩s que el m铆nimo. 
=ANY es igual que IN.

Uso del Operador ALL en Subconsultas de Varias Filas
El operador ALL compara un valor con cada valor devuelto por una subconsulta. El ejemplo muestra los empleados cuyo salario es inferior al salario de todos los empleados con un ID de cargo IT_PROG y cuyo trabajo no es IT_PROG. 
>ALL significa m谩s que el m谩ximo y <ALL significa menos que el m铆nimo.
El operador NOT se puede utilizar con los operadores IN, ANY y ALL.

Uso del Operador EXISTS

El operador EXISTS se utiliza en consultas en las que el resultado depende de si existen determinadas filas en la tabla o no. Se eval煤a en TRUE si la subconsulta devuelve al menos una fila. 

El ejemplo muestra los departamentos que no tienen empleados. Para cada fila de la tabla DEPARTMENTS, la condici贸n comprueba si existe o no una fila en la tabla EMPLOYEES con el mismo ID de departamento. En caso de que no exista dicha fila, la condici贸n se cumple para la fila en cuesti贸n y se selecciona. Si existe una fila correspondiente en la tabla EMPLOYEES, la fila no se selecciona.



Valores nulos en una subconsulta
Valores Nulos en una Subconsulta
La sentencia SQL intenta mostrar todos los empleados que no tienen ning煤n subordinado. L贸gicamente, esta sentencia SQL debe haber devuelto 12 filas. Sin embargo, la sentencia SQL no devuelve ninguna fila. Uno de los valores devueltos por la consulta interna es un valor nulo y, por lo tanto, la consulta completa no devuelve ninguna fila. 
El motivo es que todas las condiciones que comparan un valor nulo tienen un resultado nulo. Por lo tanto, cuando los valores nulos probablemente formen parte del juego de resultados de una subconsulta, no utilice el operador NOT IN. El operador NOT IN es equivalente a <> ALL.

Tenga en cuenta que el valor nulo que forma parte del juego de resultados de una subconsulta no representa ning煤n problema si se utiliza el operador IN. El operador IN es equivalente a =ANY. Por ejemplo, para mostrar los empleados que tienen subordinados, utilice la siguiente sentencia SQL:

    SELECT emp.last_name
    FROM   employees emp
    WHERE  emp.employee_id  IN
                              (SELECT mgr.manager_id
                               FROM   employees mgr);

Por otro lado, una cl谩usula WHERE se puede incluir en la subconsulta para mostrar todos los empleados que no tienen ning煤n subordinado:

SELECT last_name FROM employees
WHERE  employee_id NOT IN
                        (SELECT manager_id 
                         FROM   employees 
                         WHERE  manager_id IS NOT NULL);

Resumen
En esta lecci贸n, debe haber aprendido lo siguiente:
  • Identificar cu谩ndo una subconsulta puede ayudar a resolver un problema
  • Escribir subconsultas cuando una consulta est谩 basada en valores desconocidos


En esta lecci贸n, debe haber aprendido a utilizar las subconsultas. Una subconsulta es una sentencia SELECT que est谩 embebida en una cl谩usula de otra sentencia SQL. Las subconsultas son 煤tiles cuando una consulta est谩 basada en criterios de b煤squeda con valores intermedios desconocidos.
Las subconsultas tienen las siguientes caracter铆sticas:
Pueden transferir una fila de datos a una sentencia principal que contenga un operador de una sola fila como =, <>, >, >=, < o <=.
Pueden transferir varias filas de datos a una sentencia principal que contenga un operador de varias filas, como IN.
Primero las procesa el servidor de Oracle y, a continuaci贸n, la cl谩usula WHERE o HAVING utiliza los resultados.
Pueden contener funciones de grupo.
Raul Tamani A. ©. Im谩genes del tema de fpm. Con tecnolog铆a de Blogger.

Adblock Detectado

Apoya este sitio desactivando el Adblock para seguir navegando. ¡Gracias!

¡Ya Desactive el Adblock!