Baza wiedzy / SQL
Jak działa UNNEST w języku SQL? Przykłady zastosowania

Pracując z bazami danych, często spotykam się z koniecznością pracy z tablicami wielowartościowymi. Jednym z operacyjnych narzędzi, które ułatwia manipulację takimi danymi, jest funkcja UNNEST w SQL. Pozwala ona na “rozpakowanie” tablicy do postaci wierszy, co znacznie upraszcza agregacje oraz analizy. W tym artykule pokażę, jak działa UNNEST, jakie ma zastosowania i na co zwrócić uwagę przy jego używaniu.
Co to jest UNNEST?
Funkcja UNNEST w SQL służy do zamiany tablicy na zbiór pojedynczych wierszy. Przydaje się zwłaszcza wtedy, gdy w bazie danych przechowujemy wartości w postaci tablicy i chcemy pracować z nimi jak z normalnymi wierszami tabeli.
Podstawowa składnia UNNEST
Najprostsza wersja zapytania z wykorzystaniem UNNEST wygląda tak:
SELECT UNNEST(ARRAY[1, 2, 3, 4, 5]) AS liczba;
Wynikiem tego zapytania będzie:
| liczba |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
UNNEST w połączeniu z tabelami
Często mamy do czynienia z kolumnami przechowującymi wartości w postaci tablic. Poniżej przykład, w którym mamy tabelę zamowienia zawierającą identyfikator zamówienia i listę jego produktów:
CREATE TABLE zamowienia (
id SERIAL PRIMARY KEY,
produkty TEXT[]
);
INSERT INTO zamowienia (produkty) VALUES
(ARRAY['Laptop', 'Myszka', 'Klawiatura']),
(ARRAY['Monitor']),
(ARRAY['Drukarka', 'Papier']);
Teraz chcemy uzyskać listę wszystkich produktów wraz z identyfikatorem zamówienia. Tutaj użyjemy UNNEST w połączeniu z LATERAL:
SELECT z.id, p.produkt
FROM zamowienia z,
LATERAL UNNEST(z.produkty) AS p(produkt);
Wynik:
| id | produkt |
|---|---|
| 1 | Laptop |
| 1 | Myszka |
| 1 | Klawiatura |
| 2 | Monitor |
| 3 | Drukarka |
| 3 | Papier |
UNNEST z wieloma tablicami
Możliwe jest również “rozpakowanie” kilku tablic jednocześnie, jeśli mają one ten sam rozmiar:
SELECT *
FROM UNNEST(ARRAY['Jan', 'Anna', 'Piotr'], ARRAY[30, 25, 40])
AS dane(imie, wiek);
Rezultat będzie wyglądać tak:
| imie | wiek |
|---|---|
| Jan | 30 |
| Anna | 25 |
| Piotr | 40 |
Główne zastosowania UNNEST
Funkcja UNNEST jest niezwykle przydatna w różnych scenariuszach:
- Przetwarzanie danych zapisanych jako tablice i konwersja ich na wiersze.
- Łączenie tablic z danymi w innych tabelach poprzez operatory
JOIN. - Analiza danych, gdzie wartości są przechowywane w strukturach tablicowych.
- Filtrowanie i grupowanie wartości w tablicach poprzez standardowe funkcje agregujące SQL.
O czym warto pamiętać?
Podczas korzystania z UNNEST warto mieć na uwadze kilka rzeczy:
- Sparowanie wielu tablic musi uwzględniać ich długość. Jeśli długości się nie zgadzają, SQL zwróci błąd.
- Użycie
UNNESTmoże wpłynąć na wydajność. Przy dużych zbiorach danych lepiej wcześniej przemyśleć indeksację. - Łączenie z innymi tabelami wymaga
LATERAL. Jeśli korzystam zUNNESTna kolumnie w tabeli, często muszę użyćLATERALdo poprawnego działania.
Podsumowanie
UNNEST w języku SQL to potężne narzędzie pozwalające na zamianę tablic na wiersze, co ułatwia ich przetwarzanie i analizę. Funkcja ta znajduje zastosowanie w analizie danych, raportowaniu i łączeniu z innymi tabelami. Warto jednak pamiętać o wpływie na wydajność i konieczności stosowania LATERAL, gdy pracuje się z tabelami. Mam nadzieję, że ten artykuł rozjaśnił działanie UNNEST i ułatwi jego wykorzystanie w praktycznych scenariuszach.
