„SQL WITH“ sąlygą „Oracle“ pristatė „Oracle 9i“ 2 versijos duomenų bazėje. SQL WITH sąlyga leidžia suteikti antrinės užklausos blokui pavadinimą (procesas taip pat vadinamas antrinės užklausos keitimu), kurį galima nurodyti keliose pagrindinės SQL užklausos vietose.
- Sąlyga naudojama apibrėžti laikinąjį ryšį taip, kad šio laikinojo ryšio išvestis būtų prieinama ir būtų naudojama užklausoje, susietoje su sąlyga WITH.
- Užklausos, kurios yra susietos su sąlyga WITH, taip pat gali būti parašytos naudojant įdėtas antrines užklausas, tačiau tai dar labiau apsunkina SQL užklausos skaitymą / derinimą.
- WITH sąlyga nepalaikoma visose duomenų bazių sistemose.
- Papildomai užklausai priskirtas pavadinimas traktuojamas taip, lyg tai būtų tiesioginis rodinys arba lentelė
- SQL WITH sąlygą „Oracle“ pristatė „Oracle 9i“ 2 versijos duomenų bazėje.
Sintaksė:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table) SELECT Attr1 FROM Table, temporaryTable WHERE Table.Attr1>laikinasTable.averageValue;>>
Šioje užklausoje sąlyga WITH naudojama apibrėžti laikiną santykį laikina lentelė, kuri turi tik 1 atributą mediumValue. mediumValue turi vidutinę stulpelio Attr1 reikšmę, aprašytą lentelėje. SELECT sakinys, einantis po sakinio WITH, sukurs tik tas eilutes, kuriose Attr1 reikšmė santykio lentelėje yra didesnė už vidutinę reikšmę, gautą iš sakinio WITH.
Pastaba: Kai vykdoma užklausa su sąlyga WITH, pirmiausia įvertinama sakinyje minima užklausa ir šio įvertinimo išvestis saugoma laikinajame ryšyje. Po to galiausiai vykdoma pagrindinė užklausa, susijusi su sąlyga WITH, kuri naudotų sukurtą laikiną ryšį.
Užklausos
1 pavyzdys: Raskite visus darbuotojus, kurių atlyginimas yra didesnis nei vidutinis visų darbuotojų atlyginimas.
Santykio pavadinimas: Darbuotojas
| Darbuotojo ID | vardas | Atlyginimas |
|---|---|---|
| 100011 | Kalvis | 50 000 |
| 100022 | Bill | 94 000 |
| 100027 | save patį | 70550 |
| 100845 | Waldenas | 80 000 |
| 115585 | Erikas | 60 000 |
| 1100070 | Kate | 69 000 |
SQL užklausa:
Išvestis:
| Aviakompanija |
|---|
| „Airbus 380“. |
Paaiškinimas: Visų Airbus 380 pilotų bendras atlyginimas = 298 830, o Boeing = 45 000. Vidutinis visų pilotų atlyginimas lentelėje Pilotas = 57305. Kadangi tik bendras visų Airbus 380 pilotų atlyginimas yra didesnis už gautą vidutinį atlyginimą, todėl „Airbus 380“ yra išėjimo santykis.
Svarbūs punktai:
- SQL WITH sąlyga yra tinkama, kai naudojama su sudėtingais SQL sakiniais, o ne paprastais
- Tai taip pat leidžia suskaidyti sudėtingas SQL užklausas į mažesnes, kad būtų lengviau derinti ir apdoroti sudėtingas užklausas.
- SQL WITH sąlyga iš esmės yra įprastos antrinės užklausos pakaitalas.
