Massivlərlə işləmək təkcə onları yaratmaq və saxlamaqla bitmir — tez-tez ayrı-ayrı elementləri çıxarmaq və ya onların tərkibini analiz etmək lazım olur. PostgreSQL belə əməliyyatlar üçün bir neçə daxili funksiya təklif edir. Gəlin, bunlara bir-bir baxaq.
unnest() funksiyası: massivləri açmaq
unnest() funksiyası massivləri sözün əsl mənasında açır, yəni hər bir elementi ayrıca sətrə çevirir. Bu xüsusilə o zaman faydalıdır ki, massivdəki məlumatlarla cədvəl kimi işləmək istəyirsən.
Nümunə 1: Sadə massiv açmaq
Tutaq ki, bizdə fakültə adlarından ibarət massiv var:
SELECT ARRAY['İnformatika', 'Riyaziyyat', 'Fizika'] AS fakültələr;
İndi isə hər elementi ayrıca sətir kimi çıxarmaq lazımdır. unnest() istifadə edirik:
SELECT unnest(ARRAY['İnformatika', 'Riyaziyyat', 'Fizika']) AS fakültə;
Nəticə:
| fakültə |
|---|
| İnformatika |
| Riyaziyyat |
| Fizika |
Nümunə 2: Massivin cədvəldə açılması
Tutaq ki, bizdə courses adlı cədvəl var:
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY,
course_name TEXT,
tags TEXT[]
);
INSERT INTO courses (course_name, tags)
VALUES
('Alqoritmlər', ARRAY['Proqramlaşdırma', 'İnformatika']),
('Xətti cəbr', ARRAY['Riyaziyyat', 'Cəbr']),
('Fizikanın əsasları', ARRAY['Fizika', 'Ümumi']);
İndi isə bütün tag-ları massivdən çıxaraq:
SELECT course_name, unnest(tags) AS tag
FROM courses;
Nəticə:
| course_name | tag |
|---|---|
| Alqoritmlər | Proqramlaşdırma |
| Alqoritmlər | İnformatika |
| Xətti cəbr | Riyaziyyat |
| Xətti cəbr | Cəbr |
| Fizikanın əsasları | Fizika |
| Fizikanın əsasları | Ümumi |
Görürsən ki, massivdəki hər sətir ayrıca cədvəl sətrinə çevrilir.
array_length() funksiyası: massiv ölçüsünü tapmaq
Massivlərlə işləmək üçün ikinci vacib funksiya array_length()-dir. Bu funksiya massivdəki elementlərin sayını (yəni uzunluğunu) göstərir, istədiyin ölçü üzrə.
Nümunə 1: Birölçülü massivdə element sayı
Bir massiv götürək:
SELECT ARRAY['Alma', 'Banan', 'Portağal'] AS meyvələr;
Əgər massivdə neçə meyvə olduğunu bilmək istəyirsənsə:
SELECT array_length(ARRAY['Alma', 'Banan', 'Portağal'], 1) AS uzunluq;
Nəticə:
| uzunluq |
|---|
| 3 |
Burada 1 massiv ölçüsünü göstərir. PostgreSQL-də massivlər çoxölçülü ola bilər (məsələn, ikiölçülü massivlər), amma bu barədə başqa dərsdə danışarıq.
Nümunə 2: Cədvəldə massivdə element sayı
Gəlin, hər kursda neçə tag olduğunu yoxlayaq:
SELECT course_name, array_length(tags, 1) AS tag_sayi
FROM courses;
Nəticə:
| course_name | tag_sayi |
|---|---|
| Alqoritmlər | 2 |
| Xətti cəbr | 2 |
| Fizikanın əsasları | 2 |
Funksiya sadəcə deyir: “Burada iki element var!” — və bu, məlumat analizində işini xeyli asanlaşdırır.
array_position() funksiyası: massivdə dəyər axtarışı
İndi təsəvvür et ki, massivdə konkret bir elementi tapmaq istəyirsən. array_position() funksiyası köməyə gəlir: bu funksiya elementin massivdə ilk dəfə harada olduğunu göstərir.
Nümunə 1: Element axtarışı
Bir massivimiz var:
SELECT ARRAY['Qırmızı', 'Mavi', 'Yaşıl', 'Sarı'] AS rənglər;
"Mavi" elementinin yerini tapmağa çalışaq:
SELECT array_position(ARRAY['Qırmızı', 'Mavi', 'Yaşıl', 'Sarı'], 'Mavi') AS pozisiya;
Nəticə:
| pozisiya |
|---|
| 2 |
Əgər element yoxdur, funksiya NULL qaytarır. Yoxlayaq:
SELECT array_position(ARRAY['Qırmızı', 'Mavi', 'Yaşıl', 'Sarı'], 'Qara') AS pozisiya;
Nəticə:
| pozisiya |
|---|
| NULL |
Nümunə 2: Cədvəldə massivdə axtarış
Görmək istəyirsən ki, hansı kursda "İnformatika" tag-ı var. Əvvəlcə lazım olan sətrləri tapırıq:
SELECT course_name, array_position(tags, 'İnformatika') AS pozisiya
FROM courses;
Nəticə:
| course_name | pozisiya |
|---|---|
| Alqoritmlər | 2 |
| Xətti cəbr | NULL |
| Fizikanın əsasları | NULL |
İndi isə filtr əlavə edirik ki, yalnız tag olan sətrlər qalsın:
SELECT course_name
FROM courses
WHERE array_position(tags, 'İnformatika') IS NOT NULL;
Nəticə:
| course_name |
|---|
| Alqoritmlər |
array_position() funksiyası massivdə məlumatı tez tapmağa imkan verir və bu, PostgreSQL-də massivlərlə işləmək üçün əsas funksiyalardan biridir.
Funksiyaların praktik tətbiqi
unnest()— massivləri sətrlərə çevirmək üçün istifadə et. Bu, məlumat analizi, hesabatlar və tag-larla işləmək üçün vacibdir.array_length()— massiv uzunluğunu yoxlamaq üçün idealdır. Məsələn, məlumatların doğruluğunu yoxlamaq üçün: massiv boş olmasın deyə istifadə edə bilərsən.array_position()— element axtarışı üçün əla alətdir, istər məhsul kateqoriyaları, istər tələbənin layihədə iştirakı, istərsə də təsvirlərdə açar sözlər olsun.
Funksiyalardan istifadə zamanı tipik səhvlər
unnest()bir neçə sütunda massivə tətbiq ediləndə sətrlərin sayını ikiqat artıra bilər. BunuJOIN LATERALvə yaCROSS JOINilə həll etmək olar, amma diqqətli ol.array_length()boş massiv üçünNULLqaytarır. Əgər massiv boş ola bilərsə, bunu ayrıca yoxla.array_position()element yoxdursaNULLqaytarır. Ona görə də həmişə bu halı filtrdə nəzərə al (IS NOT NULL).
Real praktikadan nümunələr
PostgreSQL-də massivlər — təkcə nəzəriyyə deyil, real layihələrdə də super işləyən alətdir. Məsələn, blog aparırsan və hər məqalənin tag-ları var — massiv sayəsində məqalələri istədiyin mövzuya görə asanlıqla filtrləyə və ya populyar kateqoriyaların topunu düzəldə bilərsən.
Və ya istifadəçi davranışını analiz edirsən, hansı ki, bir neçə kurs və ya məhsul seçir. Bütün bu seçimləri massivdə saxlamaq rahatdır — və işləmək də bir o qədər rahatdır.
Həmçinin massivlər məlumatların doğruluğunu yoxlamağa kömək edir: array_length() ilə, məsələn, elementlərin sayını məhdudlaşdıra bilərsən — istifadəçi beşdən çox seçim etməsin deyə.
GO TO FULL VERSION