SQL JOIN turlari: INNER, LEFT, RIGHT, FULL

Avvalgi darsda JOIN bilan jadvallarni bog’lashni ko’rdik. U paytda ishlatgan oddiy JOIN — aslida INNER JOIN, ya’ni faqat ikkala jadvalda mos bo’lgan qatorlarni beradi. Lekin ba’zan mos kelmaganlarni ham ko’rsatish kerak bo’ladi. Shu yerda JOIN turlari ish beradi.

Eslatib o’tamiz: mijozlar da to’rt kishi bor, lekin Malika (id 4) hech narsa buyurtma qilmagan.

INNER JOIN — faqat mos qatorlar

Bu — standart tur. Faqat bog’lovchi shart bajarilgan qatorlar chiqadi:

SELECT m.ism, b.mahsulot_id
FROM mijozlar AS m
INNER JOIN buyurtmalar AS b ON m.id = b.mijoz_id;

O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:

SQL · namuna baza

Natijada Malika yo’q — chunki uning buyurtmasi yo’q, mos qator topilmadi. Aziz, Dilnoza va Bobur o’z buyurtmalari bilan chiqadi. JOIN va INNER JOIN — bir xil narsa, INNER so’zini yozmasa ham bo’ladi.

LEFT JOIN — chap jadvaldagi hammani saqlaydi

LEFT JOIN chap jadvaldagi (FROM dan keyingi) barcha qatorlarni qaytaradi. O’ng jadvalda mos yo’q bo’lsa — ustunlar NULL bilan to’ldiriladi:

SELECT m.ism, b.mahsulot_id, b.soni
FROM mijozlar AS m
LEFT JOIN buyurtmalar AS b ON m.id = b.mijoz_id;

Natija — endi Malika ham bor:

ism mahsulot_id soni
Aziz 2 3
Aziz 4 1
Aziz 7 4
Dilnoza 1 10
Dilnoza 8 5
Bobur 3 2
Malika NULL NULL

Malika qatorida buyurtma ustunlari NULL — “qiymat yo’q” degani. Aynan shu LEFT JOIN’ning kuchi: “hamma mijozni ko’rsat, buyurtma bor-yo’qligidan qat’i nazar”.

RIGHT JOIN — o’ng jadvaldagi hammani saqlaydi

RIGHT JOIN — LEFT’ning ko’zgudagi aksi: bu safar o’ng jadvaldagi hamma qator saqlanadi. Amalda uni kamroq ishlatishadi, chunki jadvallar o’rnini almashtirib, o’sha natijani LEFT JOIN bilan ham olsa bo’ladi:

-- Bu ikkisi bir xil natija beradi:
SELECT * FROM mijozlar AS m RIGHT JOIN buyurtmalar AS b ON m.id = b.mijoz_id;
SELECT * FROM buyurtmalar AS b LEFT JOIN mijozlar AS m ON b.mijoz_id = m.id;

FULL JOIN — ikkala tarafdagi hammani saqlaydi

FULL JOIN (to’liq nomi FULL OUTER JOIN) — LEFT va RIGHT ning birlashmasi: ikkala jadvaldagi barcha qatorlar chiqadi, mos kelmaganlari NULL bilan. U mijozlar va buyurtmalarni umuman yo’qotmasdan yonma-yon qo’yish kerak bo’lganda ishlatiladi.

Qaysi JOIN qachon kerak

Savol JOIN turi
Faqat mos qatorlar kerakmi? INNER JOIN
Chap jadvaldan hamma kerakmi? LEFT JOIN
O’ng jadvaldan hamma kerakmi? RIGHT JOIN
Ikkala tarafdan ham hamma kerakmi? FULL JOIN

Amalda ko’p ishlatiladigan ikkitasi — INNER va LEFT. Shu ikkisini puxta bilsangiz, JOIN masalalarining aksari yechiladi.

Amaliy mashq

JOIN turlarini solishtiring:

  1. mijozlar va buyurtmalar ni INNER JOIN bilan bog’lang;
  2. xuddi shuni LEFT JOIN bilan yozing;
  3. ikki natijadagi qatorlar sonini solishtiring;
  4. LEFT JOIN da NULL chiqqan qatorni toping — bu kim?
  5. WHERE b.id IS NULL qo’shib, hech narsa buyurtma qilmaganlarni ajrating.

Malika nega faqat LEFT JOIN natijasida ko’rinadi?

Qisqacha xulosa

  • INNER JOIN (oddiy JOIN) — faqat ikkala jadvalda mos qatorlar.
  • LEFT JOINchap jadvaldan hamma; mos yo’q joyda NULL.
  • RIGHT JOIN — o’ngdan hamma; jadvalni almashtirib LEFT bilan ham bo’ladi.
  • FULL JOIN — ikkala tarafdan hamma qator.
  • WHERE b.id IS NULL bilan LEFT JOIN “mos kelmaganlarni” topadi (masalan buyurtmasiz mijozlar).

Keyingi darsda HAVING — guruhlangan natijani, ya’ni GROUP BY chiqargan guruhlarni filtrlashni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi