
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
UNNEST
moż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 zUNNEST
na kolumnie w tabeli, często muszę użyćLATERAL
do 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.
Inny ciekawy artykuł:
Jak działa ARRAY_AGG w języku SQL? Przykłady zastosowania
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.