s – Organizovat Složité Dotazy

s – Organizovat Složité Dotazy

V softwarové inženýrství, to je běžná praxe pokyny skupiny je tak malé a snadno srozumitelné celky—konkrétně funkce nebo metody. Díky tomu je Kód opakovaně použitelný a zlepšuje čitelnost.

přestože SQL má také funkce a postupy, nejsou správnými nástroji pro vytváření snadno srozumitelných a opakovaně použitelných jednotek. V SQL nejsou funkce ani postupy prvotřídními občany stejným způsobem jako subqueries.0 stavební blok SQL jsou queries1-ne instrukce.,

aby byly dotazy opakovaně použitelné, představil SQL-92 zobrazení. Po vytvoření má pohled název v databázovém schématu, takže ostatní dotazy jej mohou použít jako tabulku.

SQL: 1999 přidal with klauzuli definovat „prohlášení scoped views“. Nejsou uloženy v databázovém schématu: místo toho jsou platné pouze v dotazu, do kterého patří. To umožňuje zlepšit strukturu prohlášení bez znečišťování globálního jmenného prostoru.,

Syntax

with klauzule je, jednoduše řečeno, volitelný prefix select:2

WITH query_name (column_name1, ...) AS (SELECT ...) SELECT ...

syntaxe po klíčové slovo with je stejné jako pro create view: začíná se dotaz jméno a optionally3 a v závorce jména sloupců vrátí. Klíčové slovo as konečně zavádí samotnou definici (dotaz) – opět v závorkách.,

With není samostatný příkaz jako create view je: musí následovat select. Tento dotaz (a subqueries, který obsahuje) může odkazovat na právě definovaný název dotazu v klauzuli from.

jeden with klauzule může zavést více dotazu jmen, oddělte je čárkou (with klíčové slovo se neopakuje)., Každý z těchto dotazů může odkazovat k dotazu jména dříve definovány v rámci stejné with clause4 (často opomíjené pravidlo—viz Kompatibilita):

WITH query_name1 AS ( SELECT ... ) , query_name2 AS ( SELECT ... FROM query_name1 ... )SELECT ...

Dotaz názvy definovány pomocí with maska stávajících tabulek nebo zobrazení se stejným názvem.5

důležité informace o Výkonu

Většina databází proces with-dotazy stejným způsobem, že se proces zobrazení: mají nahradit odkaz na dotaz o jeho definici a optimalizovat celkový dotaz.,

PostgreSQL databáze byla jiná než verze 12: optimalizované každý with dotaz a hlavní prohlášení na sobě nezávislé.

Pokud je dotazwith odkazován vícekrát, některé mezipaměti databází (tj.

Přečtěte si více o tom v klauzuli „with: dopady na výkon“.

vlastním jménem

živím se školením, dalšími službami souvisejícími s SQL a prodejem své knihy. Další informace naleznete na https://winand.at/.,

Případy Použití

  • Gramotný SQL

  • Unit testy na přechodné data

  • Přiřadit názvy sloupců bez známé jméno.

Kompatibilita

with klauzule byla zavedena s SQL:1999 jako soubor volitelných funkcí. Opuštění recursive varianta stranou, funkce jsou T121 pro top-level with doložky a T122 pro with doložky v poddotazů.

základní funkce with je dobře podporována., Jedinou oblastí, kde se produkty chovají jinak, je rozlišení názvu. Je zvláště pozoruhodné, že with je často zacházeno jako with recursive.6 jemnější nedostatky jsou vztahující se na kvalifikované názvy tabulek (schema.table nemůže odkazovat na with dotaz)7 a názory, používá se v rozsahu with dotazy (dotaz v zobrazení není „vidět“ vnější with doložka).,8

odpovídající alternativy

pohledy mohou pokrýt některé případy použití. To však může snadno vést k nepřiměřenému počtu názorů („znečištění jmenného prostoru“). V těchto případech jsou subqueries často lepší volbou.

Proprietární Rozšíření

s jako DML prefix (PostgreSQL, SQL Server, SQLite)

Některé databáze akceptovat with jako prefix pro příkazy DML (docs: PostgreSQL, SQL Server, SQLite).,

SQL Server můžete také použít with dotaz jako cíl pro příkazy DML (v podstatě staví aktualizovatelný pohled).

Funkce s (Oracle)

Databáze Oracle podporuje funkci a postup prohlášení v with doložka od verze 12cR1 (dokumentace).

DML v s (PostgreSQL)

Počínaje 9.1, databáze PostgreSQL podporuje příkazy DML (insert update delete) v with dotazy (dokumentace)., Při použití klauzule returning příkazu DML dotaz with skutečně vrací data (např. právě Vložené řádky).

Napsat komentář

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