CodeGym /Kurslar /SQL SELF /Yerləşdirilmiş sorğular nədir və onlar nə üçün lazımdır?

Yerləşdirilmiş sorğular nədir və onlar nə üçün lazımdır?

SQL SELF
Səviyyə , Dərs
Mövcuddur

İ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ı

  1. 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.

  2. 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.

  3. 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.

  1. 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
  1. 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
  1. Alt-sorğular WHEREHAVING-də. Alt-sorğular şərt kimi istifadə olunur və sətirləri filtrləyir. Bu, tez-tez istifadə olunur
  2. 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.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
LEFT JOIN ilə bütün işçiləri və onların layihələrini göstərmək
LEFT JOIN ilə bütün işçiləri və onların layihələrini göstərmək
2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Sifarişlərin tarixləri və müştərilərlə LEFT JOIN birləşdirilməsi
Sifarişlərin tarixləri və müştərilərlə LEFT JOIN birləşdirilməsi
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION