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.