GeeksforGeeks

SQL WITH clause został wprowadzony przez Oracle w bazie danych Oracle 9i release 2. Klauzula SQL WITH pozwala nadać blokowi podzapytań nazwę (proces zwany także refaktoryzacją podzapytań), do której można się odwoływać w kilku miejscach głównego zapytania SQL.

  • klauzula jest używana do definiowania tymczasowej relacji, tak aby wyjście tej tymczasowej relacji było dostępne i jest używane przez zapytanie powiązane z klauzulą WITH.zapytania
  • , które mają powiązaną klauzulę Z, mogą być również pisane za pomocą zagnieżdżonych zapytań podrzędnych, ale w ten sposób zwiększa się złożoność odczytu / debugowania zapytania SQL.
  • z klauzulą nie jest wspierana przez wszystkie systemy bazodanowe.
  • nazwa przypisana do podrzędnego zapytania jest traktowana tak, jakby był to Widok wbudowany lub tabela
  • klauzula SQL WITH została wprowadzona przez Oracle w bazie danych Oracle 9i release 2.

składnia:

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

w tym zapytaniu, z klauzulą jest używana do definiowania tymczasowej relacji tymczasowa, która ma tylko 1 atrybut średnia. averageValue przechowuje średnią wartość kolumny Attr1 opisaną w tabeli relacji. Instrukcja SELECT, która następuje po klauzuli WITH, wytworzy tylko te krotki, w których wartość Attr1 w tabeli relacji jest większa niż średnia wartość uzyskana z instrukcji WITH.

Uwaga: Gdy zapytanie z klauzulą WITH jest wykonywane, najpierw zapytanie wymienione w klauzuli jest obliczane, a wynik tej oceny jest przechowywany w relacji tymczasowej. Następnie zostanie ostatecznie wykonane główne zapytanie powiązane z klauzulą WITH, które wykorzystałoby wytworzoną tymczasową relację.

zapytania

przykład 1: Znajdź wszystkich pracowników, których pensja jest wyższa niż średnia pensja wszystkich pracowników.
Nazwa relacji: 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 Nazwa wynagrodzenie
100022 rachunek 94000
100845 Walden 80000

Wyjaśnienie: średnie wynagrodzenie wszystkich pracowników wynosi 70591. Dlatego wszyscy pracownicy, których wynagrodzenie jest wyższe niż uzyskana średnia, leżą w relacji produkcji.

przykład 2: Znajdź wszystkie linie lotnicze, w których łączna pensja wszystkich pilotów w tej linii lotniczej jest większa niż średnia całkowita pensja wszystkich pilotów w bazie danych.

Nazwa relacji: 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

zapytanie 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;

Wyjście:

linia lotnicza

Airbus 380

Wyjaśnienie: całkowite wynagrodzenie wszystkich pilotów Airbusa 380 = 298,830, a Boeing = 45000. Średnie wynagrodzenie wszystkich pilotów w tabeli Pilot = 57305. Ponieważ tylko łączna pensja wszystkich pilotów Airbusa 380 jest większa niż średnia uzyskana pensja, więc Airbus 380 leży w relacji wyjściowej.

ważne punkty:

  • klauzula SQL WITH jest dobra, gdy jest używana ze złożonymi instrukcjami SQL, a nie prostymi
  • pozwala również na rozbicie złożonych zapytań SQL na mniejsze, które ułatwiają debugowanie i przetwarzanie złożonych zapytań.
  • SQL z klauzulą jest w zasadzie zamiennikiem zwykłego podpowiedzi.

autorem artykułu jest Mayank Kumar. Jeśli podoba Ci się GeeksforGeeks i chciałbyś wnieść swój wkład, możesz również napisać artykuł za pomocą contribute.geeksforgeeks.org lub wyślij swój artykuł na adres [email protected]. Zobacz swój artykuł pojawiający się na stronie głównej GeeksforGeeks i pomóż innym maniakom.

Related Posts

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *