2013. július 17., szerda

WITH AS használata az SQL lekérdezésekben


Amennyiben azzal szembesülünk, hogy a SELECT utasításunk átláthatatlanná vagy nehezen olvashatóvá vált a beágyazott SQL lekérdezések (subquery) miatt, akkor érdemes fontolóra vennünk a WITH AS használatát.

Mit tud a WITH AS?

Segítségével az SQL lekérdezésünkből kiemelhetjük a beágyazott lekérdezéseket, és helyettük egy 'alias'-szal, egy névvel hivatkozhatunk rájuk. Pont úgy, mintha tábla vagy view lennének. Ez tapasztalataim szerint meggyorsítja a komplex lekérdezések futtatását, átláthatóbbá teszi a SELECT utasítást.

Hogyan használjuk?

Az így kiemelt beágyazott lekérdezéseket még a fő lekérdezés (ami a beágyazott lekérdezésekből olvas) futtatása előtt definiálnunk kell. Lehetőség van több ilyen "átmeneti tábla" létrehozására is a 'WITH AS' kifejezés után.

Példa:

WITH CTE_Tabla1 AS 

 (
  SELECT Mezo1, Mezo2, Mezo3 FROM tbl_Vers
  WHERE Mezo4 in ('Ecc', 'Pecc', 'Kimehetsz')
 ),

CTE_Tabla2 AS
 (SELECT Field1, Field2 FROM tbl_Mondoka
  WHERE Field3 = 'Holnapután bejöhetsz'
 )

SELECT
   FROM CTE_Tabla1 Inner Join CTE_Tabla2 ON CTE_Tabla1.Mezo1 = CTE_Tabla2.Field1
                       Inner Join tbl_AltatoMese ON CTE_Tabla2.Field2 = tbl_AltatoMese.ID


Egyéb tudnivalók:
  • Az utolsó SELECT-ben fel kell használnunk az összes definiált "átmeneti táblát", különben nem fut le a lekérdezés
  • Az utolsó SELECT utasításban az így létrehozott "táblákból" csak az ott megadott mezőneveket használhatjuk.
  • Használható a VIEW készítés során is!