Deməli, artıq bilirik ki, SELECT komandasını necə istifadə etmək olar. Yəni, ən azından bazadan məlumat çıxarmağı, lazım olan sütunları seçməyi və xam məlumatları faydalı informasiyaya çevirməyə başlayan sorğular yazmağı öyrəndik. İndi isə magik palitramıza bir az "filtr" əlavə edək. Bəli, bu gün məlumatların filtrlenməsi haqqında danışacağıq və burada belə müqayisə operatorlarından istifadə edəcəyik: =, >, < və <>.
Böyük cədvəllərlə işləyəndə, çox güman ki, bütün məlumatlara baxmaq istəmirsən (ancaq xaosa qərq olmaq istəyirsənsə başqa məsələ). Yalnız lazım olan sətirləri seçmək üçün SQL-də WHERE açar sözü istifadə olunur. Bu, hər bir sətrin nəticəyə düşməsi üçün hansı şərtlərə cavab verməli olduğunu göstərməyə imkan verir. Və bu şərtlər üçün müqayisə operatorları istifadə olunur.
WHERE ilə filtrasiya sintaksisi
SELECT kolonka1, kolonka2
FROM cədvəl
WHERE şərt;
Sadə struktur: FROM ilə cədvəli göstərdikdən sonra WHERE sözünü əlavə edirik və konkret şərt yazırıq, hansı ki, sətirlər ona uyğun olmalıdır.
Məsələn, students cədvəlindən məlumat çıxarmağa baxaq:
SELECT name, age
FROM students
WHERE age > 18;
Bu sorğu yalnız yaşı 18-dən böyük olan tələbələri (ad və yaş) seçir. Hər şey sadədir, hə? İndi isə müqayisə operatorlarının dünyasına baş vuraq.
Əsas müqayisə operatorları
SQL-də bir neçə müqayisə operatoru var ki, məlumatları istədiyin kimi filtr etməyə kömək edir. Əslində bunları riyaziyyatdan bilirsən, amma bir az dəqiqləşdirmək lazımdır. Ən çox istifadə olunanların siyahısı belədir:
=— Bərabərdir.<>— Bərabər deyil (alternativ: bəzi DBMS-lərdə!=, amma<>istifadə etmək daha yaxşıdır, çünki bu SQL standartıdır).>— Böyükdür.<— Kiçikdir.>=— Böyük və ya bərabərdir.<=— Kiçik və ya bərabərdir.
Müqayisə operatorları cədvəli
| Operator | Məna | Nümunə | Nəticə |
|---|---|---|---|
= |
Bərabərdir | age = 20 |
Yaşı 20 olan sətirləri qaytarır |
<> |
Bərabər deyil | age <> 20 |
Yaşı 20-ə bərabər olmayan sətirləri qaytarır |
> |
Böyükdür | age > 18 |
Yaşı 18-dən böyük olan sətirləri qaytarır |
< |
Kiçikdir | age < 18 |
Yaşı 18-dən kiçik olan sətirləri qaytarır |
>= |
Böyük və ya bərabərdir | age >= 18 |
Yaşı 18 və ya böyük olan sətirləri qaytarır |
<= |
Kiçik və ya bərabərdir | age <= 18 |
Yaşı 18 və ya kiçik olan sətirləri qaytarır |
Müqayisə operatorlarının istifadə nümunələri
Nümunə 1: 20 yaşdan böyük tələbələri çıxarmaq
Bizim cədvəl belədir:
| id | name | age |
|---|---|---|
| 1 | Alex Lin | 22 |
| 2 | Anna Song | 19 |
| 3 | Otto Art | 21 |
SELECT name, age
FROM students
WHERE age > 20;
Burada age > 20 şərtini qoyuruq ki, yalnız yaşı 20-dən çox olan tələbələr seçilsin. Əgər cədvəldə yaşı 19 olan tələbə varsa, təəssüf, nəticəyə düşməyəcək.
Bizim halda nəticə belə olacaq:
| name | age |
|---|---|
| Alex Lin | 22 |
| Otto Art | 21 |
Anna Song seçimə düşmədi, çünki onun yaşı cəmi 19-dur.
Nümunə 2: Maaşı ən azı 50 000 olan işçiləri çıxarmaq
Bizim employees cədvəlimiz belədir:
| first_name | last_name | salary |
|---|---|---|
| Julia | Kim | 48000 |
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
SQL-sorğumuz belədir:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
Bu sorğu maaşı bərabər 50 000 və ya daha çox olan bütün işçiləri qaytarır. Bərabərlik də keçərlidir!
| first_name | last_name | salary |
|---|---|---|
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
Nümunə 3: Qiyməti 100-dən az olan məhsulları çıxarmaq
| product_name | price |
|---|---|
| USB Cable | 85 |
| Wireless Mouse | 150 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
SELECT product_name, price
FROM products
WHERE price < 100;
Əgər sənin elektron mağazan varsa, bu sorğu ilə qiyməti 100-dən az olan bütün məhsulları seçə bilərsən (məsələn, "Hamısı 99-a!" aksiyası üçün).
| product_name | price |
|---|---|
| USB Cable | 85 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
Nümunə 4: Müəyyən id-yə sahib istifadəçiləri istisna etmək
SELECT id, username
FROM users
WHERE id <> 1;
Bu sorğu id-si 1 olan istifadəçidən başqa bütün istifadəçiləri seçir. <> operatoru "mənə bu dəyərə bərabər olmayanları ver" deməkdir.
users cədvəli:
| id | username |
|---|---|
| 1 | admin |
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Sorğunun nəticəsi:
| id | username |
|---|---|
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Müqayisə operatorları ilə filtrasiya zamanı tipik səhvlər
Filtrasiya ilə sorğular yazmağa yeni başlayanda, səhvlər tez-tez olur. Bax, ən çox rast gəlinən hallardan bir neçəsi:
Problem 1: Sütun adında səhv
Əgər sorğuda sütunun adını səhv yazsan, PostgreSQL səhv verəcək. Məsələn:
SELECT name, age
FROM students
WHERE ages > 18; -- Səhv: "ages" sütunu mövcud deyil
Sorğu yazmazdan əvvəl sütun adlarını dəqiq yoxla.
Problem 2: Müqayisə operatorunun səhv istifadəsi
Bəzən yeni başlayanlar operatorları səhv sala bilər. Məsələn:
SELECT name, age
FROM students
WHERE age => 18; -- Səhv: düzgün operator deyil
Düzgün sintaksis — >=, => yox.
Problem 3: Cədvəldə olmayan dəyərlərə görə filtrasiya
Əgər cədvəldə olmayan bir dəyərə görə sətirləri filtr edirsənsə, sorğu işləyəcək, amma nəticə boş olacaq. Məsələn:
SELECT name
FROM students
WHERE age = 999; -- Nəticə: 0 sətir
Bu sintaksis səhvi deyil, amma gözlədiyin məlumatı görməyəndə çaşdıra bilər.
Praktiki tətbiq
Müqayisə operatorları ilə məlumatların filtrlenməsi müxtəlif situasiyalarda istifadə olunur:
- Məlumat analizi: məsələn, 10 000 rupi-dən çox xərcləyən bütün müştəriləri seçmək üçün.
- Hesabatlar: orta maaşdan yüksək maaş alan işçiləri seçmək üçün.
- Monitorinq: son bir ayda aktiv olmayan istifadəçiləri izləmək üçün.
SQL sənə böyük cədvəllərdən lazım olan məlumatı tez çıxarmağa imkan verir və müqayisə operatorları bu yolda ilk addımdır.
GO TO FULL VERSION