GeeksforGeeks

Die SQL WITH-Klausel wurde von Oracle in der Oracle 9i Release 2-Datenbank eingeführt. Mit der SQL WITH-Klausel können Sie einem Unterabfrageblock einen Namen geben (ein Prozess, der auch als Unterabfragerefactoring bezeichnet wird), auf den an mehreren Stellen innerhalb der Haupt-SQL-Abfrage verwiesen werden kann.

  • Die Klausel wird zum Definieren einer temporären Beziehung verwendet, sodass die Ausgabe dieser temporären Beziehung verfügbar ist und von der Abfrage verwendet wird, die der WITH-Klausel zugeordnet ist.
  • Abfragen, denen eine WITH-Klausel zugeordnet ist, können auch mit verschachtelten Unterabfragen geschrieben werden, erhöhen jedoch die Komplexität beim Lesen / Debuggen der SQL-Abfrage.
  • WITH-Klausel wird nicht von allen Datenbanksystemen unterstützt.
  • Der der Unterabfrage zugewiesene Name wird so behandelt, als wäre es eine Inline-Ansicht oder -Tabelle
  • Die SQL WITH-Klausel wurde von Oracle in der Oracle 9i Release 2-Datenbank eingeführt.

Syntax:

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

In dieser Abfrage wird WITH Klausel verwendet, um eine temporäre Beziehung temporaryTable zu definieren, die nur 1 Attribut averageValue . averageValue enthält den in der Relationstabelle beschriebenen Durchschnittswert der Spalte Attr1. Die SELECT-Anweisung, die auf die WITH-Klausel folgt, erzeugt nur die Tupel, bei denen der Wert von Attr1 in der Relationstabelle größer ist als der Durchschnittswert, der aus der WITH-Klausel-Anweisung erhalten wird.

Hinweis: Wenn eine Abfrage mit einer WITH-Klausel ausgeführt wird, wird zuerst die in der Klausel erwähnte Abfrage ausgewertet und die Ausgabe dieser Auswertung in einer temporären Beziehung gespeichert. Anschließend wird die mit der WITH Klausel verknüpfte Hauptabfrage ausgeführt, die die erzeugte temporäre Beziehung verwenden würde.

Abfragen

Beispiel 1: Finden Sie alle Mitarbeiter, deren Gehalt mehr als das Durchschnittsgehalt aller Mitarbeiter.
Name der Beziehung: 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:

Mitarbeiter-ID Name Gehalt
100022 Rechnung 94000
100845 Walden 80000

Erklärung: Das Durchschnittsgehalt aller Mitarbeiter beträgt 70591. Daher liegen alle Mitarbeiter, deren Gehalt über dem erzielten Durchschnitt liegt, in der Leistungsbeziehung.

Beispiel 2: Finden Sie alle Fluggesellschaften, bei denen das Gesamtgehalt aller Piloten dieser Fluggesellschaft über dem Durchschnitt des Gesamtgehalts aller Piloten in der Datenbank liegt.

Name der Beziehung: 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

SQL-Abfrage:

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;

Ausgabe:

Fluggesellschaft

Airbus 380

Erklärung: Das Gesamtgehalt aller Piloten von Airbus 380 = 298.830 und die von Boeing = 45000. Durchschnittsgehalt aller Piloten in der Tabelle Pilot = 57305. Da nur das Gesamtgehalt aller Piloten von Airbus 380 größer ist als das durchschnittlich erzielte Gehalt, liegt Airbus 380 im Leistungsverhältnis.

Wichtige Punkte:

  • Die SQL WITH-Klausel ist gut, wenn sie mit komplexen SQL-Anweisungen anstelle von einfachen verwendet wird
  • Es ermöglicht Ihnen auch, komplexe SQL-Abfragen in kleinere zu zerlegen, was das Debuggen und Verarbeiten der komplexen Abfragen erleichtert.
  • Die SQL WITH-Klausel ist im Grunde ein Drop-In-Ersatz für die normale Unterabfrage.

Dieser Artikel wurde von Mayank Kumar beigesteuert. Wenn Sie GeeksforGeeks mögen und dazu beitragen möchten, können Sie auch einen Artikel schreiben mit contribute.geeksforgeeks.org oder mailen Sie Ihren Artikel an [email protected]. Sehen Sie sich Ihren Artikel auf der GeeksforGeeks-Hauptseite an und helfen Sie anderen Geeks.

Related Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.