join-3-tables

পাঠ ১২ · তিন টেবিলের JOIN

তিন টেবিলের JOIN কেন?

একজন শিক্ষার্থী অনেক বিষয় পড়ে। একটি বিষয় অনেক শিক্ষার্থী পড়ে। এটি Many to Many রিলেশন। student আর subject টেবিলের মধ্যে সরাসরি কোনো কলাম মেলে না। মাঝখানে result টেবিল দুটোকে যুক্ত করে: result এর roll যায় student এ, result এর subject_code যায় subject এ।

তাই শিক্ষার্থীর নাম, বিষয়ের নাম ও নম্বর একসাথে দেখতে তিনটি টেবিল জোড়া লাগাতে হবে।

সিনট্যাক্স

SQL Syntax Rule
SELECT [কলামের নাম]
FROM [টেবিল ১]
JOIN [টেবিল ২] ON [টেবিল ১ ও ২ এর মিল]
JOIN [টেবিল ৩] ON [টেবিল ২ ও ৩ এর মিল];

উদাহরণ ১: নাম, বিষয় ও নম্বর

SELECT s.name, sub.subject_name, r.marks
FROM student AS s
JOIN result AS r ON s.roll = r.roll
JOIN subject AS sub ON r.subject_code = sub.subject_code;

ধাপে ধাপে ব্যাখ্যা

ধাপ ১: student ও result জোড়া লাগে roll দিয়ে। এতে নাম আসে, কিন্তু বিষয়ের শুধু কোড থাকে।

ধাপ ১ এর পরে১৫টি সারি
namesubject_codemarks
Rudra27588
Rudra17482
Rudra10176
Habib27578
Habib25375
Habib10972
Pappu27529
Pappu30465
Pappu10160
Anik27531
Anik17490
Anik10170
Priya27565
Priya25384
Priya10980

ধাপ ২: এই ফলাফলের সাথে subject জোড়া লাগে subject_code দিয়ে। কোডের জায়গায় বিষয়ের নাম আসে।

  • JOIN result AS r ON s.roll = r.roll→ধাপ ১: roll মিলিয়ে student ও result
  • JOIN subject AS sub ON r.subject_code = sub.subject_code→ধাপ ২: কোড মিলিয়ে subject
ফলাফল১৫টি সারি
namesubject_namemarks
RudraICT88
RudraPhysics82
RudraBangla76
HabibICT78
HabibAccounting75
HabibEconomics72
PappuICT29
PappuHistory65
PappuBangla60
AnikICT31
AnikPhysics90
AnikBangla70
PriyaICT65
PriyaAccounting84
PriyaEconomics80

উদাহরণ ২: ICT তে কারা ফেল করেছে

জোড়া লাগানোর পরে WHERE দিয়ে শর্ত দিই। বিষয়ের কোড মনে রাখতে হচ্ছে না, নাম দিয়েই খুঁজছি।

SELECT s.name, sub.subject_name, r.marks
FROM student AS s
JOIN result AS r ON s.roll = r.roll
JOIN subject AS sub ON r.subject_code = sub.subject_code
WHERE sub.subject_name = 'ICT'
  AND r.marks < 33;
ফলাফল২টি সারি
namesubject_namemarks
PappuICT29
AnikICT31

আরও একটি উদাহরণ: সাজিয়ে দেখা

Physics বিষয়ে কে কত পেয়েছে, বেশি নম্বর আগে।

SELECT s.name, sub.subject_name, r.marks
FROM student AS s
JOIN result AS r ON s.roll = r.roll
JOIN subject AS sub ON r.subject_code = sub.subject_code
WHERE sub.subject_name = 'Physics'
ORDER BY r.marks DESC;
ফলাফল২টি সারি
namesubject_namemarks
AnikPhysics90
RudraPhysics82
মনে রাখো
  • প্রতিটি JOIN এর সাথে নিজের ON থাকবে। তিন টেবিলে দুইটি JOIN, দুইটি ON।
  • student ও subject দুই টেবিলেই group_name কলাম আছে। শিক্ষার্থীর গ্রুপ চাইলে s.group_name, বিষয়ের গ্রুপ চাইলে sub.group_name লিখতে হবে।
  • একইভাবে চার টেবিলও জোড়া লাগানো যায়। শুধু আরেকটি JOIN ও ON যোগ করতে হয়।

অনুশীলন

প্রতিটি প্রশ্নের Query নিজে লেখো। চাইলে SQL Playground এ টেবিল তৈরি করে চালিয়ে দেখো। তারপর উত্তর মিলিয়ে নাও।

১

Priya কোন কোন বিষয়ে কত নম্বর পেয়েছে?

উত্তর দেখো
SELECT s.name, sub.subject_name, r.marks
FROM student AS s
JOIN result AS r ON s.roll = r.roll
JOIN subject AS sub ON r.subject_code = sub.subject_code
WHERE s.name = 'Priya';
ফলাফল৩টি সারি
namesubject_namemarks
PriyaICT65
PriyaAccounting84
PriyaEconomics80
২

Bangla বিষয়ে কে কত নম্বর পেয়েছে?

উত্তর দেখো
SELECT s.name, sub.subject_name, r.marks
FROM student AS s
JOIN result AS r ON s.roll = r.roll
JOIN subject AS sub ON r.subject_code = sub.subject_code
WHERE sub.subject_name = 'Bangla';
ফলাফল৩টি সারি
namesubject_namemarks
RudraBangla76
PappuBangla60
AnikBangla70
৩

Science গ্রুপের শিক্ষার্থীদের নাম, বিষয় ও নম্বর দেখাও।

উত্তর দেখো
SELECT s.name, sub.subject_name, r.marks
FROM student AS s
JOIN result AS r ON s.roll = r.roll
JOIN subject AS sub ON r.subject_code = sub.subject_code
WHERE s.group_name = 'Science';
ফলাফল৬টি সারি
namesubject_namemarks
RudraICT88
RudraPhysics82
RudraBangla76
AnikICT31
AnikPhysics90
AnikBangla70
৪

চার টেবিল: Khulna তে থাকে এমন শিক্ষার্থীর নাম, ঠিকানা, বিষয় ও নম্বর দেখাও।

উত্তর দেখো
SELECT s.name, c.address, sub.subject_name, r.marks
FROM student AS s
JOIN contact AS c ON s.roll = c.roll
JOIN result AS r ON s.roll = r.roll
JOIN subject AS sub ON r.subject_code = sub.subject_code
WHERE c.address = 'Khulna';
ফলাফল৩টি সারি
nameaddresssubject_namemarks
PriyaKhulnaEconomics80
PriyaKhulnaAccounting84
PriyaKhulnaICT65