logo

SQL | CON cláusula

La cláusula SQL CON fue introducida por Oracle en la base de datos Oracle 9i versión 2. La cláusula SQL FROM le permite darle un nombre a un bloque de subconsulta (un proceso también llamado refactorización de subconsultas), 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 sea utilizada por la consulta asociada con la cláusula CON.
  • Las consultas que tienen una cláusula with asociada también se pueden escribir usando subconsultas anidadas, pero al hacerlo se agrega más complejidad para leer/depurar la consulta SQL.
  • La cláusula CON 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 CON fue introducida por Oracle en la base de datos Oracle 9i versión 2.

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 CON se utiliza para definir una relación temporal tabla temporal que tiene solo 1 atributo valor promedio. AverageValue contiene el valor promedio de la columna Attr1 descrita en la relación Tabla. La declaración SELECT que sigue a la cláusula CON producirá solo aquellas tuplas donde el valor de Attr1 en relación Tabla es mayor que el valor promedio obtenido de la declaración de la cláusula CON.

Nota: Cuando se ejecuta una consulta con una cláusula CON, 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 FROM que utilizaría la relación temporal producida.

Consultas

eres empalme

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 Él mismo 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;>

Producción:

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 mayor que el 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 sea 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>aerolíneaAverage.avgSalary;>

Producción:

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. Dado que sólo el salario total de todos los pilotos de Airbus 380 es mayor que el salario medio obtenido, entonces El Airbus 380 se encuentra en la relación de producción.

Puntos importantes:

slf4j frente a log4j
  • La cláusula SQL FROM es buena cuando se usa con declaraciones 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 CON es básicamente un reemplazo directo de la subconsulta normal.