CodeGym /Kurslar /SQL SELF /LEFT JOIN istifadəsi: sol cədvəldəki bütün d...

LEFT JOIN istifadəsi: sol cədvəldəki bütün dataları daxil etmək

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

Təsəvvür elə, səndə iki cədvəl var: tələbələrin siyahısı və onların kurslara yazılışları. Bütün tələbələr kurs seçməyib və sən bütün tələbələrin tam siyahısını görmək istəyirsən, hətta hansısa səbəbdən kurs seçməyənləri də. INNER JOIN ilə ancaq kursa yazılanları görəcəksən, bəs qalan tələbələr necə olsun? Bax, bunun üçün LEFT JOIN var.

LEFT JOIN sol cədvəldəki bütün sətirləri (sorğuda birinci göstərilən) və sağ cədvəldə uyğun gələn sətirləri qaytarır. Əgər uyğunluq yoxdursa, sağ cədvəlin sütunları üçün NULL dəyəri qaytarılır.

LEFT JOIN sintaksisi

SELECT
    cedvel1.sutun1,
    cedvel1.sutun2,
    cedvel2.sutun1,
    cedvel2.sutun2    
FROM 
    cedvel1 LEFT JOIN cedvel2
ON 
    cedvel1.umumi_sutun = cedvel2.umumi_sutun;
  • cedvel1 — "sol" cədvəldir.
  • cedvel2 — "sağ" cədvəldir.
  • umumi_sutun — birləşmə üçün istifadə olunan ümumi sütundur.

Sadə nümunə

Əgər students cədvəli belədirsə:

student_id name
1 Otto
2 Anna
3 Peter

enrollments cədvəli belədirsə:

enrollment_id student_id course
1 1 Riyaziyyat
2 1 Fizika
3 2 Biologiya

Onda sorğu belə olacaq:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Nəticə:

name course
Otto Riyaziyyat
Otto Fizika
Anna Biologiya
Peter NULL

Gördüyün kimi, nəticədə bütün tələbələr qalıb, hətta Peter də, hansı ki, hələ heç bir kursa yazılmayıb. Peter üçün course sütununda NULL yazılıb.

LEFT JOIN istifadəsinə nümunələr

Nümunə 1: Bütün tələbələrin və onların kurslarının siyahısını almaq

Tapşırıq belədir: bütün tələbələrin siyahısını və onların yazıldığı kursları əldə etmək lazımdır. Əgər tələbə hələ kurs seçməyibsə, bu da göstərilməlidir.

Eyni sorğu:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Nəticə:

name course
Otto Riyaziyyat
Otto Fizika
Anna Biologiya
Peter NULL

Bu, LEFT JOIN istifadəsinin klassik nümunəsidir.

Nümunə 2: Məhsullar və onların satışları

Tutaq ki, səndə iki cədvəl var:

Bütün məhsulları saxlayan products cədvəli:

product_id product_name
1 Smartfon
2 Planşet
3 Noutbuk

Satış məlumatlarını saxlayan sales cədvəli:

sale_id product_id quantity
1 1 5
2 1 3
3 2 2

İndi isə bütün məhsulları və onların satış sayını görmək istəyirsən, hətta satılmayan məhsullar da daxil olmaqla.

SELECT
    products.product_name, 
    SUM(sales.quantity) AS total_sold
FROM 
    products LEFT JOIN sales
    ON 
    products.product_id = sales.product_id
GROUP BY 
    products.product_name;

Nəticə:

product_name total_sold
Smartfon 8
Planşet 2
Noutbuk NULL

LEFT JOIN istifadə edəndə xüsusiyyətlər və problemlər

Həmişə NULL lazımdır?
Bəzən LEFT JOIN orda NULL verir ki, sən gözləmirdin. Belə hallarda NULL-u başa düşülən dəyərlə əvəz etmək üçün COALESCE() funksiyasından istifadə edə bilərsən.

SELECT
    students.name, 
    COALESCE(enrollments.course, 'Kurs seçilməyib') AS course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Nəticə:

name course
Otto Riyaziyyat
Otto Fizika
Anna Biologiya
Peter Kurs seçilməyib

Lazımsız təkrarlar
Əgər sağ cədvəldə təkrarlanan məlumatlar varsa, sorğunun nəticəsində gözlədiyindən çox sətir ola bilər. İşlədiyin dataya diqqət elə və əgər təkrarlar lazım deyilsə, DISTINCT istifadə et.

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