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:
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:
mijozlarvabuyurtmalarniINNER JOINbilan bog’lang;- xuddi shuni
LEFT JOINbilan yozing; - ikki natijadagi qatorlar sonini solishtiring;
LEFT JOINda NULL chiqqan qatorni toping — bu kim?WHERE b.id IS NULLqo’shib, hech narsa buyurtma qilmaganlarni ajrating.
Malika nega faqat LEFT JOIN natijasida ko’rinadi?
Qisqacha xulosa
INNER JOIN(oddiyJOIN) — faqat ikkala jadvalda mos qatorlar.LEFT JOIN— chap jadvaldan hamma; mos yo’q joydaNULL.RIGHT JOIN— o’ngdan hamma; jadvalni almashtirib LEFT bilan ham bo’ladi.FULL JOIN— ikkala tarafdan hamma qator.WHERE b.id IS NULLbilan LEFT JOIN “mos kelmaganlarni” topadi (masalan buyurtmasiz mijozlar).
Keyingi darsda HAVING — guruhlangan natijani, ya’ni
GROUP BY chiqargan guruhlarni filtrlashni ko’ramiz.