SQL | Cláusula CON

La cláusula SQL WITH fue introducida por Oracle en la base de datos de la versión 2 de Oracle 9i. La cláusula SQL WITH le permite dar un nombre a un bloque de subconsulta (un proceso también llamado refactorización de subconsulta), al que se puede hacer referencia en varios lugares dentro de la consulta SQL principal. 
 

  • La cláusula se utiliza para definir una relación temporal de modo que la salida de esta relación temporal esté disponible y la utilice la consulta asociada a la cláusula WITH.
  • Las consultas que tienen una cláusula WITH asociada también se pueden escribir mediante subconsultas anidadas, pero al hacerlo agregan más complejidad para leer/depurar la consulta SQL.
  • La cláusula WITH no es compatible con todos los sistemas de bases de datos.
  • El nombre asignado a la subconsulta se trata como si fuera una vista o tabla en línea
  • La cláusula SQL WITH fue introducida por Oracle en la base de datos de la versión 2 de Oracle 9i.

Sintaxis: 

WITH temporaryTable (averageValue) as
    (SELECT avg(Attr1)
    FROM Table)
    SELECT Attr1
    FROM Table, temporaryTable
    WHERE Table.Attr1 > temporaryTable.averageValue;
 

En esta consulta, la cláusula WITH se usa para definir una relación temporal tablaTemporal que tiene solo 1 atributo valorpromedio. AverageValue contiene el valor promedio de la columna Attr1 descrito en la tabla de relaciones. La instrucción SELECT que sigue a la cláusula WITH producirá solo aquellas tuplas donde el valor de Attr1 en la relación Table es mayor que el valor promedio obtenido de la instrucción de la cláusula WITH. 

Nota:  Cuando se ejecuta una consulta con una cláusula WITH, primero se evalúa la consulta mencionada dentro de la cláusula y el resultado de esta evaluación se almacena en una relación temporal. A continuación, finalmente se ejecuta la consulta principal asociada a la cláusula WITH que utilizaría la relación temporal producida. 
 

Consultas

Ejemplo 1:  Encuentre todos los empleados cuyo salario es mayor que el salario promedio de todos los empleados. 
Nombre de la relación: Empleado 
 

ID de empleado Nombre Salario
100011 Herrero 50000
100022 Factura 94000
100027 Sam 70550
100845 Walden 80000
115585 erik 60000
1100070 Kate 69000

Consulta SQL: 

WITH temporaryTable(averageValue) as
    (SELECT avg(Salary)
    from Employee)
        SELECT EmployeeID,Name, Salary 
        FROM Employee, temporaryTable 
        WHERE Employee.Salary > temporaryTable.averageValue;

Salida : 
 

ID de empleado Nombre Salario
100022 Factura 94000
100845 Walden 80000

Explicación: El salario promedio de todos los empleados es 70591. Por lo tanto, todos los empleados cuyo salario es superior al promedio obtenido se encuentran en la relación de producción. 
 

Ejemplo 2: Encuentre todas las aerolíneas donde el salario total de todos los pilotos en esa aerolínea es mayor que el promedio del salario total de todos los pilotos en la base de datos. 

Nombre de la relación: Piloto 
 

ID de empleado Aerolínea Nombre Salario
70007 Airbus 380 Kim 60000
70002 Boeing laura 20000
10027 Airbus 380 Voluntad 80050
10778 Airbus 380 Madriguera 80780
115585 Boeing Herrero 25000
114070 Airbus 380 Katy 78000

Consulta SQL: 

WITH totalSalary(Airline, total) as
    (SELECT Airline, sum(Salary)
    FROM Pilot
    GROUP BY Airline),
    airlineAverage(avgSalary) as 
    (SELECT avg(Salary)
    FROM Pilot )
    SELECT Airline
    FROM totalSalary, airlineAverage
    WHERE totalSalary.total > airlineAverage.avgSalary;

Salida : 
 

Aerolínea
Airbus 380

Explicación: El salario total de todos los pilotos de Airbus 380 = 298.830 y el de Boeing = 45000. Salario medio de todos los pilotos de la tabla Piloto = 57305. Ya que solo el salario total de todos los pilotos de Airbus 380 es mayor que el salario medio obtenido , por lo que Airbus 380 se encuentra en la relación de salida. 

Puntos importantes: 

  • La cláusula SQL WITH es buena cuando se usa con sentencias SQL complejas en lugar de simples.
  • También le permite dividir consultas SQL complejas en otras más pequeñas, lo que facilita la depuración y el procesamiento de consultas complejas.
  • La cláusula SQL WITH es básicamente un reemplazo directo de la subconsulta normal.

Este artículo es una contribución de Mayank Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *