Restricting And Sorting Data
Salamlar, Bloguma xoş gəlmisiniz.
Bugünkü mözumuz cədvəllərdə saxladığımız məlumatları SELECT vasitəsilə götürərkən bizə hansı məlumatların lazım olduğunu təyin etməyimizə yardımcı olan ifadələrdir. Yəni cədvəldəki bütün məlumatları deyil ancaq bəzi şərtlərə lazım olanları seçməyin yollarını izah edəcəyəm sizlərə.
Cədvəllərdəki məlumatlardan hansılarının bizə gərəkli olduğunu təyin etmək üçün WHERE ifadəsindən istifadə edəcəyik. WHERE ORACLE SQL-in ən çox işlənən DML ifadələri olan SELECT, UPDATE, DELETE ilə birlikdə bizə hansı məlumatlar üzərində işləyəcəyimizi təyin etməyimizə imkan verir.
WHERE ən çox müqayisə operatorları və əlavə olaraq IN və LIKE ilə istifadə olunur. Bu operatorlar haqqında məlumat verək.
OPERATOR | MƏNASI |
= | Bərabərdir |
>= | Böyük və ya bərabərdir |
> | Böyükdür |
<= | Kiçik və ya bərabərdir |
< | Kiçikdir |
!= | Bərabər deyil |
<> | Bərabər deyil |
^= | Bərabər deyil |
IN | IN operatoru solunda yazılmış dəyəri sağında göstərilmiş dəyərlərlə müqayisə edir. Sağda qeyd edilmiş dəyərlə mötərizələr içərisində olmalı və vergüllə bir-birindən ayrılmalıdırlar. Məs: (‘A’, ‘B’, ‘C’).Həmçinin sağ tərəfdə sql sorğularda yaza bilərsiniz ki, bunlara alt sorğular(subquery) deyilir bu haqda iləridə yazacağam. |
LIKE | 2 ədəd wildcard characters(şablon işarələr) vasitəsilə istifadə olunur.
_ – Alt xətt. Bir simvolu işarə edir. % – Faiz işarəsi. Bir neçə simvolu işarə edir. Məs: SELECT CAPACITY FROM SHIPS WHERE NAME LIKE ‘S_i%’; (Ilk hərfi “S”, 2ci işarə istənilən işarə ola bilər,3cü hərfi “i” və “i”dən sonra istənilən işarə və işarələr toplusu olan gəminin məlumatları bizə lazımdır.) |
VERİLƏN TİPLƏRİNİN MÜQAYİSƏSİ
ƏDƏD TİPİ – Normal qaydada böyük ədədlər böyük , kiçiklər kiçik və 0 mənfi ədədlərdən böyük kimi müqayisə olunur.
HƏRF TİPLİ – “A” “Z”-dən kiçikdir. “Z” “a”-dan kiçikdir. Böyük hərflər kiçik hərflərdən hər zaman kiçikdir. Char olaraq verilmiş rəqəmlər isə bunların əksi kimi müqayisə olunur yəni “2” “10”dan böyükdür.
TARİX TİPİ – Sabahkı gün bugünkündən, bugünkü gün də dünənkindən böyükdür.
BOOLEAN LOGİC
WHERE hissəsində şərtlərimiz təyin edərkən bəzən bir neçə şərtə uyğun gələn məlumatlara müraciət etmək lazım gəlir. Bu zaman bu şərtlərimizi boolean operatorları ilə birləşdiririk. Boolean operatorları and, or operatorlarıdır.
Bu operatorları sizlərə ən yaxşı məncə misallar əsasında izah edə bilərəm.
AND
SELECT SHIP_ID, NAME FROM SHIP_INFO WHERE NAME LIKE ‘S%S’ AND CAPACITY >= 1100;
Bu sorğu icra olunduğu zaman bizə adı(name) “S” ilə başlayıb “S” ilə bitən və tutumu(capacity) 1100-dən böyük bərabər olan məlumatlar qaytarılacaq. AND operatorunun hər iki tərəfində olan sorğular eyni zamanda “TRUE” olduqda(yəni hər 2 şərt də ödəndiyi zaman) istədiyimiz nəticəni alacağıq.
SELECT SHIP_ID, NAME FROM SHIP WHERE NAME IN(‘SHIP_01S’, ‘SHIP_02S’, ‘SHIP_03S’) AND CAPACITY >= 1100;
Bu sorğunu incələməyi isə sizə buraxıram fikrimcə elədə çətin olmayacaq.
OR
SELECT SHIP_ID, NAME FROM SHIP_INFO WHERE NAME LIKE ‘S%S’ OR CAPACITY >= 1100;
Bu sorğu icra olunduğu zaman bizə adı(name) “S” ilə başlayıb “S” ilə bitən və ya tutumu(capacity) 1100-dən böyük bərabər olan məlumatlar qaytarılacaq. OR operatorunun hər iki tərəfində olan sorğulardan ən azı biri “TRUE” olduqda(yəni hər hansı şərtlər-dən biri ödəndiyi zaman) istədiyimiz nəticəni alacağıq.
Bu şəkil vasitəsilə boolean operatorları daha aydın başa düşəcəksiniz.
NOT
NOT boolean operatorlarının bir hissəsi kimi istifadə olunur.
Məs:
SELECT EMPLOYEE_ID FROM WORK_HISTORY WHERE SHIP_ID = 3 AND NOT STATUS = ‘PENDING’;
NOT həmçinin IN operatoru ilə birlikdə istifadə olunur.
SELECT PORT_NAME FROM PORTS WHERE COUNTRY NOT IN(‘BAKU’, ‘USA’, ‘UK’);
BETWEEN
WHERE ilə istifadə etdiyimiz bir digər yararlı operator BETWEEN operatordur.
“SMTH BETWEEN A AND B” = ”SMTH >= A AND SMTH <=B”
A) SELECT PORT_NAME FROM PORTS WHERE CAPACITY BETWEEN 3 AND 4;
B) SELECT PORT_NAME FROM PORTS WHERE CAPACITY >=3 AND CAPACITY <=4
A və B bir birinə ekvivalent sql sorğulardır.
Həmçinin NOT operatoru ilə birlikdə də istifadəsi mümkündür.
X) SELECT PORT_NAME FROM PORTS WHERE CAPACITY NOT BETWEEN 3 AND 4;
Y) SELECT PORT_NAME FROM PORTS WHERE NOT CAPACITY BETWEEN 3 AND 4;
X və Y bir birinə həmçinin ekvivalentdir.
IS NULL, IS NOT NULL
NULL haqqında yəqinki məlumatımız var, belə bir ifadə ilə qısaca nə olduğun deyim.
NULL is the equivalent of “I don’t know”. NULL boşluq deyil heç nə deyil sadəcə NULL-dır.
Əgər biz yazdığımız sql sorğularda şərt daxilində “smth=null” kimi yazsaq heç bir nəticə almayacağıq ona görə də IS NULL, IS NOT NULL operatorları daha düzgün nəticələr almağımıza kömək edir.
SELECT PORT_NAME FROM PORTS WHERE CAPACITY=NULL; --SƏHV DEYİL MƏNASIZDIR(1)
SELECT PORT_NAME FROM PORTS WHERE CAPACITY !=NULL; --SƏHV DEYİL MƏNASIZDIR(2)
SELECT PORT_NAME FROM PORTS WHERE CAPACITY IS NULL; --DÜZGÜNDÜR(1)
SELECT PORT_NAME FROM PORTS WHERE CAPACITY IS NOT NULL; --DÜZGÜNDÜR(2)
MƏLUMATLARIMIZ ÇEŞİDLƏMƏK(ORDER BY)
Cədvəllərdə saxladığımız məlumatlara sql sorğularla müraciət etdiyimiz zaman bizə qaytarılan məlumatları istəyimizə uyğun çeşidləmək istəyirik yəni bəzən azdan çoxa, bəzən çoxdan aza. Bunun üçün “ORDER BY” istifadə edəcəyik.
ORDER BY vasitəsilə sorğuya 2 cür müdaxilə edə bilərik.
- REFERENCE BY NAME(SÜTUN ADI İLƏ)
- REFERENCE BY POSİTİON(SÜTUN ADININ YERLƏŞDİYİ POZİSİYAYA GÖRƏ)
Məs:
X) SELECT NAME, CAPACITY FROM SHIPS ORDER BY NAME; (by name)
Y) SELECT NAME, CAPACITY FROM SHIPS ORDER BY 1; (by position)
X və Y bir birinə ekvivalentdir.
Həmçinin məlumatları böyükdən kiçiyə və yaxud əksinə sıralaya bilərik. Bunun üçün ASC(ascending – kiçikdən böyüyə doğru) və DESC(descending – böyükdən kiçiyə doğru). Bu parametrləri təyin etmədiyimiz halda susmaya görə(default) ASC götürülür.
X) SELECT NAME, CAPACITY FROM SHIPS ORDER BY NAME ASC; (by name)(kiçikdən böyüyə)
Y) SELECT NAME, CAPACITY FROM SHIPS ORDER BY 1 DESC; (by position)(böyükdən kiçiyə)
Həmçinin sütunlara verdiyimiz “alians”(alternative sütun adı)-larıda ORDER BY-da istifadə oluna bilərlər.
Məs:
SELECT SHIP_ID, PROJECT_COST, PROJECT_NAME “The Project”, DAYS
FROM PROJECTS
ORDER BY SHIP_ID DESC, “The Project”, 2;
Sorğumuz birinci SHİP_İD-ə görə böyükdən kiçiyə , sonra 1ci sıralanma pozulmadan PORJECT_NAME sütunu üzrə kiçikdən böyüyə, daha sonra 1ci və 2ci sıralanma pozulmadan isə PROJECT_COST sütunu üzrə kiçikdən böyüyə doğru sıralanacaq.
ORDER BY istifadə etdiyiniz zaman məlumatlarınız içində NULL dəyərlər varsa onlar ən böyük kimi qiymətləndiriləcəklər və ASC zamanı ən son DESC zamanı ən birinci sətirdə yerləşəcəklər.
Bu dəfəlik bu qədər , faydalı olmağa çalışdım ola bildiysəm nə mutlu mənə 🙂 Şərhlərinizi bölüşün dostlar 🙂