CodeGym /Kurslar /SQL SELF /Məlumatların birləşdirilməsinə giriş: JOIN

Məlumatların birləşdirilməsinə giriş: JOIN

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

Bu gün relasional verilənlər bazası ilə işləməyin ən maraqlı mövzularından birinə keçirik — bir neçə cədvəldən məlumatların JOIN ilə birləşdirilməsi. Bu, mürəkkəb əlaqələr və analitika yaratmaq üçün çox güclü bir alətdir.

Təsəvvür elə ki, sənin verilənlər bazan böyük bir komiksdir, hər ayrı cədvəl isə bir kadrdır. Tam bir hekayə qurmaq üçün bu kadrları birləşdirməlisən. Bunu sənin üçün JOIN edir. Məlumatların birləşdirilməsi — sorğunun bir neçə cədvəldən məlumat çıxarıb onları müəyyən şərtlərlə əlaqələndirməsi prosesidir.

Relasional verilənlər bazası cədvəllər arasındakı əlaqə konsepsiyası üzərində qurulub. Hər cədvəl konkret bir obyekt haqqında məlumat saxlayır və tam mənzərə üçün tez-tez müxtəlif cədvəllərdən məlumatları birləşdirmək istəyirik. Məsələn:

  • students cədvəli tələbələrin siyahısını saxlayır.
  • courses cədvəli kursların siyahısını saxlayır.
  • enrollments cədvəli kim hansı kursa gedir onu göstərir.

Hansı tələbənin hansı kursda oxuduğunu bilmək üçün bu cədvəlləri birləşdirməliyik. Müsahibədə JOIN ilə işləməyi bacaran developer çox ciddi görünür, çünki bu, data ilə işləməkdə ən çox tələb olunan skill-lərdən biridir.

Əsas JOIN növləri

PostgreSQL-də bir neçə JOIN növü var və hər biri konkret tapşırıqlar üçün nəzərdə tutulub. Gəlin onları ümumi şəkildə nəzərdən keçirək, başımızı dərhal çətin nümunələrlə doldurmadan:

JOIN növü Təsvir
INNER JOIN Hər iki cədvəldə uyğun gələn sətrləri qaytarır.
LEFT JOIN Sol cədvəldəki bütün sətrləri, sağdan isə yalnız uyğun gələnləri qaytarır.
RIGHT JOIN Sağ cədvəldəki bütün sətrləri, soldan isə yalnız uyğun gələnləri qaytarır.
FULL OUTER JOIN Hər iki cədvəldəki bütün sətrləri qaytarır, uyğun gəlməyən yerlərdə NULL qoyur.

Hansı JOIN-u seçmək tapşırığından asılıdır:

  • Əgər sənə yalnız hər iki cədvəldə uyğun gələn məlumatlar lazımdırsa, INNER JOIN istifadə elə.
  • Bir cədvəldəki bütün məlumatları, digərindən isə yalnız uyğun gələnləri saxlamaq istəyirsənsə, LEFT JOIN və ya RIGHT JOIN uyğun gəlir.
  • Hər iki cədvəldəki bütün məlumatlar lazımdırsa, hətta uyğun gəlməsə belə, FULL OUTER JOIN istifadə elə.

Gəlin bütün bu birləşmələri birbaşa praktikada araşdıraq.

Nümunə tapşırıq — "Kim hansı kursdadır?"

Tutaq ki, bizdə üç cədvəl var:

students cədvəli

id name
1 Otto
2 Anna
3 Peter

courses cədvəli

id title
101 Riyaziyyat
102 İngilis dili

enrollments cədvəli

student_id course_id
1 101
2 102

Bu cədvəllər belə əlaqəlidir:

  • students cədvəlində id sütunu — tələbənin unikal identifikatorudur.
  • courses cədvəlində id sütunu — kursun unikal identifikatorudur.
  • enrollments cədvəlində student_idcourse_id sütunları tələbə ilə kurs arasında əlaqə yaradır.

Tutaq ki, belə bir sualımız var: hansı tələbə hansı kursa yazılıb?

Cavabı JOIN ilə tapmaq olar. Cədvəlləri əlaqələrinə görə birləşdirəcəyik:

  • studentsenrollments cədvəllərini id = student_id ilə birləşdiririk.
  • enrollmentscourses cədvəllərini course_id = id ilə birləşdiririk.

SQL sorğusu belə olacaq:

SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;

Bu sorğu nə edir:

  • FROM enrollments — tələbə və kursları birləşdirən cədvəldən başlayırıq.
  • JOIN students ON enrollments.student_id = students.id — tələbələri qoşuruq ki, adlarını alaq.
  • JOIN courses ON enrollments.course_id = courses.id — kursları qoşuruq ki, adlarını alaq.

Nəticə belə olacaq:

name title
Otto Riyaziyyat
Anna İngilis dili

Nəzərə al: əgər tələbənin heç bir kursu yoxdursa, nəticədə görünməyəcək — çünki JOIN default olaraq sərtdir (INNER JOIN). Sonra öyrənəcəyik ki, belə tələbələri də LEFT JOIN ilə necə əlavə etmək olar.

Əgər bu sorğuda nəsə aydın deyil, narahat olma! Bunu başa düşmək üçün növbəti leksiyalarımız var!

Bu real həyatda niyə lazımdır?

İndi cədvəlləri necə birləşdirməyi başa düşdün, gəlin real həyatı danışaq. Heç düşünmüsən, internet mağaza necə işləyir? Məsələn, telefon seçirsən və başqalarının rəylərini görürsən.

  1. products cədvəli məhsullar haqqında məlumat saxlayır.
  2. reviews cədvəli alıcıların rəylərini saxlayır.
  3. customers cədvəli isə alıcıların özləri haqqında məlumat saxlayır

Saytda rəyləri göstərmək üçün products, reviewscustomers cədvəllərini birləşdirmək lazımdır. Bax, bu JOIN-un işidir.

Nəyə diqqət etmək lazımdır?

Gələcək leksiyalarda JOIN-a daha dərindən baxmamışdan əvvəl, bir neçə məqamı yadında saxla:

  1. JOIN-da sıra vacibdir. Məsələn, LEFT JOIN sol cədvəldəki sətrləri qaytarır, yəni cədvəllərin yerini dəyişsən, nəticə də dəyişir.
  2. Kiçik cədvəllərlə işləməyə başla. Əvvəldə milyonlarla sətr olan sorğulardan qaç. Hətta ən sadə sorğu belə başa düşülən olmalıdır.
  3. Əlaqələr barədə düşünməyə öyrəş. Cədvəlləri bir böyük strukturun hissəsi kimi görməyə başlasan, JOIN ilə işləmək sənin üçün təbii olacaq.

Bu gündən SQL-pro olmağa başlayırıq. Növbəti leksiyada iki cədvəldən məlumat çıxarmaq üçün INNER JOIN istifadə etməyi öyrənəcəksən. Bu, PostgreSQL öyrənməyində böyük bir addım olacaq.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION