Məntiqi operatorlar — bunlar sorğularda şərtləri birləşdirməyə kömək edən alətlərdir, yəni daha mürəkkəb filtrasiya edə bilərsən. Yəqin ki, artıq proqramlaşdırma dillərində bunlarla rastlaşmısan. Əgər sorğuları spam filtrləmə proqramı ilə müqayisə etsək, məntiqi operatorlar elə qaydalardır ki, məktublar "Spam" qovluğuna gedir, ya da "Gələnlər"də qalır.
SQL — tez-tez məlumatları seçmək və ya analiz etmək üçün istifadə olunan alətdir. Məntiqi operatorlar (AND, OR, NOT) bir neçə şərti bir sorğuda birləşdirməyə imkan verir ki, daha mürəkkəb suallara cavab verə biləsən, məsələn:
- Hansı tələbələr 18 yaşdan böyüktür və qiyməti "A"-dır?
- Hansı məhsullar "Elektronika" və ya "Məişət texnikası" kateqoriyasına aiddir?
- Hansı müştərilər heç alış-veriş etməyib?
Gəlin SQL-də üç əsas məntiqi operatora baxaq:
AND: hər iki şərt doğru olmalıdır.OR: ən azı bir şərt doğru olmalıdır.NOT: şərti tərsinə çevirir (inkar edir).
AND operatoru: hər iki şərt doğrudur
AND operatoru imkan verir ki, hər iki şərt yerinə yetirilsin və yalnız o zaman sətr nəticəyə düşsün.
Sintaksis
SELECT kolonka1, kolonka2
FROM cedvel
WHERE sert AND sert2;
Nümunə 1: 18 yaşdan böyük və qiyməti "A" olan tələbələrin filtrasiyası
Tutaq ki, bizdə students cədvəli var:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Sorğu:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Nəticə:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Nümunə 2: "HR" departamentindən olan və maaşı 50000-dən yuxarı olan işçilərin filtrasiyası
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
OR operatoru: ən azı bir şərt doğrudur
OR operatoru istifadə olunur, əgər ən azı bir şərtə uyğun sətrləri seçmək lazımdırsa.
Sintaksis
SELECT kolonka1, kolonka2
FROM cedvel
WHERE sert OR sert2;
Nümunə 1: Qiyməti "A" və ya "B" olan tələbələrin filtrasiyası
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Nəticə:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Nümunə 2: "Elektronika" kateqoriyasından və ya qiyməti 100-dən az olan məhsullar
products cədvəli:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Televizor | Elektronika | 300 |
| 2 | Utyuq | Məişət texnikası | 50 |
| 3 | Smartfon | Elektronika | 700 |
| 4 | Çaydan | Məişət texnikası | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Elektronika' OR price < 100;
Nəticə:
| name | category | price |
|---|---|---|
| Televizor | Elektronika | 300 |
| Utyuq | Məişət texnikası | 50 |
| Çaydan | Məişət texnikası | 80 |
| Smartfon | Elektronika | 700 |
NOT operatoru: şərtin inkarı
Əgər AND və OR şərtlərin doğru olmasını tələb edirsə, NOT tam əksini edir: o, göstərilən şərt yalan olan sətrləri seçir.
Sintaksis
SELECT kolonka1, kolonka2
FROM cedvel
WHERE NOT sert;
Nümunə 1: Qiyməti "A" olmayan tələbələrin filtrasiyası
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Nəticə:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Nümunə 2: "Elektronika" kateqoriyasına aid olmayan məhsulların çıxarılması
SELECT name, category, price
FROM products
WHERE NOT category = 'Elektronika';
Məntiqi operatorların kombinasiyası
Məntiqi operatorları birləşdirib daha mürəkkəb şərtlər yaza bilərsən. Məsələn, əgər istəyirsən ki, 18 yaşdan böyük və qiyməti "A" və ya "B" olan tələbələri seçəsən, AND və OR bir yerdə istifadə edə bilərsən.
Kombinasiya sintaksisi
SELECT kolonka1, kolonka2
FROM cedvel
WHERE (sert1 AND sert2) OR sert3;
Nümunə: 18 yaşdan böyük və qiyməti "A" olan tələbələr və ya qiyməti "B" olan tələbələr
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Nəticə:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Operatorların icra prioriteti
Vacibdir ki, yadda saxlayasan: SQL məntiqi operatorları bu ardıcıllıqla icra edir:
NOTANDOR
Sən mötərizələrdən istifadə edib icra ardıcıllığını dəyişə bilərsən. Mötərizə olmadan nəticə gözlənilməz ola bilər!
Nümunə: Mötərizəsiz və mötərizəli müqayisə
Bu sorğuda nə baş verəcək?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
Bu sorğu aşağıdakı tələbələri seçir:
- 18 yaşdan böyük və qiyməti "A" olanlar.
- Qiyməti "B" olanlar.
Operatorların icra prioriteti nəticəni elə verir ki, sanki mötərizə var:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Amma əgər mötərizə əlavə etsək:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
İndi seçiləcək tələbələr 18 yaşdan böyük və qiyməti "A" və ya "B" olanlardır. Mötərizələr həqiqətən hər şeyi dəyişir!
Məntiqi operatorlardan istifadə zamanı tipik səhvlər
- Mötərizələr unudulub. Bu, xüsusilə
ANDvəORbirləşdiriləndə gözlənilməz nəticələrə səbəb ola bilər. NOTistifadə edəndə, hansı sətrlərin çıxarılacağını tam başa düşməmək.- Məntiqi operatorların səhv istifadəsi. Məsələn,
ANDəvəzinəORvə ya əksinə. - Şərtlərin mürəkkəbliyi. Çox uzun şərtlər, bir neçə
AND,OR,NOTvə şərhsiz kod oxunmaz olur.
Bu operatorlar — istənilən mürəkkəb sorğunun əsasını təşkil edir. İndi sən elə sorğular yaza bilərsən ki, təkcə işləməsin, həm də dəqiq lazım olanı tapsın!
GO TO FULL VERSION