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:
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.