SQL JOIN — jadvallarni bog'lash
Shu paytgacha bitta jadval bilan ishladik. Haqiqiy bazada esa ma’lumot
bir nechta jadvalga bo’lingan bo’ladi. Masalan buyurtmada faqat mijoz
raqami turadi, ismi emas. Bu jadvallarni birlashtirish uchun JOIN
ishlatiladi — bu SQL’ning eng kuchli imkoniyati.
Namuna bazadagi buyurtmalar jadvali:
| id | mijoz_id | mahsulot_id | soni | sana |
|---|---|---|---|---|
| 1 | 1 | 2 | 3 | 2026-07-01 |
| 2 | 1 | 4 | 1 | 2026-07-02 |
| 3 | 2 | 1 | 10 | 2026-07-02 |
| 4 | 3 | 3 | 2 | 2026-07-05 |
| 5 | 2 | 8 | 5 | 2026-07-06 |
| 6 | 1 | 7 | 4 | 2026-07-08 |
Nega ma’lumot bo’lingan
buyurtmalar da mijozning ismi yo’q — faqat mijoz_id (raqami).
Sabab: agar har buyurtmada ism, shahar, yoshi takrorlansa, ma’lumot
ko’payadi va mijoz ismini o’zgartirish kerak bo’lsa, uni yuzta joyda
tuzatishga to’g’ri kelardi. Shuning uchun mijoz ma’lumoti bir marta
mijozlar da saqlanadi, buyurtma esa faqat uning raqamiga ishora
qiladi.
JOIN shu ishorani ochadi: raqam orqali mijozlar dan ismni topib,
buyurtmaga qo’shib beradi.
JOIN — ikki jadvalni birlashtirish
Har buyurtmani mijoz ismi bilan ko’ramiz. buyurtmalar va mijozlar ni
mijoz_id orqali bog’laymiz:
SELECT m.ism, b.mahsulot_id, b.soni
FROM buyurtmalar AS b
JOIN mijozlar AS m ON b.mijoz_id = m.id;
Natija — endi raqam o’rniga ism:
| ism | mahsulot_id | soni |
|---|---|---|
| Aziz | 2 | 3 |
| Aziz | 4 | 1 |
| Dilnoza | 1 | 10 |
| Bobur | 3 | 2 |
| Dilnoza | 8 | 5 |
| Aziz | 4 | 4 |
ON b.mijoz_id = m.id — bog’lovchi shart: buyurtmadagi mijoz_id
mijozdagi id ga teng bo’lgan qatorlar birlashtiriladi. b va m —
jadval taxalluslari: qaysi ustun qaysi jadvaldan
ekanini ko’rsatadi.
Uch jadvalni bog’lash
mahsulot_id ham raqam. Uni ham nomga aylantirish uchun yana bitta JOIN
qo’shamiz — bu safar mahsulotlar bilan:
SELECT m.ism, p.nom, b.soni
FROM buyurtmalar AS b
JOIN mijozlar AS m ON b.mijoz_id = m.id
JOIN mahsulotlar AS p ON b.mahsulot_id = p.id;
O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:
Natija — to’liq o’qiladigan ko’rinish: kim, nimani, nechta:
| ism | nom | soni |
|---|---|---|
| Aziz | Non | 3 |
| Aziz | Choy | 1 |
| Dilnoza | Olma | 10 |
| Bobur | Sut | 2 |
| Dilnoza | Guruch | 5 |
| Aziz | Suv | 4 |
Endi natija odam o’qiy oladigan holga keldi — hech qanday raqam qolmadi.
Amaliy mashq
Jadvallarni bog’lang:
buyurtmalarvamijozlarnimijoz_idorqali bog’lang;- natijaga mijoz ismi va buyurtma sonini chiqaring;
- uchinchi jadval
mahsulotlarni ham qo’shing; - har buyurtma uchun: kim, nima, nechta — uch ustunda ko’rsating;
ONshartini ataylab noto’g’ri yozing — natija qanday o’zgardi?
5-qadamda nechta qator chiqdi va nega?
Qisqacha xulosa
- Ma’lumot takrorlanmasligi uchun jadvallarga bo’linadi; buyurtmada
ism emas,
mijoz_id(raqam) turadi. JOIN ... ON— ikki jadvalni bog’lovchi shart orqali birlashtiradi:ON b.mijoz_id = m.id.- Chet kalit — boshqa jadvalning
idsiga ishora qiluvchi ustun. - Bir nechta
JOINbilan uch va undan ko’p jadvalni birlashtirish mumkin. JOIN(INNER) faqat mos qatorlarni beradi; mos kelmaganlar tushadi.
Keyingi darsda GROUP BY — qatorlarni guruhlab,
har guruh uchun umumiy hisob chiqarishni ko’ramiz.