মূল কন্টেন্টে যান
মডিউল 3 · 1-এর পাঠ 4কোর্সে 9/57~12 min
মডিউল পাঠ (1/4)

দুটি টেবিলে যোগদান: অভ্যন্তরীণ যোগদান

এখন পর্যন্ত আমরা একবারে একটি টেবিল পড়েছি। বাস্তব জগতে, যাইহোক, তথ্য একাধিক সম্পর্কিত টেবিল জুড়ে ছড়িয়ে পড়ে: আমাদের ডেটাসেটে, উদাহরণস্বরূপ, প্রতিটি কর্মচারীর একটি department_id আছে যা departments টেবিলের দিকে নির্দেশ করে। দেখতে বিভাগের নাম (এবং শুধু এর id নয়) আমাদের যোগ দিতে হবে দুটি টেবিল। যে অপারেটর এটি করে তাকে JOIN বলা হয়।

মৌলিক সিনট্যাক্স

SQL
SELECT columns
FROM   table_a
JOIN   table_b ON table_a.x = table_b.y;

ইংরেজিতে পড়ুন: "take table_a, table_b সংযুক্ত করুন প্রতি জোড়া করে সারি যেখানে table_a.x সমান table_b.y"। ফলাফল হল একটি নতুন ভার্চুয়াল টেবিল উভয়ের কলাম সহ।

SQL
-- For each employee, also show the name of their department:
SELECT employees.first_name,
       employees.last_name,
       departments.name AS dipartimento
FROM   employees
JOIN   departments ON employees.department_id = departments.id;

ON এর পরের অংশটিকে যোগদানের শর্ত বলা হয়: এটিই বলে ইঞ্জিন "এই দুটি সারি প্রায় একই জিনিস, তাদের লাইন আপ করুন"। মধ্যে বেশিরভাগ ক্ষেত্রে এটি একটি প্রাথমিক কী এবং একটি বিদেশী মধ্যে একটি সমতা কী (এখানে departments.id এবং employees.department_id)।

অভ্যন্তরীণ যোগদান, বিস্তারিতভাবে

সম্পূর্ণ কীওয়ার্ডটি হল INNER JOIN, কিন্তু JOIN নিজেই মানক সমার্থক শব্দ "অভ্যন্তরীণ" এর অর্থ হল যে উভয়-এ মিল আছে শুধুমাত্র সেই সারিগুলি টেবিল ফেরত দেওয়া হয়:

  • যদি একজন কর্মচারীর department_id = NULL থাকে, তাহলে তারা দেখাবে না ফলাফল
  • যদি কোনো বিভাগের কোনো কর্মচারী না থাকে, তাহলে ফলাফলে এটি দেখাবে না।

যোগ্য কলামের নাম

যখন দুটি টেবিলের একই নামের কলাম থাকে (এখানে উভয়েরই id আছে, এবং উভয়েরই name আছে যদি আপনি এটি সম্পর্কে চিন্তা করেন), আপনাকে নির্দিষ্ট করতে হবে কোন টেবিল table.column লিখে একটি কলাম আসে। দীর্ঘ নামের পুনরাবৃত্তি এড়াতে, উপনামগুলি প্রায়শই ব্যবহৃত হয় (আপনি সেগুলি মডিউল 2 এ দেখেছেন):

SQL
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM   employees   AS e
JOIN   departments AS d ON e.department_id = d.id;

AS এখানেও ঐচ্ছিক: FROM employees e একই কাজ করে।

চেষ্টা করে দেখুন

ব্যায়াম#sql.m3.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

Ingegneria বিভাগের প্রতিটি কর্মচারীর জন্য, প্রথম নাম (first_name), পদবী (last_name) এবং বিভাগের শহর (departments.city) দেখান। তিন কলাম, প্রতি কর্মী এক সারি।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

e.department_id এবং d.id-এর মধ্যে সমতা সহ অন শর্তটি সম্পূর্ণ করুন, তারপরে তৃতীয় কলাম হিসাবে d.city নির্বাচন করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#sql.m3.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

মিলানো ভিত্তিক একটি বিভাগে কাজ করা সমস্ত কর্মচারীদের প্রথম নাম (প্রথম_নাম) এবং শেষ নাম (শেষ_নাম) তালিকাভুক্ত করুন। ডিপার্টমেন্টস সিটিতে ফিল্টার করুন, ডিপার্টমেন্টের নামে নয়।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

আগের অনুশীলনের মতোই যোগ দিন, কিন্তু ডিপার্টমেন্টের নামের পরিবর্তে d.city = 'Milano'-এ ফিল্টার করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ