Összegzés: ebben az oktatóanyagban megismerheti a PostgreSQL rekurzív lekérdezést rekurzív közös táblázatkifejezések vagy CTE-k segítségével.
Bevezetés A PostgreSQL rekurzív lekérdezésbe
a PostgreSQL biztosítja a WITH
állítást, amely lehetővé teszi, hogy segédutasításokat készítsen egy lekérdezésben való használatra.
ezeket az állításokat gyakran közös táblázatkifejezéseknek vagy CTE-knek nevezik. A CTE-k olyanok, mint az ideiglenes táblák, amelyek csak a lekérdezés végrehajtása során léteznek.
a rekurzív lekérdezés egy rekurzív CTE-re utaló lekérdezés. A rekurzív lekérdezések sok helyzetben hasznosak, például hierarchikus adatok lekérdezésében, például szervezeti felépítésben, anyagjegyzékben stb.
az alábbiakban bemutatjuk a rekurzív CTE szintaxisát:
Code language: SQL (Structured Query Language) (sql)
a rekurzív CTE-nek három eleme van:
- nem rekurzív kifejezés: a nem rekurzív kifejezés egy CTE lekérdezésdefiníció, amely a CTE struktúra alap eredményhalmazát képezi.
- rekurzív kifejezés: a rekurzív kifejezés egy vagy több CTE lekérdezésdefiníció, amely a nem rekurzív kifejezéssel csatlakozik a UNION vagy
UNION ALL
operátor. A rekurzív kifejezés magára a CTE névre hivatkozik. - befejezési ellenőrzés: a rekurzió leáll, ha az előző iterációból nem adnak vissza sorokat.
a PostgreSQL rekurzív CTE-t hajt végre a következő sorrendben:
- hajtsa végre a nem rekurzív kifejezést az alap eredménykészlet (R0) létrehozásához.
- hajtsa végre a rekurzív kifejezést ri bemenettel, hogy az eredményhalmaz ri+1 legyen a kimenet.
- ismételje meg a 2. lépést, amíg egy üres halmaz vissza nem kerül. (termination check)
- visszaadja a végső eredményhalmazt, amely az R0, R1, … RN eredményhalmaz Uniója vagy
UNION ALL
PostgreSQL Rekurzív lekérdezési példa
létrehozunk egy új táblázatot a PostgreSQL rekurzív lekérdezés bemutatására.
Code language: SQL (Structured Query Language) (sql)
a employees
táblázat három oszlopból áll: employee_id
, manager_id
és full_name
. A manager_id
oszlop egy alkalmazott menedzser azonosítóját adja meg.
a következő utasítás mintaadatokat szúr be a employees
táblázatba.
Code language: PHP (php)
a következő lekérdezés a menedzser összes alárendeltjét adja vissza a 2 azonosítóval.
Code language: SQL (Structured Query Language) (sql)
hogyan működik:
- a rekurzív CTE, alárendelt, egy nem rekurzív kifejezést és egy rekurzív kifejezést határoz meg.
- a nem rekurzív kifejezés az R0 alap eredményhalmazt adja vissza, amely a 2 azonosítóval rendelkező alkalmazott.
Code language: SQL (Structured Query Language) (sql)
a rekurzív kifejezés a 2. Munkavállalói azonosító közvetlen alárendeltjét adja vissza. Ez az alkalmazotti táblázat és a beosztott CTE közötti kapcsolat eredménye. A rekurzív kifejezés első iterációja a következő eredményhalmazt adja vissza:
Code language: SQL (Structured Query Language) (sql)
a PostgreSQL ismételten végrehajtja a rekurzív kifejezést. A rekurzív tag második iterációja a fenti lépés eredményhalmazát használja bemeneti értékként, majd ezt az eredményhalmazt adja vissza:
Code language: SQL (Structured Query Language) (sql)
a harmadik iteráció egy üres eredményhalmazt ad vissza, mert nincs alkalmazotti jelentés az alkalmazottnak a 16, 17, 18, 19 és 20 azonosítóval.
a PostgreSQL a végső eredményhalmazt adja vissza, amely a nem rekurzív és rekurzív kifejezések által generált első és második iteráció összes eredményhalmazának egyesülése.
ebben az oktatóanyagban megtanulta, hogyan kell használni a rekurzív CTE-ket a PostgreSQL rekurzív lekérdezések felépítéséhez.
- hasznos volt ez az oktatóanyag ?
- igennem