GeeksforGeeks

La clause SQL WITH a été introduite par Oracle dans la base de données Oracle 9i release 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
  • qui ont une clause associée à peuvent également être écrites à l’aide de sous-requêtes imbriquées, mais cela ajoute plus de complexité pour lire /déboguer 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 release 2.

Syntaxe:

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

Dans cette requête, la clause WITH est utilisée pour définir une relation temporaire temporaryTable qui n’a que 1 attribut Valeur moyenne. averageValue contient la valeur moyenne de la colonne Attr1 décrite dans le tableau des relations. L’instruction SELECT qui suit la clause WITH ne produira que les tuples où la valeur de la table Attr1 en relation est supérieure à la valeur moyenne obtenue à partir de l’instruction WITH clause.

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 la sortie de cette évaluation est stockée dans une relation temporaire. Après cela, la requête principale associée à la clause WITH est finalement exécutée qui utiliserait la relation temporaire produite.

Requêtes

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: 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 Nom Salaire
100022 Facture 94000
100845 Walden 80000

Explication: Le salaire moyen de tous les employés est de 70591. 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: 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

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 > airlineAverage.avgSalary;

Sortie:

Compagnie aérienne

Airbus 380

Explication: Le salaire total de tous les pilotes d’Airbus 380= 298 830 et celle de Boeing = 45000. Salaire moyen de tous les pilotes du tableau Pilote = 57305. Étant donné que seul le salaire total de tous les pilotes d’Airbus 380 est supérieur au salaire moyen obtenu, Airbus 380 se situe donc dans la relation de production.

Points importants:

  • La clause SQL WITH est bonne lorsqu’elle est utilisée avec des instructions SQL complexes plutôt que des instructions simples
  • Elle vous permet également de décomposer 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 fondamentalement un remplacement direct de la sous-requête normale.

Cet article a été rédigé par Mayank Kumar. Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.org ou envoyez votre article à [email protected] . Consultez votre article apparaissant sur la page principale de GeeksforGeeks et aidez d’autres Geeks.

Related Posts

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *