Geeksborgeeks

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:

nimi

/tr>

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ö:

lentoyhtiö

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ä.

Related Posts

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *