logo

SQL | AVECclause

La clause SQL WITH a été introduite par Oracle dans la base de données Oracle 9i version 2. La clause SQL WITH vous permet de donner un nom à un bloc de sous-requête (un processus également appelé refactoring de sous-requête), qui peut être référencé à plusieurs endroits dans la requête SQL principale.

  • La clause est utilisée pour définir une relation temporaire de telle sorte que la sortie de cette relation temporaire soit disponible et soit utilisée par la requête associée à la clause WITH.
  • Les requêtes auxquelles une clause WITH est associée peuvent également être écrites à l'aide de sous-requêtes imbriquées, mais cela ajoute plus de complexité à la lecture/débogage de la requête SQL.
  • La clause WITH n'est pas prise en charge par tous les systèmes de base de données.
  • Le nom attribué à la sous-requête est traité comme s'il s'agissait d'une vue ou d'une table en ligne
  • La clause SQL WITH a été introduite par Oracle dans la base de données Oracle 9i version 2.

Syntaxe:



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

angles adjacents

Dans cette requête, la clause WITH est utilisée pour définir une relation temporaire TemporaryTable qui n'a qu'un seul attribut AverageValue. AverageValue contient la valeur moyenne de la colonne Attr1 décrite dans la relation Table. L'instruction SELECT qui suit la clause WITH produira uniquement les tuples où la valeur de Attr1 dans la relation Table est supérieure à la valeur moyenne obtenue à partir de l'instruction de la clause WITH.

Note: Lorsqu'une requête avec une clause WITH est exécutée, la requête mentionnée dans la clause est d'abord évaluée et le résultat de cette évaluation est stocké dans une relation temporaire. Suite à cela, la requête principale associée à la clause WITH est finalement exécutée et utiliserait la relation temporaire produite.



Requêtes

python chameau

Exemple 1: Trouvez tous les employés dont le salaire est supérieur au salaire moyen de tous les employés.
Nom de la relation : Employé

ID employé Nom Salaire
100011 Forgeron 50000
100022 Facture 94000
100027 Lui-même 70550
100845 Walden 80000
115585 Érik 60000
1100070 Kate 69000

Requête SQL :



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

Sortir:

ID employé Nom Salaire
100022 Facture 94000
100845 Walden 80000

Explication: Le salaire moyen de tous les employés est de 70 591. Par conséquent, tous les employés dont le salaire est supérieur à la moyenne obtenue se trouvent dans la relation de production.

Exemple 2 : Trouvez toutes les compagnies aériennes où le salaire total de tous les pilotes de cette compagnie aérienne est supérieur à la moyenne du salaire total de tous les pilotes de la base de données.

Nom de la relation : Pilote

convention de nom java
ID employé Compagnie aérienne Nom Salaire
70007 Airbus380 Kim 60000
70002 Boeing Laura 20000
10027 Airbus380 Volonté 80050
10778 Airbus380 Garenne 80780
115585 Boeing Forgeron 25000
114070 Airbus380 Katie 78000

Requête 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>compagnie aérienneAverage.avgSalary;>

Sortir:

Compagnie aérienne
Airbus380

Explication: Le salaire total de tous les pilotes de l'Airbus 380 = 298 830 et celui de Boeing = 45 000. Salaire moyen de tous les pilotes du tableau Pilote = 57 305. Puisque seul le salaire total de tous les pilotes de l'Airbus 380 est supérieur au salaire moyen obtenu, donc L'Airbus 380 réside dans la relation de sortie.

Les points importants:

  • La clause SQL WITH est adaptée lorsqu'elle est utilisée avec des instructions SQL complexes plutôt que simples.
  • Il vous permet également de diviser les requêtes SQL complexes en requêtes plus petites, ce qui facilite le débogage et le traitement des requêtes complexes.
  • La clause SQL WITH est essentiellement un remplacement instantané de la sous-requête normale.