logo

SQL | AR klauzulu

SQL WITH klauzulu Oracle ieviesa Oracle 9i 2. laidiena datubāzē. SQL WITH klauzula ļauj piešķirt apakšvaicājuma blokam nosaukumu (process, ko sauc arī par apakšvaicājuma pārveidošanu), uz kuru var atsaukties vairākās galvenajā SQL vaicājumā.

  • Klauzula tiek izmantota, lai definētu pagaidu relāciju tā, lai šīs pagaidu attiecības izvade būtu pieejama un to izmantotu vaicājums, kas saistīts ar klauzulu WITH.
  • Vaicājumus, kuriem ir saistīta klauzula WITH, var arī rakstīt, izmantojot ligzdotos apakšvaicājumus, taču tas padara SQL vaicājuma lasīšanu/atkļūdošanu sarežģītāku.
  • WITH klauzulu neatbalsta visas datu bāzes sistēmas.
  • Apakšvaicājumam piešķirtais nosaukums tiek apstrādāts tā, it kā tas būtu iekļauts skats vai tabula
  • SQL WITH klauzulu Oracle ieviesa Oracle 9i 2. laidiena datubāzē.

Sintakse:



WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table) SELECT Attr1 FROM Table, temporaryTable WHERE Table.Attr1>pagaiduTable.averageValue;>> 

Šajā vaicājumā klauzula WITH tiek izmantota, lai definētu pagaidu relāciju pagaidu tabulu, kurai ir tikai 1 atribūts mediumValue. mediumValue satur kolonnas Attr1 vidējo vērtību, kas aprakstīta saistībā ar Tabulu. SELECT priekšraksts, kas seko klauzulai WITH, radīs tikai tos korteņus, kuros Attr1 vērtība attiecībā uz Tabulu ir lielāka par vidējo vērtību, kas iegūta no WITH klauzulas priekšraksta.

Piezīme: Kad tiek izpildīts vaicājums ar klauzulu WITH, vispirms tiek novērtēts klauzulā minētais vaicājums un šī novērtējuma izvade tiek saglabāta pagaidu relācijā. Pēc tam beidzot tiek izpildīts galvenais vaicājums, kas saistīts ar klauzulu WITH, kas izmantotu izveidoto pagaidu relāciju.



Vaicājumi

pievienojot virkni java

1. piemērs: Atrodiet visu darbinieku, kura alga ir lielāka par visu darbinieku vidējo algu.
Sakarības nosaukums: Darbinieks

Darbinieka ID Vārds Alga
100011 Smits 50 000
100022 Bils 94 000
100027 Viņš pats 70550
100845 Valdens 80 000
115585 Ēriks 60 000
1100070 Keita 69 000

SQL vaicājums:



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;>

Izvade:

Aviokompānija
Airbus 380

Paskaidrojums: Visu Airbus 380 pilotu kopējā alga = 298 830 un Boeing = 45000. Visu pilotu vidējā alga tabulā Pilots = 57305. Tā kā tikai visu Airbus 380 pilotu kopējā alga ir lielāka par vidējo iegūto algu, tāpēc Airbus 380 ir izejas attiecība.

Svarīgi punkti:

java metiena izņēmums
  • SQL WITH klauzula ir piemērota, ja to lieto kopā ar sarežģītiem SQL priekšrakstiem, nevis vienkāršiem
  • Tas arī ļauj sadalīt sarežģītos SQL vaicājumus mazākos, kas atvieglo sarežģīto vaicājumu atkļūdošanu un apstrādi.
  • SQL WITH klauzula būtībā ir parastā apakšvaicājuma nomaiņa.