Təsəvvür elə, sən database administratorusan və hansısa qeydləri dəyişmək və ya silmək lazımdır. Amma birdən səhvən hər şeyi yenilədin və ya sildin? WHERE operatorundan istifadə — sənin "sığorta polisin"dir, belə fəlakətli səhvlərdən qoruyur. Bu, dəqiq olaraq hansı sətirlərin təsirlənəcəyini göstərməyə imkan verir.
Məsələn:
UPDATE students
SET status = 'Graduated';
Bu sorğu
bütün sətirləri
students cədvəlində yeniləyəcək. Təsəvvür elə, təbrik əvəzinə hamıya
status = 'Expelled' qoydun. Təhlükəlidir, düzdür? Bunun qarşısını almaq üçün həmişə
WHERE istifadə edirik və
şərtlər yazırıq ki, hansı sətirlər yenilənəcək və ya silinəcək, dəqiq bilək.
WHERE şərtinin sintaksisi
WHERE operatoru tətbiq olunan sətirləri filtrləmək üçündür. Onu həm UPDATE, həm də DELETE komandasında istifadə edə bilərsən. Sintaksis belədir:
UPDATE üçün:
UPDATE cədvəl
SET column1 = value1, column2 = value2
WHERE şərt;
DELETE üçün:
DELETE FROM cədvəl
WHERE şərt;
WHERE olmadan dəyişikliklər cədvəldəki bütün sətirlərə təsir edəcək. Ona görə də, planlaşdırmadığın məlumatların dəyişməməsi üçün həmişə şərt yazmağa çalış.
Müqayisə operatorlarından istifadə
WHERE şərtləri qurmaq üçün müqayisə operatorlarından istifadə olunur. Gəlin əsas operatorlara baxaq:
| Operator | Təsviri | Nümunə |
|---|---|---|
= |
Bərabərdir | age = 18 |
<> |
Bərabər deyil | age <> 18 |
> |
Böyükdür | age > 18 |
< |
Kiçikdir | age < 18 |
>= |
Böyük və ya bərabərdir | age >= 18 |
<= |
Kiçik və ya bərabərdir | age <= 18 |
Nümunə: tələbənin statusunu yeniləyirik
Əgər 21 yaşdan yuxarı bütün tələbələri "mezun" kimi qeyd etmək lazımdırsa, belə yazılır:
UPDATE students
SET status = 'Graduated'
WHERE age > 21;
Nümunə: 18 yaşdan kiçik bütün tələbələri silirik
Kiminsə səhvən yetkinlik yaşına çatmayan tələbələri əlavə etdiyini fərz et, onları belə silə bilərik:
DELETE FROM students
WHERE age < 18;
Məntiqi operatorlarla mürəkkəb şərtlər
Çox vaxt bir neçə kriteriyaya görə sətirləri filtrləmək lazımdır. Məsələn, yalnız 18 yaşdan yuxarı və proqramlaşdırma kursunda oxuyan tələbələri yeniləmək üçün. Bunun üçün məntiqi operatorlardan istifadə olunur: AND, OR və NOT.
Məntiqi operatorlar:
| Operator | Təsviri | Nümunə |
|---|---|---|
AND |
Bütün şərtlər doğru olduqda işləyir | age > 18 AND course = 'Programming' |
OR |
Heç olmasa bir şərt doğru olduqda işləyir | age > 18 OR course = 'Programming' |
NOT |
Əksinə (şərtin nəticəsini tərsinə çevirir) | NOT (age < 18) |
Nümunə: yalnız proqramçı tələbələri və 18 yaşdan yuxarı olanları yeniləyirik
UPDATE students
SET status = 'Advanced'
WHERE age > 18 AND course = 'Programming';
Nümunə: 18 yaşdan kiçik və ya "Singing" kursunda oxuyan tələbələri silirik
DELETE FROM students
WHERE age < 18 OR course = 'Singing';
Fəlakətli səhvlərdən necə qaçmaq olar
Həmişə şərti yoxla!
WHERE olmadan yazsan, PostgreSQL sevinclə bütün cədvəl üçün əmri icra edəcək. Bax belə olur:
DELETE FROM students;
-- Oops! students cədvəlindəki bütün qeydlər silindi!
Belə hallardan qaçmaq üçün WHERE əlavə et:
DELETE FROM students
WHERE student_id = 123;
Məsləhət: şərtin necə işləyəcəyinə əmin deyilsənsə, əvvəlcə SELECT ilə yoxla. Məsələn:
SELECT * FROM students
WHERE student_id = 123;
Əmin olduqdan sonra UPDATE və ya DELETE icra et.
Praktik nümunələr
Nümunə 1: Tələbələrin statusunu yeniləmək
Fərz et, belə bir students cədvəlimiz var:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Beginner |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
Biz istəyirik ki, proqramçı və 18 yaşdan yuxarı olan tələbələrin statusu "Intermediate" olsun:
UPDATE students
SET status = 'Intermediate'
WHERE age > 18 AND course = 'Programming';
Nəticə:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
Nümunə 2: Xaric olunan tələbələri silmək
İndi fərz et, silmək lazım olan kurslarda oxuyan tələbələr var. Məsələn, "History of Arts" kursunda oxuyanlar. Cədvəl:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 4 | Alex Ming | 21 | History of Arts | Expelled |
"History of Arts" kursunda oxuyan tələbələri silirik:
DELETE FROM students
WHERE course = 'History of Arts';
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
Nümunə 3: Şərtsiz yeniləmə (və niyə bu pisdir)
Əgər belə yazsan:
UPDATE students
SET status = 'Mezun';
BÜTÜN tələbələr mezun olacaq. Ona görə də həmişə WHERE istifadə etməyi tövsiyə edirik!
Fərz et, əvvəlcə belə bir cədvəlimiz var idi:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
UPDATE əmri WHERE olmadan icra olunduqdan sonra:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Mezun |
| 2 | Maria Chi | 22 | Mathematics | Mezun |
| 3 | Eva Gram | 19 | Programming | Mezun |
😬 Gördün? Bütün statuslar dəyişdi. Xüsusilə backup yoxdursa, bu səhv bəzən düzəlməz olur. Ona görə də WHERE — sənin dostundur!
Xüsusiyyətlər və tələlər
WHERE operatoru çox faydalı olsa da, yeni başlayanlar tez-tez səhv edirlər:
- Şərtin olmaması:
WHEREyazmağı unutsan, bütün sətirlər təsirlənəcək. - Yanlış şərt: məsələn,
age = 19əvəzinəage < 19yazsan, lazım olmayan məlumatları dəyişə bilərsən. - Mürəkkəb şərtlər:
ANDvəORprioritetlərini səhv qoysan, gözlənilməz nəticələr ala bilərsən. Dəqiqlik üçün mötərizələrdən istifadə et:DELETE FROM students WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
Sorğuları elə yaz ki, həm sənə, həm də komanda yoldaşlarına aydın olsun.
Artıq bilirsən ki, WHERE ilə məlumatları necə təhlükəsiz və etibarlı şəkildə yeniləmək və silmək olar. Bu alət — database işində ən yaxşı dostundur. Unutma: şərti iki dəfə yoxlamaq, sonra məlumatları bərpa etməkdən yaxşıdır!
GO TO FULL VERSION