GeeksforGeeks

Az SQL with clause-t az Oracle vezette be az Oracle 9i release 2 adatbázisba. Az SQL with clause lehetővé teszi, hogy egy al-query blokk nevet adjon (egy folyamat, amelyet al-query refactoringnak is neveznek), amelyre a fő SQL lekérdezés több helyen hivatkozhat.

  • a záradék olyan ideiglenes kapcsolat meghatározására szolgál, hogy az ideiglenes kapcsolat kimenete elérhető legyen, és azt a lekérdezés használja, amely a WITH záradékhoz van társítva.
  • lekérdezések, amelyek egy kapcsolódó záradék is írható beágyazott al-lekérdezések, de ezzel még összetettebb olvasni / hibakeresés az SQL lekérdezés.
  • a záradék nem támogatja az összes adatbázis-rendszer.
  • az al-lekérdezéshez rendelt nevet úgy kezelik, mintha egy inline nézet vagy táblázat lenne
  • az SQL with záradékot az Oracle vezette be az Oracle 9i release 2 adatbázisba.

szintaxis:

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

ebben a lekérdezésben a záradékot egy ideiglenes relációs temporaryTable meghatározására használják, amelynek csak 1 attribútuma van átlagérték. az averageValue a relációs táblázatban leírt Atr1 oszlop átlagos értékét tartalmazza. A SELECT utasítás, amely követi a WITH záradék termel csak azokat a kapcsokat, ahol az érték a Atr1 kapcsolatban táblázat nagyobb, mint az átlagos kapott érték A WITH záradék nyilatkozat.

Megjegyzés: Amikor a WITH záradékkal rendelkező lekérdezés végrehajtásra kerül, először a záradékban említett lekérdezést értékeljük, majd az értékelés kimenetét ideiglenes kapcsolatban tároljuk. Ezt követően végre végrehajtásra kerül a WITH záradékhoz társított fő lekérdezés, amely az előállított ideiglenes kapcsolatot használja.

lekérdezések

1. példa: keresse meg az összes alkalmazottat, akinek fizetése meghaladja az összes alkalmazott átlagos fizetését.
a kapcsolat neve: 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:

/tr>

ame fizetés
100022 Bill 9400
100845 80000

magyarázat: az összes alkalmazott átlagos fizetése 70591. Ezért minden olyan alkalmazott, akinek fizetése meghaladja a kapott átlagot, a kimeneti viszonyban rejlik.

2. példa: Keresse meg az összes légitársaságot, ahol a légitársaság összes pilótájának teljes fizetése meghaladja az adatbázisban szereplő összes pilóta összes fizetésének átlagát.

a kapcsolat neve: 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 lekérdezés:

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;

kimenet:

légitársaság

Airbus 380

magyarázat: az összes 380 pilóta teljes fizetése 298,830 és a Boeing = 45000. Átlagos fizetése minden pilóta a táblázatban pilóta = 57305. Mivel csak az Airbus 380 összes pilótájának teljes fizetése nagyobb, mint a kapott átlagkereset, így az Airbus 380 a kimeneti viszonyban rejlik.

fontos pontok:

  • az SQL záradék akkor jó, ha komplex SQL utasításokkal használják, nem pedig egyszerűekkel
  • azt is lehetővé teszi, hogy komplex SQL lekérdezéseket kisebbekre bontson, amelyek megkönnyítik a komplex lekérdezések hibakeresését és feldolgozását.
  • az SQL záradék alapvetően egy drop-in csere a normál al-lekérdezés.

ezt a cikket Mayank Kumar írta. Ha tetszik GeeksforGeeks szeretne hozzájárulni, akkor is írni egy cikket segítségével contribute.geeksforgeeks.org vagy küldje el a cikket [email protected]. Lásd a cikket megjelenő GeeksforGeeks főoldalon, valamint segít más Geeks.

Related Posts

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük