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