GeeksforGeeks

Oracle introdujo la cláusula SQL WITH en la base de datos Oracle 9i release 2. 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 tal manera que la salida de esta relación temporal esté disponible y es utilizada por la consulta que está asociada con la cláusula WITH.Las consultas
  • que tienen una cláusula asociada CON también se pueden escribir utilizando sub-consultas anidadas, pero al hacerlo se añade más complejidad para leer/depurar la consulta SQL.
  • CON la cláusula no es compatible con todo el sistema de base de datos.
  • El nombre asignado a la sub-consulta 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 Oracle 9i release 2.Sintaxis

:

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

En esta consulta, CON la cláusula se utiliza para definir una relación temporal temporaryTable que tiene sólo 1 atributo averageValue. averageValue contiene el valor medio de la columna Attr1 descrita en la Tabla de relaciones. La instrucción SELECT que sigue a la cláusula WITH producirá solo aquellas tuplas en las que el valor de Attr1 en la Tabla de relaciones es mayor que el valor promedio obtenido de la instrucción de 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. Después de esto, se ejecuta finalmente la consulta principal asociada con la cláusula WITH que usaría la relación temporal producida.

Consultas

Ejemplo 1: Encuentre a todos los empleados cuyo salario sea superior al salario promedio de todos los empleados.Nombre de la relación: Employee

EmployeeID Name Salary
100011 Smith 50000
100022 Bill 94000
100027 Sam 70550
100845 Walden 80000
115585 Erik 60000
1100070 Kate 69000

SQL Query:

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

Output:

EmployeeID Nombre Sueldo
100022 Ley 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 de esa aerolínea es superior al promedio del salario total de todos los pilotos en la base de datos.

Nombre de la relación: Pilot

EmployeeID Airline Name Salary
70007 Airbus 380 Kim 60000
70002 Boeing Laura 20000
10027 Airbus 380 Will 80050
10778 Airbus 380 Warren 80780
115585 Boeing Smith 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;

Resultado:

Aerolínea

el Airbus 380

Explicación: El salario total de todos los pilotos de Airbus 380 = 298,830 y que de Boeing = 45000. Salario promedio de todos los pilotos en la tabla Piloto = 57305. Dado que solo el salario total de todos los pilotos de Airbus 380 es mayor que el salario promedio obtenido, Airbus 380 se encuentra en la relación de producción.

Puntos Importantes:

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

Este artículo es una contribución de Mayank Kumar. Si te gustan los GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando contribute.geeksforgeeks.org o envíe su artículo a [email protected]. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Related Posts

Deja una respuesta

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