Postgres underfrågor

introduktion

när du skapar en SQL-sats i PostgreSQL kan det hända att du måste bädda in en annan SQL-fråga i ditt uttalande. Dessa kapslade eller inbäddade frågor kallas underfrågor, och de ger ett effektivt sätt att få de data du behöver från en SQL-sats. I den här artikeln kommer vi att titta närmare på Postgres-underfrågor och granska några exempel som visar hur man använder dem.

förutsättning

innan du börjar denna handledning, se till att du har installerat och konfigurerat följande på din maskin:

  • PostgreSQL

grundläggande PostgreSQL-kunskaper krävs också för att kunna följa med handledningen.

Vad är en Postgres Subquery?

som namnet antyder är en Postgres-fråga en fråga kapslad i en annan SQL-fråga eller ett uttalande. Underfrågan Returnerar data som sedan används i huvudfrågan som en del av villkoren som anges i WHERE – satsen.

skapa Exempeldataset

i det här avsnittet skapar vi ett exempeldataset som vi kan använda i våra exempel. Vi måste logga in på Postgres-skalet för att skapa databasen och tabellen.

  • vi kan skapa vår databas med följande kommando:
1
skapa databasprodukt
  • vi kan sedan skapa tabeller för databasen med följande struktur:
1
2
3
4
5
6
7
8
9
10
Skapa tabell om det inte finns lager (
ID seriell primärnyckel,
category_id tecken varierande (100),
product_name tecken varierande (100),
sku tecken varierande (100),
beskrivning tecken varierande (100),
pris INT,
kvantitet int
);

slutligen sätter vi in provposter:

1
2
3
4
5
6
7
infoga i lager (id,category_id, product_name, sku, beskrivning, pris, kvantitet)
värden
(1, ’M01’, ’Monitor 22inch’, ’HW020’, ’datorskärm 22inch’, 300, 100),
(2,’M02′, ’termisk pasta’, ’HW040’, ’CPU termisk pasta’, 2, 130),
(3,’M03′, ’pressverktyg’, ’HW021’, ’nätverksverktyg’, 14, 10),
(4,’M01′, ’tangentbord’, ’HW098’, ’datortangentbord’, 3, 25),
(5,’M01′, ’SSD 250GB’, ’HW033′,’ Solid State Drive’, 24, 60);

låt oss nu skapa en annan tabell med namnet ’kategori’ med följande struktur:

1
2
3
4
Skapa tabell om inte finns kategori (
category_id tecken varierande (100),
category_name tecken varierande(100)
);

vi lägger också in exempelposter i den här tabellen:

1
2
3
4
5
infoga i kategori (category_id, category_name)
värden
(’M01′,’Pheriperals’),
(’M02’, ’Diverse Material’),
(’M03’, ’nätverk’);

de två tabellerna ska se ut som följande:

LAGERTABELL

1
2
3
4
5
6
7
8
id / category_id / product_name / sku / beskrivning / pris | quantity
—-+————-+—————–+——-+————————-+——-+———-
1 | M01 | bildskärm 22 tum | HW020 | datorskärm 22 tum | 300 | 100
2 | M02 | termisk pasta | HW040 | CPU termisk pasta | 2 | 130
3 | M03 | krympverktyg | HW021 | nätverksverktyg | 14 | 10
4 | M01 | tangentbord | HW098 | datortangentbord | 3 | 25
5 | M01 / SSD 250GB | HW033 / Solid State Drive | 24 | 60
( 5 rader)

kategori tabell

1
2
3
4
5
6
category_id / category_name
————-+————————-
M01 / Pheriperals
M02 / Diverse Material
M03 / nätverk
(3 rader)

Postgres Subqueries exempel

nu när vi har skapat vårt exempel dataset, vi kan titta på några exempel som illustrerar hur man använder Postgres subqueries:

1
2
3
4
5
6
7
8
9
10
11
12
13
välj
id,
Produktnamn,
pris
från
lager
var
pris > (
välj
genomsnitt (pris)
från
lager
);

låt oss diskutera denna fråga lite mer detaljerat.

  • lägg först märke till frågan som är innesluten inom parentes:
1
2
3
4
välj
genomsnitt (pris)
från
lager
  • Postgres utför frågorna i ordning, med början från den innersta underfrågan.
  • efter bearbetning av underfrågan kommer resultatet att returneras till den yttre frågan.
  • slutligen kommer den yttre frågan att utföras.

utgången ska se ut så här:

1
2
3
4
id / Produktnamn / pris
—-+—————–+——-
1 | övervaka 22 tum / 300
( 1 rad)

Låt oss titta på ett annat exempel där vi använder en underfråga i en FROM – klausul:

1
2
3
4
5
6
välj lager.Produktnamn, the_subquery.category_name
från lager,
(Välj kategori.category_id, kategori.category_name, COUNT (category_id) som totalt
från kategori
grupp efter kategori.category_id, kategori.category_name) the_subquery
där the_subquery.category_id = lager.kategori_id;
1
2
3
(Välj kategori.category_id, kategori.category_name, COUNT (category_id) som totalt
från kategori
grupp efter kategori.category_id, kategori.kategori_namn) the_subquery

i ovanstående fråga placerade vi underfrågan under aliaset ’the_subquery’. Detta alias kommer att användas som referens till underfrågan.

utgången ska se ut så här:

1
2
3
4
5
6
7
8
Produktnamn / kategorinamn
—————–+————————-
SSD 250GB / Pheriperals
tangentbord / Pheriperals
övervaka 22inch / Pheriperals
termisk pasta / Diverse Material
krympverktyg / nätverk
(5 rader)

slutsats

om du behöver konstruera en mer komplex Fråga för att få de data du behöver kan en Postgres-underfråga vara nödvändig för att utföra uppgiften. Underfrågor är kapslade inuti den yttre frågan; resultaten som returneras från dem används sedan som en del av WHERE – satsen i huvudfrågan. I den här artikeln förklarade vi hur man använder en Postgres-underfråga och tittade på några exempel på SQL-satser som inkluderar underfrågor. Med dessa exempel och förklaringar har du inga problem att implementera underfrågor i dina egna databasfrågor.

Lämna ett svar

Din e-postadress kommer inte publiceras.