Klavzulo SQL WITH je uvedel Oracle v bazi podatkov Oracle 9i izdaja 2. Klavzula SQL WITH vam omogoča, da bloku podpoizvedbe daste ime (proces, imenovan tudi refaktoriranje podpoizvedbe), na katerega se lahko sklicujete na več mestih znotraj glavne poizvedbe SQL.
kako razkriti aplikacijo v androidu
- Klavzula se uporablja za definiranje začasne relacije, tako da je izhod te začasne relacije na voljo in ga uporablja poizvedba, ki je povezana s klavzulo WITH.
- Poizvedbe, ki imajo povezano klavzulo WITH, je mogoče napisati tudi z uporabo ugnezdenih podpoizvedb, vendar to dodatno oteži branje/odpravljanje napak v poizvedbi SQL.
- Klavzule WITH ne podpirajo vsi sistemi baz podatkov.
- Ime, dodeljeno podpoizvedbi, se obravnava, kot da bi šlo za vgrajeni pogled ali tabelo
- Klavzulo SQL WITH je uvedel Oracle v bazi podatkov Oracle 9i izdaja 2.
Sintaksa:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table) SELECT Attr1 FROM Table, temporaryTable WHERE Table.Attr1>temporaryTable.averageValue;>

V tej poizvedbi se klavzula WITH uporablja za definiranje začasne relacije temporaryTable, ki ima samo 1 atribut PovprečnaVrednost. averageValue vsebuje povprečno vrednost stolpca Attr1, opisano v relacijski tabeli. Stavek SELECT, ki sledi klavzuli WITH, bo proizvedel samo tiste tuple, kjer je vrednost Attr1 v relacijski tabeli večja od povprečne vrednosti, pridobljene iz stavka WITH.
Opomba: Ko se izvede poizvedba s klavzulo WITH, se najprej ovrednoti poizvedba, omenjena v klavzuli, izhod te ocene pa se shrani v začasno relacijo. Po tem se končno izvede glavna poizvedba, povezana s klavzulo WITH, ki bi uporabila izdelano začasno relacijo.
Poizvedbe
Primer 1: Poiščite vse zaposlene, katerih plača je višja od povprečne plače vseh zaposlenih.
Ime relacije: Zaposleni
| EmployeeID | Ime | Plača |
|---|---|---|
| 100011 | Smith | 50000 |
| 100022 | račun | 94000 |
| 100027 | sebe | 70550 |
| 100845 | Walden | 80000 |
| 115585 | Erik | 60000 |
| 1100070 | Kate | 69000 |
SQL poizvedba:
WITH temporaryTable(averageValue) as (SELECT avg(Salary) from Employee) SELECT EmployeeID,Name, Salary FROM Employee, temporaryTable WHERE Employee.Salary>temporaryTable.averageValue;>
Izhod:
razred java skenerja
| EmployeeID | Ime | Plača |
|---|---|---|
| 100022 | račun | 94000 |
| 100845 | Walden | 80000 |
Pojasnilo: Povprečna plača vseh zaposlenih je 70591. Torej so vsi zaposleni, katerih plača je višja od dobljenega povprečja, v proizvodnem razmerju.
Primer 2: Poiščite vse letalske družbe, kjer je skupna plača vseh pilotov v tej letalski družbi večja od povprečja skupne plače vseh pilotov v bazi podatkov.
Ime relacije: Pilot
| EmployeeID | Letalska družba | Ime | Plača |
|---|---|---|---|
| 70007 | Airbus 380 | Kim | 60000 |
| 70002 | Boeing | Laura | 20000 |
| 10027 | Airbus 380 | Volja | 80050 |
| 10778 | Airbus 380 | Warren | 80780 |
| 115585 | Boeing | Smith | 25000 |
| 114070 | Airbus 380 | Katy | 78000 |
SQL poizvedba:
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;>
Izhod:
| Letalska družba |
|---|
| Airbus 380 |
Pojasnilo: Skupna plača vseh pilotov Airbusa 380 = 298.830 in Boeinga = 45000. Povprečna plača vseh pilotov v tabeli Pilot = 57305. Ker je samo skupna plača vseh pilotov Airbusa 380 večja od dobljene povprečne plače, torej Airbus 380 leži v izhodnem razmerju.
Pomembne točke:
- Klavzula SQL WITH je dobra, če se uporablja s kompleksnimi stavki SQL in ne s preprostimi
- Omogoča tudi razčlenitev zapletenih poizvedb SQL na manjše, kar olajša odpravljanje napak in obdelavo zapletenih poizvedb.
- Klavzula SQL WITH je v bistvu zamenjava običajne podpoizvedbe.