– Szervezze komplex lekérdezések

– Szervezze komplex lekérdezések

a szoftverfejlesztés, ez a bevett gyakorlat, hogy a csoport utasításokat, mint a kis, könnyen érthető egységek – nevezetesen funkciók vagy módszerek. Ezáltal a kód újrafelhasználható, és javítja az olvashatóságot.

annak ellenére, hogy az SQL-nek is vannak funkciói és eljárásai, nem a megfelelő eszközök a könnyen érthető és újrafelhasználható egységek építéséhez. Az SQL-ben sem a funkciók, sem az eljárások nem első osztályú állampolgárok ugyanúgy, mint az alkeretek.0 az SQL építőköve queries1-nem utasítások.,

ahhoz, hogy a lekérdezések újrafelhasználhatók legyenek, az SQL-92 bevezette a nézeteket. A létrehozás után a nézetnek van egy neve az adatbázis sémájában, hogy más lekérdezések táblázatként használhassák.

SQL: 1999 added the with clause to define”statement scoped views”. Ezek nem tárolódnak az adatbázis sémájában: ehelyett csak abban a lekérdezésben érvényesek, amelyhez tartoznak. Ez lehetővé teszi a nyilatkozat szerkezetének javítását anélkül, hogy szennyezné a globális névteret.,

szintaxis

a with záradék, egyszerűen fogalmazva, egy opcionális előtag a select:2

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

a with

ugyanaz, mint acreate view: a lekérdezés nevével kezdődik, optionally3, zárójelben pedig az oszlopok nevét adja vissza. A as kulcsszó végül bemutatja magát a meghatározást (a lekérdezést)—ismét zárójelben.,

With nem önálló parancs, mint például a create view is: ezt a selectkövetnie kell. Ez a lekérdezés (és a benne lévő alkeretek) a from záradékban a megadott lekérdezés nevére utalhat.

egyetlen with záradék több lekérdezési nevet is bevezethet vesszővel elválasztva (a with kulcsszó nem ismétlődik meg)., Mindegyik lekérdezés a with clause4 (gyakran elhanyagolt szabály—lásd a kompatibilitást) alatt korábban meghatározott lekérdezési nevekre utalhat:

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

lekérdezési nevek a with maszkolja a meglévő táblákat vagy az azonos nevű nézeteket.5

teljesítmény megfontolások

a legtöbb adatbázis feldolgozza a with-lekérdezéseket ugyanúgy, ahogy a nézeteket feldolgozzák: a lekérdezésre való hivatkozást a definíciójával helyettesítik, és optimalizálják a teljes lekérdezést.,

a PostgreSQL adatbázis egészen a 12-es verzióig más volt: minden with lekérdezést és egymástól független fő állítást optimalizált.

Ha a with lekérdezés utal többször, egyes adatbázisok cache (azaz” materialize”) annak eredménye, hogy megakadályozzák a kettős végrehajtás.

Tudjon meg többet erről a “with záradék: teljesítmény hatások”.

saját nevemben

képzésből, más SQL-hez kapcsolódó szolgáltatásokból és könyvem eladásából élek. További információ: https://winand.at/.,

használati Esetek

  • Művelt SQL

  • Unit tesztet tranziens adatok

  • Rendel neveket oszlopok nélkül egy ismert név

Kompatibilitás

A with záradék vezették be az SQL:1999, mint egy készlet opcionális funkciók. Arecursive változat mellett a t121 a felső szintűwith és a t122 awith alkönyvtárakban.

awith alapvető funkcionalitása jól támogatott., Az egyetlen terület, ahol a termékek másképp viselkednek, a névfelbontás. Különösen figyelemre méltó, hogy a withgyakran úgy kezelik, mint a with recursive.6 a finomabb inkompatibilitások a minősített táblázatnevekhez kapcsolódnak (schema.table nem hivatkozhat a with lekérdezésre)7 és a with lekérdezések hatókörében használt nézetek (a nézetben található lekérdezés nem “látja” a külső with záradék).,8

megfelelő alternatívák

nézetek kiterjedhet néhány használati esetek. Ez azonban könnyen vezethet ésszerűtlen számú nézethez (“névtér szennyezés”). Ezekben az esetekben az alkeretek gyakran a jobb megoldás.

szabadalmaztatott kiterjesztések

as DML előtaggal (PostgreSQL, SQL Server, SQLite)

egyes adatbázisok elfogadják awith A DML utasítások előtagjaként (docs: PostgreSQL, SQL Server, SQLite).,

SQL Server is használhatja a with lekérdezés, mint a cél a DML nyilatkozatok (alapvetően épület egy frissíthető nézet).

funkciók in with (Oracle)

Az Oracle adatbázis a with 12cr1-es verzió óta támogatja a függvény-és eljárásnyilatkozatokat (dokumentáció).

DML in with (PostgreSQL)

9.1-től kezdődően a PostgreSQL adatbázis támogatja a DML kimutatásokat (insert, update, delete) a with lekérdezések (dokumentáció)., A (szintén védett) returning A DML-nyilatkozat záradékának használatakor a with lekérdezés valójában adatokat ad vissza (például az éppen beillesztett sorokat).

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

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