LIKEvə%,_işarələri ilə mətn axtarmaqINvəBETWEENilə şərtləri qısa yazmaqNULL-un mənasını başa düşmək vəIS NULL,COALESCEilə işləmək
Axtarış xanasına soyadın yalnız bir hissəsini yazanda sayt yenə də lazım olan adamı tapır. Bəs «Sumqayıt, Quba və ya Naxçıvandan olan şagirdlər», «qiyməti 10 ilə 55 arasında olan məhsullar» və ya «e-poçtu olmayan şagirdlər» necə tapılır? Bunun üçün SQL-də dörd xüsusi operator var: LIKE, IN, BETWEEN və IS NULL.
LIKE: nümunə üzrə axtarış
LIKE mətni nümunə (şablon) ilə müqayisə edir. Nümunədə iki xüsusi işarə var: % istənilən sayda simvolu (sıfır da ola bilər), _ isə düz bir simvolu əvəz edir.
| Nümunə | Nəyə uyğundur | Nümunə qiymət |
|---|---|---|
| 'A%' | A ilə başlayan | Aysel |
| '%ova' | ova ilə bitən | Abbasova |
| '%set%' | içində set olan | Chess set |
| '_u%' | ikinci hərfi u olan | Murad |
| '____' | düz dörd simvoldan ibarət | Quba |
SELECT first_name, last_name
FROM students
WHERE last_name LIKE '%ova'
ORDER BY id;▸ Gözlənilən nəticə
first_name | last_name Aysel | Məmmədova Leyla | Hüseynova Günay | Abbasova Səbinə | Nəsirova Fidan | Cəfərova
SELECT first_name
FROM students
WHERE first_name LIKE '_u%'
ORDER BY id;▸ Gözlənilən nəticə
first_name Murad Tural
_ düz bir simvol, % isə qalan hər şeydir.IN: qiymətlər siyahısı
city = 'Sumqayıt' OR city = 'Quba' OR city = 'Naxçıvan' yazmaq uzun və yorucudur. IN operatoru eyni şərti qısa yazmağa imkan verir: qiymət mötərizədəki siyahıda varsa, şərt doğrudur. NOT IN isə əksinə, siyahıda olmayan qiymətləri seçir.
SELECT first_name, city
FROM students
WHERE city IN ('Sumqayıt', 'Quba', 'Naxçıvan')
ORDER BY id;▸ Gözlənilən nəticə
first_name | city Elvin | Sumqayıt Səbinə | Quba Fidan | Naxçıvan Orxan | Sumqayıt
SELECT name, category
FROM products
WHERE category NOT IN ('Electronics', 'Stationery')
ORDER BY id;▸ Gözlənilən nəticə
name | category Backpack | Accessories Desk lamp | Home Water bottle | Accessories Chess set | Games
BETWEEN: aralıq
x BETWEEN a AND b şərti x >= a AND x <= b ilə eynidir, yəni hər iki sərhəd daxildir. Aşağıda qiyməti düz 55 olan Backpack da nəticəyə düşür. Kiçik qiymət həmişə birinci yazılır: BETWEEN 55 AND 10 heç nə qaytarmır.
SELECT name, price
FROM products
WHERE price BETWEEN 10 AND 55
ORDER BY price;▸ Gözlənilən nəticə
name | price Water bottle | 12 Desk lamp | 34.99 Chess set | 42 Backpack | 55
SELECT id, customer_id, order_date
FROM orders
WHERE order_date BETWEEN '2025-02-01' AND '2025-03-31'
ORDER BY order_date;▸ Gözlənilən nəticə
id | customer_id | order_date 3 | 2 | 2025-02-02 4 | 3 | 2025-02-10 5 | 4 | 2025-03-05 6 | 5 | 2025-03-18
2025-03-31 14:00), martın 31-də günortadan sonra verilən sifarişlər artıq aralığa düşməzdi.NULL: məlumat yoxdur
Qiymətin olmadığını və ya məlum olmadığını bildirən xüsusi işarə. NULL sıfır deyil, boş mətn ('') də deyil — sadəcə «məlumat yoxdur» deməkdir.
Naməlum qiymətlə istənilən müqayisə və ya hesablama yenə naməlum nəticə — NULL verir. Hətta NULL = NULL də doğru deyil, NULL-dur: iki naməlum qiymətin bərabər olub-olmadığını bilmirik. WHERE isə yalnız şərti doğru olan sətirləri saxlayır.
SELECT NULL = NULL AS a,
NULL + 5 AS b,
5 > NULL AS c;▸ Gözlənilən nəticə
a | b | c NULL | NULL | NULL
-- wrong: the condition is never true
SELECT COUNT(*) AS found
FROM students
WHERE email = NULL;▸ Gözlənilən nəticə
found 0
COUNT(*) tapılan sətirləri sayır. = NULL ilə heç nə tapılmır, halbuki iki şagirdin e-poçtu yoxdur.-- right: IS NULL
SELECT first_name, last_name, email
FROM students
WHERE email IS NULL
ORDER BY id;▸ Gözlənilən nəticə
first_name | last_name | email Elvin | Quliyev | NULL Tural | İsmayılov | NULL
IS NOT NULL isə qiyməti olan sətirləri seçir. Nəticədə NULL əvəzinə başqa qiymət göstərmək üçün COALESCE(a, b, ...) funksiyası var: o, siyahıdakı ilk NULL olmayan qiyməti qaytarır. SQLite və MySQL-də bunun qısa forması IFNULL(a, b), SQL Server-də isə ISNULL(a, b)-dir; COALESCE isə hamısında işləyir.
SELECT first_name,
COALESCE(email, 'no email') AS contact
FROM students
WHERE grade = 11
ORDER BY id;▸ Gözlənilən nəticə
first_name | contact Elvin | no email Tural | no email Fidan | fidan@example.com
Bakı və ya Sumqayıtda yaşayan, 14–15 yaşlı və e-poçtu olan şagirdləri tap.
Həllini göstərHəllini gizlət
AND ilə birləşdiririk:şəhər siyahıdadır —
city IN ('Bakı', 'Sumqayıt');yaş aralıqdadır —
age BETWEEN 14 AND 15;e-poçt var —
email IS NOT NULL.Nəticə: Aysel, Leyla, Kamran və Orxan. Elvin də Sumqayıtdandır, amma onun 17 yaşı var və e-poçtu yoxdur.
SELECT first_name, city, age
FROM students
WHERE city IN ('Bakı', 'Sumqayıt')
AND age BETWEEN 14 AND 15
AND email IS NOT NULL
ORDER BY id;▸ Gözlənilən nəticə
first_name | city | age Aysel | Bakı | 15 Leyla | Bakı | 14 Kamran | Bakı | 15 Orxan | Sumqayıt | 14
Qiyməti 30 ilə 150 arasında olan (sərhədlər daxil) və Electronics, Home və ya Games kateqoriyasına aid məhsulların adını və qiymətini göstər. Nəticəni qiymətə görə artan sırada düz.
SELECT name, price
FROM products
-- use BETWEEN and IN
ORDER BY price;▸ Gözlənilən nəticə
name | price Desk lamp | 34.99 Chess set | 42 Headphones | 120.5
Soyadı ov ilə bitən və e-poçtu olan şagirdlərin adını, soyadını və e-poçtunu göstər. Nəticəni ada (first_name) görə düz.
SELECT first_name, last_name, email
FROM students
-- add the two conditions
ORDER BY first_name;▸ Gözlənilən nəticə
first_name | last_name | email Kamran | Həsənov | kamran@example.com Rəşad | Kərimov | rashad@example.com
Əsas fikirlər
LIKEnümunə ilə axtarır:%— istənilən sayda simvol,_— düz bir simvol.IN (...)uzunORzəncirini əvəz edir,NOT INisə siyahıda olmayanları seçir.BETWEEN a AND bhər iki sərhədi daxil edir; kiçik qiymət birinci yazılır.NULL«məlumat yoxdur» deməkdir; onunla müqayisəNULLverir.- Boş qiymətləri
IS NULL/IS NOT NULLilə yoxla,COALESCEilə əvəz et.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.