CodeGym /Kurslar /SQL SELF /Əsaslar INNER JOIN

Əsaslar INNER JOIN

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

Keçən dərsdə SQL-də hansı JOIN tipləri olduğunu danışdıq. Bu gün isə INNER JOIN mövzusuna daha yaxından baxacağıq.

INNER JOIN — relasion bazalarda məlumatların birləşdirilməsi tipidir, hansı ki, iki cədvəldən sətirləri götürüb yalnız sənin təyin etdiyin şərtə uyğun "uyğun gələn" sətirləri qaytarır. Yəni, INNER JOIN yalnız iki cədvəlin kəsişən hissələrini qaytarır, qalan hər şeyi saymır.

Gəlin təsəvvür edək ki, səndə iki qutu var. Birində tələbələrin kartları, digərində isə tələbələrin qeydiyyatdan keçdiyi kursların kartları var. Sən bilmək istəyirsən ki, hansı tələbə hansı kursa yazılıb. Əgər uyğunluq yoxdursa (məsələn, tələbə heç bir yerə yazılmayıbsa), bu məlumatlar bizi hələ maraqlandırmır. Belə bir ssenari üçün INNER JOIN superdir.

INNER JOIN Sintaksisi

Sintaksis çox sadədir — birləşdirmək istədiyin iki cədvəli göstərirsən və birləşdirmə şərtini ON açar sözü ilə yazırsan.

SELECT sütunlar
FROM cədvəl1 INNER JOIN cədvəl2
ON cədvəl1.sahə = cədvəl2.sahə;
  • cədvəl1cədvəl2 — birləşdirmək istədiyin cədvəllərdir.
  • sahə — uyğunluq aparılan sütunlardır.
  • ON-dan sonra olan şərt hər iki cədvəldə sətirlərin necə uyğunlaşdırılacağını göstərir.

INNER JOIN istifadə nümunələri

Davam edən nümunələr üçün iki cədvəllə işləyəcəyik:

students cədvəli — tələbələr haqqında məlumatlar

student_id name age
1 Otto 20
2 Anna 22
3 Peter 19
4 Dia 21

enrollments cədvəli — kurslara yazılışlar haqqında məlumatlar

enrollment_id student_id course_id
101 1 501
102 2 502
103 2 503
104 3 504

Diqqət et, Dia tələbəsi (student_id = 4) heç bir kursa yazılmayıb.

Nümunə 1: Tələbələr və onların kursları haqqında məlumat almaq

Biz bilmək istəyirik ki, hansı tələbələr kurslara yazılıb. Bu, INNER JOIN üçün tipik nümunədir. Bizə yalnız studentsenrollments cədvəllərində student_id əsasında uyğunluq olanlar maraqlıdır.

SELECT students.name, enrollments.course_id
FROM students INNER JOIN enrollments
ON students.student_id = enrollments.student_id;

Nəticə:

name course_id
Otto 501
Anna 502
Anna 503
Peter 504

Nə görürük? INNER JOIN yalnız kurslara yazılan tələbələri qaytardı. Dia tələbəsi isə heç bir kursa yazılmadığı üçün nəticədə yoxdur.

Nümunə 2: Sifarişlər və müştərilər haqqında məlumat almaq

İndi başqa bir nümunəyə baxaq. Tutaq ki, bizdə orders (sifarişlər) və customers (müştərilər) cədvəlləri var. Biz bütün sifarişləri müştəri adları ilə birlikdə almaq istəyirik.

orders cədvəli

order_id customer_id amount
1 101 500
2 102 300
3 103 700

customers cədvəli

customer_id name
101 Otto
102 Anna
104 Peter

Tapşırıq: orderscustomers cədvəllərini customer_id üzrə birləşdirib yalnız uyğun müştərisi olan sifarişləri qaytarmalıyıq.

SELECT orders.order_id, customers.name, orders.amount
FROM orders INNER JOIN customers
ON orders.customer_id = customers.customer_id;

Nəticə:

order_id name amount
1 Otto 500
2 Anna 300

Diqqət et, order_id = 3 olan sifariş nəticəyə düşməyib, çünki customer_id = 103 olan müştəri customers cədvəlində yoxdur.

INNER JOIN cədvəlləri necə birləşdirir (və nə səhv ola bilər)

INNER JOIN — relasion bazada işləyəcəyin istənilən layihədə ən əsas alətdir. Bu, sanki alət dəstindəki açar kimidir: onsuz da nəsə edə bilərsən, amma nəticə əldə etmək çətin olacaq. Məsələn:

  • Bir neçə cədvəldən məlumatları birləşdirib hesabat hazırlayanda.
  • Analitika quranda, faktları ölçülərlə birləşdirəndə (məsələn, satışlar və müştərilər).
  • Başqa sistemlərin məlumatlarını inteqrasiya edəndə.

Yeni başlayanların ən çox etdiyi səhv — ON yazmağı unutmaq və ya birləşdirmə şərtini səhv göstərməkdir. Əgər düzgün şərt yazmasan, gözlədiyin nəticə əvəzinə iki cədvəlin dekart hasilini alacaqsan — bu minlərlə, hətta milyonlarla mənasız sətir ola bilər.

Səhv nümunəsi:

Bu nümunədə birləşdirmə şərti yoxdur, ona görə də sorğu iki cədvəldəki bütün mümkün sətir kombinasiyalarını yaradacaq (və bu, çox güman ki, istədiyin deyil):

SELECT students.name, enrollments.course_id
FROM students, enrollments;  -- SƏHV: birləşdirmə şərti yoxdur!

Nəticə tam xaos olacaq: students cədvəlindəki hər bir sətir enrollments cədvəlindəki hər bir sətirlə birləşəcək.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Tələbələrin və kursların sadə birləşdirilməsi
Tələbələrin və kursların sadə birləşdirilməsi
2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Müştərilərin və onların sifarişlərinin siyahısı
Müştərilərin və onların sifarişlərinin siyahısı
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION