
Jeśli kiedykolwiek pracowałeś z danymi w formacie JSON w bazach danych SQL, na pewno natknąłeś się na funkcję JSON_EXTRACT
. Jest to niezwykle przydatne narzędzie, które pozwala wydobywać konkretne wartości ze struktury JSON. W tym artykule wyjaśnię, jak działa JSON_EXTRACT
w języku SQL na praktycznych przykładach.
Czym jest JSON_EXTRACT?
Funkcja JSON_EXTRACT
służy do pobierania danych z kolumny zawierającej treść w formacie JSON. Dzięki niej możemy uzyskać dostęp do pojedynczych wartości, tablic czy nawet zagnieżdżonych obiektów.
Podstawowa składnia tej funkcji wygląda tak:
JSON_EXTRACT(json_doc, path)
json_doc
– ciąg znaków w formacie JSONpath
– ścieżka do wartości, którą chcemy pobrać
Przykłady użycia JSON_EXTRACT
Aby lepiej zobrazować działanie JSON_EXTRACT
, posłużę się kilkoma praktycznymi przykładami.
1. Pobieranie pojedynczej wartości
Załóżmy, że w naszej bazie mamy tabelę users
, a w jednej z kolumn przechowujemy dane w formacie JSON:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
user_data JSON
);
Dodajmy przykładowe dane:
INSERT INTO users (user_data) VALUES
('{"name": "Jan", "age": 30, "city": "Warszawa"}'),
('{"name": "Anna", "age": 25, "city": "Kraków"}');
Chcąc pobrać imię użytkownika, możemy wykonać zapytanie:
SELECT JSON_EXTRACT(user_data, '$.name') FROM users;
Wynik:
JSON_EXTRACT(user_data, '$.name’) |
---|
„Jan” |
„Anna” |
2. Pobieranie wartości zagnieżdżonych
Co jeśli mamy bardziej skomplikowaną strukturę danych?
INSERT INTO users (user_data) VALUES
('{"name": "Kuba", "contact": {"email": "kuba@example.com", "phone": "123-456-789"}}');
Aby pobrać numer telefonu:
SELECT JSON_EXTRACT(user_data, '$.contact.phone') FROM users;
Wynik:
JSON_EXTRACT(user_data, '$.contact.phone’) |
---|
„123-456-789” |
3. Pobieranie wartości z tablicy
JSON często zawiera tablice wartości. Załóżmy, że mamy następującą strukturę:
INSERT INTO users (user_data) VALUES
('{"name": "Mateusz", "skills": ["SQL", "Python", "JavaScript"]}');
Aby pobrać pierwszy element z tablicy skills
:
SELECT JSON_EXTRACT(user_data, '$.skills[0]') FROM users;
Wynik:
JSON_EXTRACT(user_data, '$.skills[0]’) |
---|
„SQL” |
Różnica między JSON_EXTRACT a JSON_UNQUOTE
Być może zauważyłeś, że wartości zwracane przez JSON_EXTRACT
są ujęte w cudzysłowy. Dzieje się tak, ponieważ funkcja zwraca wynik w typie JSON
, nawet jeśli to zwykły ciąg znaków.
Jeśli chcemy pozbyć się cudzysłowów, możemy użyć JSON_UNQUOTE
:
SELECT JSON_UNQUOTE(JSON_EXTRACT(user_data, '$.name')) FROM users;
Wynik:
JSON_UNQUOTE(JSON_EXTRACT(user_data, '$.name’)) |
---|
Jan |
Anna |
Obsługa wartości null
Gdy ścieżka wskazana w JSON_EXTRACT
nie istnieje w JSON, funkcja zwraca NULL
.
SELECT JSON_EXTRACT(user_data, '$.non_existing_key') FROM users;
Wynik:
JSON_EXTRACT(user_data, '$.non_existing_key’) |
---|
NULL |
Podsumowanie
Funkcja JSON_EXTRACT
w języku SQL to potężne narzędzie, które pozwala na skuteczne wydobywanie danych z obiektów JSON. Dzięki niej możemy:
- Pobierać pojedyncze wartości
- Przetwarzać zagnieżdżone obiekty
- Uzyskiwać dostęp do elementów tablic
Mam nadzieję, że teraz już wiesz, jak działa JSON_EXTRACT
w języku SQL i jak go używać w praktyce.
Inny ciekawy artykuł:
Jak działa CASE_INSENSITIVE_COMPARE 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.