Úvod
když vytváříte příkaz SQL v PostgreSQL, možná zjistíte, že je třeba do příkazu Vložit další dotaz SQL. Tyto vnořené nebo vložené dotazy jsou známé jako poddotazy a poskytují efektivní způsob, jak získat potřebná data z příkazu SQL. V tomto článku se blíže podíváme na poddotazy Postgres a přezkoumáme některé příklady, které ukazují, jak je používat.
předpoklad
než začnete tento tutoriál, ujistěte se, že jste na svém počítači nainstalovali a nakonfigurovali následující:
- PostgreSQL
základní znalosti PostgreSQL je také nutné, aby bylo možné sledovat spolu s tutoriálem.
co je poddotaz Postgres?
jak název napovídá, dotaz Postgres je dotaz vnořený do jiného dotazu nebo příkazu SQL. Poddotaz vrací data, která jsou poté použita v hlavním dotazu jako součást podmínek uvedených v klauzuli WHERE
.
vytvoření vzorové datové sady
v této části vytvoříme vzorovou datovou sadu, kterou můžeme použít v našich příkladech. Budeme se muset přihlásit do shellu Postgres, abychom vytvořili databázi a tabulku.
- můžeme vytvořit naši databázi pomocí následujícího příkazu:
1
|
vytvořit databázový produkt
|
- pak můžeme vytvořit tabulky pro databázi s následující strukturou:
1
2 3 4 5 6 7 8 9 10 |
vytvořit tabulku, pokud neexistuje sklad (
ID sériový primární klíč, category_id character VARIING(100), product_name CHARACTER VARIING (100), sku CHARACTER VARIING (100), popis CHARACTER VARIING(100), cena INT, množství INT ); |
nakonec vložíme ukázkové záznamy:
1
2 3 4 5 6 7 |
vložit do skladu (id,category_id, product_name, sku, popis, cena, množství)
hodnoty (1, ‚M01‘, ‚Monitor 22inch‘, ‚HW020‘, ‚počítačový monitor 22inch‘, 300, 100), (2,’M02′,’tepelná pasta‘,‘ HW040′, ‚tepelná pasta CPU‘, 2, 130), (3,’M03′, ‚lisovací nástroj‘, ‚HW021‘, ‚síťový nástroj‘, 14, 10), (4,’M01′, ‚klávesnice‘, ‚HW098‘, ‚klávesnice počítače‘, 3, 25), (5,’M01′, ‚SSD 250GB‘, ‚HW033‘, ‚Solid State Drive‘, 24, 60); |
nyní vytvoříme další tabulku s názvem „Kategorie“ pomocí následující struktury:
1
2 3 4 |
vytvořit tabulku, pokud neexistuje Kategorie (
category_id character VARIING (100), category_name character VARIING(100) ); |
do této tabulky vložíme také ukázkové záznamy:
1
2 3 4 5 |
vložit do kategorie (category_id,category_name)
hodnoty (‚M01′,’Pheriperals‘), (‚M02‘, ‚různé materiály‘), (‚M03‘, ‚Networking‘); |
dvě tabulky by měly vypadat následovně:
skladem
1
2 3 4 5 6 7 8 |
id / category_id | product_name | sku / popis / cena | quantity
—-+————-+—————–+——-+————————-+——-+———- 1 | M01 / Monitor 22inch / HW020 / počítačový monitor 22inch | 300 / 100 2 / M02 / tepelná pasta / HW040 / CPU tepelná pasta / 2 / 130 3 | M03 / lisovací nástroj / HW021 / síťový nástroj / 14 / 10 4 / M01 / klávesnice / HW098 / počítačová klávesnice / 3 / 25 5 / M01 / SSD 250GB / HW033 / Solid State Drive / 24 / 60 (5 řádků) |
tabulka kategorií
1
2 3 4 5 6 |
category_id / category_name
————-+————————- M01 / Pheriperals M02 / různé materiály M03 / Networking (3 řádky) |
příklad poddotazů Postgres
Nyní, když jsme vytvořili náš vzorový datový soubor, můžeme se podívat na některé příklady, které ilustrují, jak používat poddotazy Postgres:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
vyberte
id, název_produktu, cena z skladem kde cena > ( vyberte AVG (cena) z skladem ); |
podívejme se na tento dotaz podrobněji.
- nejprve si všimněte dotazu, který je uveden v závorkách:
1
2 3 4 |
vyberte
AVG (cena) z skladem |
- Postgres provádí dotazy v pořadí, počínaje nejvnitřnějším poddotazem.
- po zpracování poddotazu bude výsledek vrácen do vnějšího dotazu.
- nakonec bude proveden vnější dotaz.
výstup by měl vypadat takto:
1
2 3 4 |
id / product_name / cena
—-+—————–+——- 1 | Monitor 22inch | 300 (1 řádek) |
podívejme se na další příklad, kde používáme poddotaz v klauzuli FROM
:
1
2 3 4 5 6 |
vyberte sklad.product_name, the_subquery.category_name
ze skladu, (vyberte kategorii.category_id, Kategorie.category_name, COUNT (category_id) as total FROM category GROUP BY category.category_id, Kategorie.category_name) the_subquery kde the_subquery.category_id = sklad.category_id; |
1
2 3 |
(vyberte kategorii.category_id, Kategorie.category_name, COUNT (category_id) as total
FROM category GROUP BY category.category_id, Kategorie.category_name) the_subquery |
ve výše uvedeném dotazu jsme umístili poddotaz pod alias „the_subquery“. Tento alias bude použit jako odkaz na poddotaz.
výstup by měl vypadat takto:
1
2 3 4 5 6 7 8 |
product_name / category_name
—————–+————————- SSD 250GB / Pheriperals klávesnice / Pheriperals Monitor 22inch | Pheriperals tepelná pasta | různé materiály krimpovací nástroj | síť (5 řádků) |
závěr
pokud potřebujete vytvořit složitější dotaz, abyste získali potřebná data, může být pro splnění úkolu nezbytný poddotaz Postgres. Poddotazy jsou vnořeny uvnitř vnějšího dotazu; výsledky z nich vrácené jsou pak použity jako součást klauzule WHERE
v hlavním dotazu. V tomto článku jsme vysvětlili, jak používat poddotaz Postgres, a podívali jsme se na některé příklady příkazů SQL, které obsahují poddotazy. S těmito příklady a vysvětleními nebudete mít problém s implementací poddotazů do vlastních databázových dotazů.