GeeksforGeeks

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:

Letecké společnosti,

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.

Related Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *