logo

SQL | MED klausul

SQL WITH-sætningen blev introduceret af Oracle i Oracle 9i release 2-databasen. SQL WITH-sætningen giver dig mulighed for at give en underforespørgselsblok et navn (en proces også kaldet sub-forespørgselsrefactoring), som kan refereres til flere steder i den primære SQL-forespørgsel.

c# switch
  • Klausulen bruges til at definere en midlertidig relation, således at outputtet af denne midlertidige relation er tilgængelig og bruges af den forespørgsel, der er knyttet til WITH-sætningen.
  • Forespørgsler, der har en tilknyttet WITH-klausul, kan også skrives ved hjælp af indlejrede underforespørgsler, men det tilføjer mere kompleksitet til at læse/fejle SQL-forespørgslen.
  • WITH-klausulen understøttes ikke af alle databasesystemer.
  • Navnet, der er tildelt underforespørgslen, behandles, som om det var en indlejret visning eller tabel
  • SQL WITH-sætningen blev introduceret af Oracle i Oracle 9i release 2-databasen.

Syntaks:



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

I denne forespørgsel bruges WITH-klausulen til at definere en midlertidig relation temporaryTable, der kun har 1 attribut gennemsnitsværdi. gennemsnitsVærdi indeholder gennemsnitsværdien af ​​kolonne Attr1 beskrevet i relationstabel. SELECT-sætningen, der følger efter WITH-sætningen, vil kun producere de tuples, hvor værdien af ​​Attr1 i relation til tabel er større end den gennemsnitlige værdi opnået fra WITH-sætningssætningen.

Bemærk: Når en forespørgsel med en WITH-klausul udføres, evalueres først den forespørgsel, der er nævnt i klausulen, og outputtet fra denne evaluering lagres i en midlertidig relation. Herefter udføres den hovedforespørgsel, der er forbundet med WITH-sætningen, til sidst, som ville bruge den producerede midlertidige relation.



slå udviklertilstand fra

Forespørgsler

Eksempel 1: Find alle de medarbejdere, hvis løn er mere end gennemsnitslønnen for alle ansatte.
Relationens navn: Medarbejder

Medarbejder-ID Navn Løn
100011 Smith 50.000
100022 Regning 94000
100027 Ham selv 70550
100845 Walden 80.000
115585 Erik 60.000
1100070 Kate 69.000

SQL-forespørgsel:



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

Produktion:

Medarbejder-ID Navn Løn
100022 Regning 94000
100845 Walden 80.000

Forklaring: Gennemsnitslønnen for alle medarbejdere er 70591. Derfor ligger alle medarbejdere, hvis løn er højere end det opnåede gennemsnit, i outputrelationen.

Eksempel 2: Find alle de flyselskaber, hvor den samlede løn for alle piloter i det pågældende flyselskab er mere end gennemsnittet af den samlede løn for alle piloter i databasen.

java samlinger ramme

Relationens navn: Pilot

Medarbejder-ID Flyselskab Navn Løn
70007 Airbus 380 Kim 60.000
70002 Boeing Laura 20.000
10027 Airbus 380 Vilje 80050
10778 Airbus 380 Warren 80780
115585 Boeing Smith 25.000
114070 Airbus 380 Katy 78.000

SQL-forespørgsel:

char til int
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;>

Produktion:

Flyselskab
Airbus 380

Forklaring: Den samlede løn for alle piloter på Airbus 380 = 298.830 og for Boeing = 45000. Gennemsnitsløn for alle piloter i tabellen Pilot = 57305. Da kun den samlede løn for alle piloter på Airbus 380 er større end den opnåede gennemsnitsløn, så Airbus 380 ligger i outputforholdet.

Vigtige punkter:

  • SQL WITH-sætningen er god, når den bruges sammen med komplekse SQL-sætninger i stedet for simple
  • Det giver dig også mulighed for at opdele komplekse SQL-forespørgsler i mindre, hvilket gør det nemt at fejlfinde og behandle de komplekse forespørgsler.
  • SQL WITH-sætningen er grundlæggende en drop-in-erstatning til den normale underforespørgsel.