İndi sən növbəti mərhələyə hazırsan — SQL-də yerləşdirilmiş sorğular ilə işləməyə. Bu gün biz baxacağıq ki, bunlar nədir, nə üçün lazımdır, yerləşdirilmiş sorğuların hansı tipləri var və niyə real həyatda faydalıdırlar.
Yerləşdirilmiş sorğular (və ya alt-sorğular) — bunlar elə SQL-sorğulardır ki, başqa bir SQL-sorğunun içində istifadə olunur. Elə bil matrёşka və ya kələm kimidir: bir xarici sorğu var, onun içində isə başqa, daha kiçik bir sorğu gizlənib. Alt-sorğu birinci icra olunur, onun nəticəsi isə xarici sorğu tərəfindən istifadə olunur (bəzən ona "əsas" deyirlər).
Gəlin nümunəyə baxaq:
Nümunə 1: Bu necə işləyir
Bizdə students cədvəli var, orada belə məlumatlar var:
| id | ad | yaş | qrup_id |
|---|---|---|---|
| 1 | Alisa | 20 | 1 |
| 2 | Bob | 22 | 2 |
| 3 | Klarq | 21 | 1 |
| 4 | Dina | 23 | 3 |
| 5 | Emiliya | 22 | 2 |
Bir də groups cədvəli var, burada qrupların adları saxlanılır:
| id | ad |
|---|---|
| 1 | Riyaziyyat sinfi |
| 2 | Fizika sinfi |
| 3 | Ədəbiyyat sinfi |
Əgər biz bilmək istəyirik ki, hansı qruplarda tələbələr oxuyur, onda yerləşdirilmiş sorğudan istifadə edə bilərik:
SELECT ad
FROM groups
WHERE id IN (
SELECT qrup_id
FROM students
WHERE yaş > 21
);
Bura nə baş verir?
Yerləşdirilmiş sorğu:
SELECT qrup_id
FROM students
WHERE yaş > 21
Bu sorğu qrup_id seçir, yəni 21 yaşdan böyük olan bütün tələbələrin qrup id-lərini. Nəticə: qrup id-lərinin siyahısı, məsələn [2, 3].
Əsas sorğu:
SELECT ad
FROM groups
WHERE id IN ([alt-sorğunun nəticələri])
Bu sorğu alt-sorğunun nəticələrini istifadə edir və id-si 2 və ya 3 olan qrupların adlarını qaytarır.
Nəticə:
Fizika sinfi
Ədəbiyyat sinfi
Hələ də heç nə başa düşmədin? Normaldır. Amma narahat olma, indi hər şeyi izah edəcəyik.
Sadə bir ideyadan başlayaq — SELECT-sorğusunun nəticəsi — bir növ virtual cədvəldir. Həqiqətən, onun sütunları var, sətirləri var. Niyə də cədvəl olmasın?
Əgər sorğunun nəticəsi cədvəldirsə, onu real cədvəllər kimi istifadə etmək olar: məsələn, JOIN operatorunda və ya daha mürəkkəb konstruksiyalarda.
Onun adı yoxdur, bu isə problemdir. Amma sütun ifadələrinin də adı olmur, biz bu problemi onlara alias — ləqəb verərək həll edirik. Eyni şeyi virtual cədvəllərlə də etmək olar.
Ətraflı növbəti dərslərdə — hələlik spoiler vermirik :P
Yerləşdirilmiş sorğuların faydası
Onlar mürəkkəb məsələləri sadələşdirir. Bəzən bir cədvəldə lazım olan bütün məlumat olmur. Alt-sorğular sorğunu iki mərhələyə bölməyə imkan verir: əvvəlcə aralıq nəticəni tapırsan, sonra onu istifadə edərək son nəticəni alırsan.
Aralıq nəticələrlə işləmək. Yerləşdirilmiş sorğular faydalıdır, əgər sənə məlumatları emal etməzdən əvvəl əlavə hesablama lazımdırsa. Məsələn, minimum dəyəri tapmaq və ya cəmi hesablamaq.
Kodun oxunaqlılığını artırır. Yerləşdirilmiş sorğular kodu daha strukturlaşdırılmış edir, xüsusilə böyük cədvəllərlə və mürəkkəb məntiqlə işləyərkən.
Yerləşdirilmiş sorğuların əsas tipləri
Yerləşdirilmiş sorğuları SQL-sorğunun müxtəlif hissələrində istifadə etmək olar. Onları harada yazdığından asılı olaraq bir neçə tipə bölünürlər.
- Alt-sorğular
SELECT-də. Alt-sorğu sütunlar siyahısında olur və dəyərləri hesablamaq üçün istifadə olunur. Bu, məsələn, nəticələrə yeni sütun əlavə etmək üçün rahatdır.
Nümunə — tələbələr arasında maksimum yaşı olan sütun əlavə edirik:
SELECT ad, yaş,
(SELECT MAX(yaş) FROM students) AS maksimum_yaş
FROM students;
Nəticə:
| ad | yaş | maksimum_yaş |
|---|---|---|
| Alisa | 20 | 23 |
| Bob | 22 | 23 |
| Klarq | 21 | 23 |
| Dina | 23 | 23 |
| Emiliya | 22 | 23 |
- Alt-sorğular
FROM-da. Alt-sorğu müvəqqəti cədvəl kimi istifadə olunur. Bu, əgər sənə əvvəlcə məlumatları toplamaq və ya transformasiya etmək lazımdırsa, faydalıdır.
Nümunə — hər qrupda tələbələrin orta yaşını hesablamaq:
SELECT tmp.qrup_id, tmp.orta_yaş
FROM (
SELECT qrup_id, AVG(yaş) AS orta_yaş
FROM students
GROUP BY qrup_id
) AS tmp -- Müvəqqəti cədvələ tmp ləqəbi veririk
WHERE tmp.orta_yaş > 21;
Nəticə:
| qrup_id | orta_yaş |
|---|---|
| 2 | 22.0 |
| 3 | 23.0 |
- Alt-sorğular
WHEREvəHAVING-də. Alt-sorğular şərt kimi istifadə olunur və sətirləri filtrləyir. Bu, tez-tez istifadə olunur - yazıların mövcudluğunu yoxlamaq və ya dəyərləri müqayisə etmək üçün.
Nümunə — orta yaşdan böyük olan tələbələr:
SELECT ad, yaş
FROM students
WHERE yaş > (
SELECT AVG(yaş)
FROM students
);
Nəticə:
| ad | yaş |
|---|---|
| Bob | 22 |
| Dina | 23 |
| Emiliya | 22 |
Yerləşdirilmiş sorğulardan istifadə etməyin üstünlükləri
Daha çox çeviklik: yerləşdirilmiş sorğular daha mürəkkəb məlumat strukturları ilə işləməyə imkan verir.
Tapşırıqları mərhələlərə bölmək: məntiqi alt-sorğulara bölmək olar, bu da kodu daha oxunaqlı edir.
Aralıq məlumatlara çıxış: sən məlumatları "yolda" emal edə bilərsən, verilənlər bazasında müvəqqəti cədvəl yaratmağa ehtiyac olmadan.
GO TO FULL VERSION