Bevezetés
amikor SQL utasítást hoz létre a PostgreSQL-ben, előfordulhat, hogy be kell ágyaznia egy másik SQL-lekérdezést az utasításba. Ezeket a beágyazott vagy beágyazott lekérdezéseket subqueries néven ismerjük, és hatékony módot nyújtanak a szükséges adatok SQL utasításból történő lekérésére. Ebben a cikkben közelebbről megvizsgáljuk a Postgres alkereséseket, és áttekintünk néhány példát, amelyek bemutatják, hogyan kell használni őket.
előfeltétel
mielőtt elkezdené ezt az oktatóanyagot, győződjön meg arról, hogy telepítette és konfigurálta a következőket a gépén:
- PostgreSQL
alapvető PostgreSQL ismeretek is szükség van, hogy képes legyen követni együtt a bemutató.
mi az a Postgres Subquery?
ahogy a neve is sugallja, a Postgres-lekérdezés egy másik SQL-lekérdezésbe vagy utasításba ágyazott lekérdezés. Az alkérdezés olyan adatokat ad vissza, amelyeket a fő lekérdezésben a WHERE
záradékban megadott feltételek részeként használnak fel.
Mintaadatkészlet létrehozása
ebben a szakaszban létrehozunk egy mintaadatkészletet, amelyet felhasználhatunk a példáinkban. Be kell jelentkeznünk a Postgres shell-be az adatbázis és a tábla létrehozásához.
- adatbázisunkat a következő paranccsal hozhatjuk létre:
1
|
adatbázis-termék létrehozása
|
- ezután táblázatokat hozhatunk létre az adatbázis számára a következő struktúrával:
1
2 3 4 5 6 7 8 9 10 |
Táblázat létrehozása, ha nem létezik készlet (
id soros elsődleges kulcs, category_id karakter változó(100), termék_neve karakter változó(100), sku karakter változó(100), leírás karakter változó (100), ár INT, mennyiség Int ); |
végül beillesztjük a mintarekordokat:
1
2 3 4 5 6 7 |
készletbe helyezés(id,category_id, product_name, sku, leírás, ár, mennyiség)
értékek (1, ‘M01’, ‘Monitor 22inch’, ‘HW020’, ‘számítógép monitor 22inch’, 300, 100), (2,’M02′, ‘hőpaszta’, ‘HW040’, ‘CPU hőpaszta’, 2, 130), (3,’M03′,’krimpelő eszköz’, ‘HW021’, ‘hálózati eszköz’, 14, 10), (4,’M01′, ‘billentyűzet’, ‘HW098’, ‘számítógép billentyűzet’, 3, 25), (5,’M01′, ‘SSD 250GB’, ‘HW033’, ‘szilárdtestalapú meghajtó’, 24, 60); |
most hozzunk létre egy másik, ‘kategória’ nevű táblát a következő struktúra felhasználásával:
1
2 3 4 |
Táblázat létrehozása, ha nem létezik kategória (
category_id karakter változó(100), category_name karakter változó(100) ); |
a mintarekordokat is beillesztjük ebbe a táblázatba:
1
2 3 4 5 |
beszúrás a kategóriába (category_id,category_name)
értékek (‘M01’, ‘Feriperálok’), (‘M02’, ‘egyéb anyagok’), (‘M03’, ‘hálózatépítés’); |
a két táblázatnak a következőképpen kell kinéznie:
készlet táblázat
1
2 3 4 5 6 7 8 |
id / category_id / product_name / cikkszám / Leírás / ár | quantity
—-+————-+—————–+——-+————————-+——-+———- 1 | M01 | Monitor 22 hüvelyk | HW020 | számítógép monitor 22 hüvelyk | 300 | 100 2 | M02 | termikus paszta | HW040 | CPU termikus paszta | 2 | 130 3 | M03 | krimpelő eszköz | HW021 | hálózati eszköz | 14 | 10 4 | M01 | billentyűzet | HW098 | számítógépes billentyűzet | 3 | 25 5 | M01 | SSD 250GB | HW033 | szilárdtestalapú meghajtó / 24/60 (5 sor) |
kategória táblázat
1
2 3 4 5 6 |
category_id | category_name
————-+————————- M01 / Feriperálok M02 / különféle anyagok M03 / hálózatépítés (3 sor) |
Postgres Subqueries Example
most, hogy létrehoztuk a mintaadatkészletünket, megnézhetünk néhány példát, amelyek bemutatják a Postgres subqueries használatát:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
válasszon
id, terméknév, ár a készlet ahol ár > ( válasszon átlag (ár) a készlet ); |
beszéljük meg ezt a lekérdezést egy kicsit részletesebben.
- először figyelje meg a zárójelbe zárt lekérdezést:
1
2 3 4 |
válasszon
átlag (ár) tól készlet |
- a Postgres sorrendben hajtja végre a lekérdezéseket, a legbelső alkérdéstől kezdve.
- az alkérdezés feldolgozása után az eredmény visszatér a külső lekérdezéshez.
- végül a külső lekérdezés végrehajtásra kerül.
a kimenetnek valahogy így kell kinéznie:
1
2 3 4 |
id / terméknév / ár
—-+—————–+——- 1 | Monitor 22 hüvelyk | 300 (1 sor) |
nézzünk meg egy másik példát, ahol egy FROM
záradékban egy alkérdést használunk:
1
2 3 4 5 6 |
válassza a készlet lehetőséget.termék_neve, the_subquery.category_name
raktárról, (kategória kiválasztása.category_id, kategória.category_name, COUNT (category_id) összesen kategóriából csoport kategória szerint.category_id, kategória.category_name) the_subquery ahol the_subquery.category_id = készlet.category_id; |
1
2 3 |
(válassza a kategória lehetőséget.category_id, kategória.category_name, COUNT (category_id) összesen
kategóriából csoport kategória szerint.category_id, kategória.category_name) the_subquery |
a fenti lekérdezésben az alkeresést ‘the_subquery’ álnév alá helyeztük. Ezt az álnevet használják hivatkozásként az alkériára.
a kimenetnek valahogy így kell kinéznie:
1
2 3 4 5 6 7 8 |
termék_neve / kategória_neve
—————–+————————- SSD 250GB / Pheriperals billentyűzet | Pheriperals Monitor 22inch / Pheriperals termikus paszta / különféle anyagok krimpelő eszköz / hálózati (5 sor) |
következtetés
ha összetettebb lekérdezést kell létrehoznia a szükséges adatok megszerzéséhez, akkor a feladat végrehajtásához Postgres allekérdezésre lehet szükség. Az alkérések a külső lekérdezésbe vannak beágyazva; az ezekből visszaadott eredmények a fő lekérdezés WHERE
záradékának részeként kerülnek felhasználásra. Ebben a cikkben elmagyaráztuk, hogyan kell használni a Postgres allekérdezést, és megvizsgáltunk néhány példát az SQL utasításokra, amelyek allekérdezéseket tartalmaznak. Ezekkel a példákkal és magyarázatokkal nem okoz problémát az alkérdések végrehajtása a saját adatbázis-lekérdezéseiben.