CodeGym /Kurslar /SQL SELF /Massivlərdə məlumatların dəyişdirilməsi: array_app...

Massivlərdə məlumatların dəyişdirilməsi: array_append(), array_remove()

SQL SELF
Səviyyə , Dərs
Mövcuddur

Bəzən massivləri sadəcə oxumaq yox, həm də dəyişmək lazım olur: yeni dəyər əlavə etmək, köhnəni silmək, tərkibi yeniləmək. Xoşbəxtlikdən, PostgreSQL-də bunun üçün xüsusi funksiyalar var və onlar sayəsində massivlərin tərkibini rahat idarə edə bilərsən, əllə yazmağa ehtiyac qalmır: array_append()array_remove(). Gəlin baxaq, bunlar necə işləyir.

array_append() ilə massivə element əlavə etmək

array_append() funksiyası massivə yeni element əlavə etmək üçündür və həmişə massivə axırda əlavə edir. İki arqument qəbul edir:

  1. Dəyişmək istədiyin orijinal massiv.
  2. Massivə əlavə etmək istədiyin dəyər.

Nümunə 1: Sadə ədədi massiv

Tutaq ki, projects adlı cədvəlimiz var və team_members sütununda layihə üzərində işləyən istifadəçilərin id-ləri massiv şəklində saxlanılır.

CREATE TABLE projects (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    team_members INT[]
);

-- Bir neçə sətr əlavə edək
INSERT INTO projects (name, team_members)
VALUES
('Layihə A', ARRAY[1, 2, 3]),
('Layihə B', ARRAY[4, 5]);

İndi "Layihə A" layihəmiz var və team_members massivinə yeni üzv, id-si 7 olan istifadəçini əlavə etmək istəyirik. array_append() istifadə edirik:

UPDATE projects
SET team_members = array_append(team_members, 7)
WHERE name = 'Layihə A';

-- Nəticəyə baxaq:
SELECT * FROM projects;

Nəticə:

id name team_members
1 Layihə A {1,2,3,7}
2 Layihə B {4,5}

Gördüyün kimi, ID-si 7 olan üzv uğurla massivə əlavə olundu!

Nümunə 2: Mətn elementlərinin əlavə olunması

Eyni array_append() funksiyasını başqa tip massivlər üçün də istifadə edə bilərsən. Məsələn, məhsul kateqoriyalarının massivinə yeni kateqoriya əlavə edək.

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    categories TEXT[]
);

-- Məhsulu kateqoriyalarla əlavə edirik
INSERT INTO products (name, categories)
VALUES
('Smartfon', ARRAY['Elektronika', 'Qadcetlər']),
('Noutbuk', ARRAY['Kompüterlər', 'Elektronika']);

-- "Smartfon" üçün yeni "Populyar" kateqoriyası əlavə edirik
UPDATE products
SET categories = array_append(categories, 'Populyar')
WHERE name = 'Smartfon';

-- Nəticəyə baxaq:
SELECT * FROM products;

Nəticə:

id name categories
1 Smartfon {Elektronika,Qadcetlər,Populyar}
2 Noutbuk {Kompüterlər,Elektronika}

array_remove() ilə massivdən element silmək

array_append() yeni task əlavə etmək kimidirsə, array_remove() artıq bitmiş taskı siyahıdan silmək üçündür. Bu funksiya aşağıdakı arqumentləri qəbul edir:

  1. Orijinal massiv.
  2. Silinməsini istədiyin dəyər.

Nümunə 1: Ədədi massivdən elementin silinməsi

Gəlin yenə projects cədvəlinə baxaq. Məlum oldu ki, ID-si 7 olan üzv artıq "Layihə A" layihəsində işləmir. Onu team_members massivindən silirik:

UPDATE projects
SET team_members = array_remove(team_members, 7)
WHERE name = 'Layihə A';

-- Nəticəyə baxaq:
SELECT * FROM projects;

Nəticə:

id name team_members
1 Layihə A {1,2,3}
2 Layihə B {4,5}

array_remove() funksiyası ID-si 7 olan üzvü uğurla sildi.

Nümunə 2: Mətn elementinin silinməsi

İndi isə products cədvəlinə baxaq. Əgər "Populyar" kateqoriyası artıq smartfon üçün aktual deyilsə, onu silə bilərik:

UPDATE products
SET categories = array_remove(categories, 'Populyar')
WHERE name = 'Smartfon';

-- Nəticəyə baxaq:
SELECT * FROM products;

Nəticə:

id name categories
1 Smartfon {Elektronika,Qadcetlər}
2 Noutbuk {Kompüterlər,Elektronika}
Vacibdir:

əgər silmək istədiyin element massivdə yoxdursa, array_remove() massivə heç bir dəyişiklik etmir. Bu çox rahatdır, çünki heç bir error çıxmır.

array_append()array_remove() bir yerdə istifadə etmək

Bəzən əvvəlcə elementin massivdə olmadığından əmin olmaq, sonra əlavə etmək lazımdır. Bunu funksiyaları birləşdirərək edə bilərsən:

Nümunə: Unikal elementlərin əlavə olunması

Gəlin yoxlayaq ki, ID-si 7 olan üzv massivə yalnız orada yoxdursa əlavə olunur. Bunun üçün array_remove() ilə yoxlama aparırıq:

UPDATE projects
SET team_members = array_append(team_members, 7)
WHERE name = 'Layihə A' AND NOT (team_members @> ARRAY[7]);

-- Nəticəyə baxaq:
SELECT * FROM projects;

İzah:

  • @> operatoru massivdə 7 elementinin olub-olmadığını yoxlayır.
  • Əgər team_members artıq 7 saxlayırsa, əlavə olunmur.

Tipik səhvlər və tövsiyələr

1. NULL massivə əlavə etmək cəhdi. Əgər array_append() ilə NULL əlavə etməyə çalışsan (array_append(team_members, NULL) kimi), massivə NULL dəyəri əlavə olunacaq. Heç bir error çıxmayacaq, amma nəticə gözlədiyin kimi olmaya bilər. Bunu istəmirsənsə, əvvəlcədən dəyərin NULL olmadığını yoxla.

-- Yoxlama nümunəsi:
UPDATE projects
SET team_members = array_append(team_members, COALESCE(NULL, -1))
WHERE name = 'Layihə A';

2. Massivdə fərqli data tipləri. PostgreSQL-də massivlər yalnız eyni tipli dəyərlər saxlamalıdır. Məsələn, ədədi massivə string əlavə edə bilməzsən:

-- Bu error verəcək:
UPDATE projects
SET team_members = array_append(team_members, 'example');

Bunu önləmək üçün data tiplərinin uyğun olduğuna əmin ol. Əmin deyilsənsə, dəyəri :: ilə uyğun tipə çevir:

-- Tip çevirmə nümunəsi:
UPDATE projects
SET team_members = array_append(team_members, '5'::INT);
2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Massivə element əlavə etmək
Massivə element əlavə etmək
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION