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