Poddotazy Postgres

Ú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ů.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.