klauzule SQL s byla zavedena společností Oracle v databázi Oracle 9i release 2. Klauzule SQL S umožňuje dát bloku sub-dotazu název (proces nazývaný také refaktorování sub-dotazu), na který lze odkazovat na několika místech v hlavním dotazu SQL.
- klauzule se používá pro definování dočasné relace tak, že výstup této dočasné relace je k dispozici a je používán dotazem, který je spojen s klauzulí s.
- dotazy, které mají klauzuli přidruženou k klauzuli, lze také psát pomocí vnořených dílčích dotazů, ale tím přidat větší složitost pro čtení / ladění dotazu SQL.
- s klauzulí není podporován všemi databázovými systémy.
- jméno přiřazené dílčí dotaz je zacházeno stejně, jako by byl vložený prohlížení či tabulky
- SQL POMOCÍ klauzule byla zavedena Oracle Oracle 9i release 2 databáze.
syntaxe:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table), SELECT Attr1 FROM Table WHERE Table.Attr1 > temporaryTable.averageValue;
V tomto dotaz S klauzule se používá k definování dočasné vztahu temporaryTable, že má jen 1 atribut averageValue. averageValue drží průměrnou hodnotu sloupce Attr1 popsanou v relační tabulce. VYBERTE tvrzení, které vyplývá S ustanovení bude vyrábět pouze ty n-tice, kde hodnota Attr1 ve vztahu Tabulce je vyšší než průměrná hodnota získaná z bodu prohlášení.
Poznámka: Když je proveden dotaz s klauzulí s, nejprve je vyhodnocen dotaz uvedený v klauzuli a výstup tohoto hodnocení je uložen v dočasné relaci. Poté je nakonec proveden hlavní dotaz spojený s klauzulí s, která by použila vytvořenou dočasnou relaci.
Dotazy
Příklad 1: Najděte všechny zaměstnance, jejichž plat je vyšší než průměrný plat všech zaměstnanců.
název relace: 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:
Číslozaměstnance | Jméno | Plat |
---|---|---|
100022 | Účet | 94000 |
100845 | Walden | 80000 |
Vysvětlení: průměrný plat všech zaměstnanců je 70591. Proto všichni zaměstnanci, jejichž plat je vyšší než získaný průměr, leží ve výstupním vztahu.
příklad 2: Najděte všechny letecké společnosti, kde je celkový plat všech pilotů v této letecké společnosti vyšší než průměr celkového platu všech pilotů v databázi.
název relace: 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 Dotazu:
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;
Výstup:
Airbus 380
Vysvětlení: Celkový plat všech pilotů Airbus 380 = 298,830 a že Boeing = 45000. Průměrný plat všech pilotů v tabulce Pilot = 57305. Vzhledem k tomu, že pouze celkový plat všech pilotů Airbusu 380 je vyšší než průměrný získaný plat, tak Airbus 380 leží ve výstupním vztahu.
důležité body:
- SQL POMOCÍ klauzule je dobré, když se používá s složité SQL příkazy, spíše než jednoduchá
- To také umožňuje rozložit složité SQL dotazy do menších, které usnadňují ladění a zpracování komplexních dotazů.
- klauzule SQL S je v podstatě drop-in náhrada normálního sub-dotazu.
tento článek je přispěl Mayank Kumar. Pokud se vám líbí GeeksforGeeks a chtěli byste přispět, můžete také napsat článek pomocí contribute.geeksforgeeks.org nebo napište svůj článek na [email protected]. Podívejte se na svůj článek zobrazený na hlavní stránce GeeksforGeeks a pomozte ostatním geekům.