software engineering, se on yleinen käytäntö ryhmä ohjeet kuin pieni ja helposti ymmärrettäviä yksikköä—eli toimintoja tai menetelmiä. Tämä tekee koodista uudelleenkäytettävän ja parantaa luettavuutta.
vaikka SQL: llä on myös toimintoja ja menettelytapoja, ne eivät ole oikeita työkaluja helposti ymmärrettävien ja uudelleenkäytettävien yksiköiden rakentamiseen. SQL: ssä toiminnot ja menettelyt eivät ole ykkösluokan kansalaisia samalla tavalla kuin subqueries.0 rakennuspalikka SQL ovat queries1—ei ohjeita.,
jotta kyselyt olisivat uudelleenkäytettäviä, SQL-92 esitteli näkymiä. Kun näkymä on luotu, sillä on nimi tietokantataulukossa, jotta muut kyselyt voivat käyttää sitä kuin taulukkoa.
SQL:1999 lisätty with
lauseke ”statement scoped views”: n määrittelemiseksi. Niitä ei tallenneta tietokantakaavioon, vaan ne ovat voimassa vain siinä kyselyssä, johon ne kuuluvat. Näin voidaan parantaa lausunnon rakennetta saastuttamatta maailmanlaajuista nimiavaruutta.,
Syntax
with
lauseke on, yksinkertaisesti sanottuna, valinnainen etuliite select
:2
WITH query_name (column_name1, ...) AS (SELECT ...) SELECT ...
syntax jälkeen avainsana with
on sama kuin create view
: se alkaa kyselyn nimi, ja optionally3 ja suluissa nimen sarakkeet se palaa. Hakusana as
esittelee lopulta itse määritelmän—kyselyn) – jälleen sulkeissa.,
With
ei ole itsenäinen komento, kuten create view
on: se on seurattava select
. Tämä kysely (ja alikyselyä se sisältää) voi viitata vain määritelty kyselyn nimi heidän from
lauseke.
yhden with
lauseke voi ottaa käyttöön useita kyselyn nimet erottamalla ne pilkulla (with
avainsana ei toistu)., Jokainen näistä kyselyt voi viitata kyselyn nimet aiemmin määritelty saman with
clause4 (usein laiminlyöty sääntö—katso Yhteensopivuus):
WITH query_name1 AS ( SELECT ... ) , query_name2 AS ( SELECT ... FROM query_name1 ... )SELECT ...
Kyselyn nimet, jotka on määritetty käyttäen with
naamio nykyisiä taulukoita tai näkemyksiä, joilla on sama nimi.5
Suorituskyky Näkökohdat
Useimmat tietokannat prosessi with
-kyselyt samalla tavalla, että ne käsittelevät näkemyksiä: ne korvata viittaus kyselyn mukaan sen määritelmä ja optimoida yleinen kysely.,
PostgreSQL-tietokanta oli eri vasta-versio 12: optimoitu kunkin with
kyselyn ja tärkein lausunto toisistaan riippumattomia.
– Jos with
kysely on tarkoitettu useita kertoja, joissakin tietokannoissa välimuisti (eli ”toteutunut”) sen seurauksena estämään teloitukset.
Lue tästä lisää ”with
lauseke: Performance Impacts”.
omasta puolestani
ansaitsen elantoni koulutuksesta, muista SQL-palveluista ja kirjani myymisestä. Lue lisää https://winand.at/.,
Käytä Tapauksissa
-
Lukutaitoisia SQL
-
Yksikkö testit ohimenevä tiedot
-
Määritä nimet sarakkeita ilman tunnettua nimeä,
Yhteensopivuus
with
lauseke otettiin käyttöön SQL:1999 joukko valinnaisia ominaisuuksia. Jättäen recursive
variantti syrjään, ominaisuudet ovat T121 huipputason with
lausekkeita ja T122 varten with
lausekkeita alikyselyä.
with
perustoiminnot ovat hyvin tuettuja., Yksi alue, jossa tuotteet käyttäytyvät eri tavalla on nimi resoluutio. Erityisen huomionarvoista on, että with
kohdellaan usein kuin with recursive
.6. lisää hienovarainen yhteensopivuusongelmia liittyvät pätevän taulukon nimet (schema.table
voi viitata with
kysely)7 ja näkemyksiä käytetään soveltamisalan with
kyselyt (kyselyn näkymän sisällä ei ”näe” ulompi with
lauseke).,8
Mukainen Vaihtoehtoja
Näkemyksiä voi kattaa joitakin käyttötapauksia. Tämä voi kuitenkin johtaa helposti kohtuuttomaan näkemysten määrään (”nimiavaruuden saastuminen”). Tällöin alakiintiöt ovat usein parempi vaihtoehto.
sovelluskohtaisia
yhtä DML-etuliite (PostgreSQL, SQL Server, SQLite)
Jotkut tietokannat hyväksyä with
etuliitteenä DML-lausekkeita (docs: PostgreSQL, SQL Server, SQLite).,
SQL Server voi myös käyttää with
kyselyn kohde DML-lausekkeita (periaatteessa rakennus on päivitettävissä view).
Toimintojen kanssa (Oracle)
Oracle-Tietokanta tukee toimintaa ja menettelyä ilmoitukset sisällä with
lauseke koska versio 12cR1 (dokumentaatio).
DML kanssa (PostgreSQL)
Alkaen 9.1, PostgreSQL-tietokanta tukee DML-lausekkeita (insert
, update
, delete
) kehossa with
kyselyt (dokumentaatio)., Kun käytät (myös oma) returning
lauseketta DML-lause, with
kyselyn oikeastaan palauttaa tietoja (esim. rivit vain se on asetettu laitteeseen).