Oracle esitteli lausekkeella SQL: n Oracle 9i release 2-tietokannassa. SQL with-lausekkeen avulla voit antaa alikyselyn lohkon a-nimen (prosessia kutsutaan myös alikyselyn refaktoroinniksi), johon voidaan viitata useissa kohdissa SQL-pääkyselyn sisällä.
- lauseketta käytetään tilapäisen relaation määrittelyyn siten, että tämän väliaikaisen relaation ulostulo on käytettävissä ja sitä käytetään WITH-lausekkeeseen liittyvässä kyselyssä.
- kyselyt, joihin liittyy lauseke, voidaan myös kirjoittaa käyttäen sisäkkäisiä alikyselyjä, mutta tämä lisää monimutkaisuutta SQL-kyselyn lukemiseen / virheenkorjaukseen.
- lauseketta ei tue kaikki tietokantajärjestelmä.
- alikyselyyn annettua nimeä käsitellään ikään kuin se olisi inline-näkymä tai taulukko
- Oraclen Oracle 9i release 2-tietokannassa esittelemä SQL-lauseke.
syntaksi:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table), SELECT Attr1 FROM Table WHERE Table.Attr1 > temporaryTable.averageValue;
tässä kyselyssä käytetään lauseketta, jolla määritellään väliaikainen relaatio temporaryTable, jolla on vain 1 attribuutti keskiarvo. averageValue pitää sisällään suhteellisuustaulukossa kuvatun sarakkeen Attr1 keskiarvon. WITH-lauseketta seuraava select-lauseke tuottaa vain ne tuplet, joissa Attr1: n arvo relaatiotaulukossa on suurempi kuin WITH-lausekkeesta saatu keskiarvo.
Huomautus: Kun kysely, jossa on lauseke, suoritetaan, ensin lausekkeessa mainittu kysely arvioidaan ja tämän arvioinnin tulos tallennetaan väliaikaiseen relaatioon. Tämän jälkeen suoritetaan lopuksi tärkein WITH-lausekkeeseen liittyvä kysely, joka käyttäisi tuotettua väliaikaista relaatiota.
kyselyt
Esimerkki 1: Etsi kaikki työntekijät, joiden palkka on suurempi kuin kaikkien palkansaajien keskipalkka.
relaation nimi: 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:
työntekijä | palkka | |
---|---|---|
100022 | lasku | 94000 |
100845 | Walden | 80000 |
selitys: kaikkien palkansaajien keskipalkka on 70591. Näin ollen kaikki palkansaajat, joiden palkka on enemmän kuin saatu keskiarvo, ovat tuotoksen suhteessa.
Esimerkki 2: Etsi kaikki lentoyhtiöt, joissa kokonaispalkka kaikkien lentäjien että lentoyhtiö on enemmän kuin keskimääräinen kokonaispalkka kaikkien lentäjien tietokannasta.
relaation nimi: 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 |
SQL Query:
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;
Lähtö:
Airbus 380
selitys: kaikkien Airbus 380: n lentäjien kokonaispalkka = 298 830 ja Boeing = 45 000. Kaikkien taulukon lentäjien keskipalkka Pilot = 57305. Koska vain kaikkien Airbus 380-lentäjien kokonaispalkka on suurempi kuin saatu keskipalkka, niin Airbus 380 on tuotoksen suhteessa.
tärkeät pisteet:
- SQL-lauseke on hyvä, kun sitä käytetään monimutkaisten SQL-lausekkeiden kanssa yksinkertaisten sijaan
- se mahdollistaa myös monimutkaisten SQL-kyselyiden pilkkomisen pienempiin, mikä helpottaa monimutkaisten kyselyiden virheenkorjausta ja käsittelyä.
- SQL, jossa lauseke on periaatteessa drop-in-korvike normaalille alikyselylle.
tämän artikkelin on kirjoittanut Mayank Kumar. Jos pidät GeeksforGeeks ja haluat osallistua, voit myös kirjoittaa artikkelin käyttäen contribute.geeksforgeeks.org tai lähetä artikkelisi osoitteeseen [email protected]. Katso artikkeli esiintyy GeeksforGeeks pääsivulla ja auttaa muita nörttejä.