CodeGym /Kursy /SQL SELF /Użycie tablic ( ARRAY)

Użycie tablic ( ARRAY)

SQL SELF
Poziom 16, Lekcja 2
Dostępny

Dzisiaj trochę pogadamy o tablicach — jednym z mocniejszych narzędzi PostgreSQL, które pozwala trzymać listę wartości jednego typu w jednej kolumnie. Bardziej szczegółowo ogarniemy tablice na kolejnych poziomach.

Kiedy ktoś mówi "tablice", od razu przychodzą na myśl listy. Pomyśl, jak zapisujesz listę zakupów przed wyjściem do sklepu: jabłka, banany, mleko, chleb. W PostgreSQL tablica to taki odpowiednik tej listy, gdzie możesz trzymać kilka wartości w jednym polu, przy czym każda wartość ma ten sam typ danych. Na przykład tablica liczb, tablica tekstów, tablica dat itd.

Podajmy kilka przykładów.

Tablica liczb:

{1, 2, 3, 4}

Tablica stringów:

{"apple", "banana", "cherry"}

Tablica dat:

{2024-10-01, 2024-10-02, 2024-10-03}

Tablica pozwala zapisywać wiele wartości w jednym polu, oszczędzając miejsce w tabeli i zwiększając elastyczność zapytań.

Po co są tablice? Główne zalety

Kompaktowe przechowywanie danych: trzymanie kilku wartości w jednym polu. To szczególnie przydatne dla danych, które są logicznie powiązane. Na przykład lista tagów do artykułu albo lista ocen studenta. Tworzyć osobną tabelę dla kilku tagów?

Wygoda pobierania: tablice pozwalają od razu pobrać całą listę wartości z jednego pola, a także łatwo manipulować pojedynczymi elementami tablicy.

Wydajność: w niektórych przypadkach tablice pozwalają uniknąć tworzenia dodatkowych tabel dla powiązanych danych, co może uprościć architekturę bazy i przyspieszyć development. I to jest spoko.

Jak pracować z tablicami w PostgreSQL?

Tworzenie tablicy w SELECT

Do zadania tablicy możesz użyć konstruktora ARRAY[]. Oto przykład:

-- Przykład tablicy liczb
SELECT ARRAY[1, 2, 3, 4];

-- Przykład tablicy stringów
SELECT ARRAY['apple', 'banana', 'cherry'];

Za proste. Stwórzmy tabelę i spróbujmy coś z niej wyciągnąć.

Tworzenie tabeli z tablicami

Na początek stwórzmy tabelę, gdzie jedna z kolumn będzie tablicą.

id name - VARCHAR(50) subjects - TEXT[]
1 Alex {Matematyka,Fizyka}
2 Maria {Chemia,Biologia,Angielski}
3 Peter {Informatyka}

Zobaczmy, co nam wyszło:

SELECT * FROM students;
id name subjects
1 Alex {Matematyka,Fizyka}
2 Maria {Chemia,Biologia,Angielski}
3 Peter {Informatyka}

Wyciąganie danych z tablic

Do wyciągania danych z tablicy PostgreSQL daje kilka funkcji i operatorów.

Wyciąganie elementu tablicy

Żeby dostać element tablicy po indeksie, używasz nawiasów kwadratowych []. Uwaga: numeracja zaczyna się od 1 (a nie od 0 jak w większości języków programowania).

-- Pobieramy pierwszy przedmiot każdego studenta
SELECT name, subjects[1] AS pierwszy_przedmiot FROM students;

I taki mamy wynik:

name pierwszy_przedmiot
Alex Matematyka
Maria Chemia
Peter Informatyka

Wyciąganie całego wiersza tablicy

Żeby dostać wszystkie elementy tablicy, używasz zwykłego SELECT:

SELECT name, subjects FROM students;

Szukajka wartości w tablicy

Czasem trzeba sprawdzić, czy tablica zawiera konkretną wartość. Do tego jest operator ANY.

-- Wybierz studentów, którzy uczą się "Matematyka"
SELECT name
FROM students
WHERE 'Matematyka' = ANY(subjects);

Wynik zapytania:

name
Alex

W PostgresQL jest masa funkcji i operatorów do pracy z tablicami, ale o tym pogadamy na kolejnych poziomach :P

Typowe błędy przy pracy z tablicami

Mieszanie indeksowania od 0 i od 1.

W PostgreSQL indeksowanie tablicy zaczyna się od 1. Jeśli jesteś przyzwyczajony do języków jak Python czy JavaScript, łatwo się pomylić.

Puste tablice.

Pusta tablica {} i NULL — to nie to samo w PostgreSQL. Jeśli porównujesz tablice, nie myl tych pojęć.

Praca z dużymi tablicami.

Trzymanie ogromnej ilości danych w tablicy może wydłużyć czas przetwarzania zapytań. Używaj tablic do niewielkich ilości danych.

2
Zadanie
SQL SELF, poziom 16, lekcja 2
Niedostępne
Wyszukiwanie wartości w tablicy
Wyszukiwanie wartości w tablicy
2
Zadanie
SQL SELF, poziom 16, lekcja 2
Niedostępne
Wyodrębnianie pierwszego elementu tablicy
Wyodrębnianie pierwszego elementu tablicy
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION