যাইহোক, এসকিউএল-এ এক ধরণের যোগদান রয়েছে যা রাডারের অধীনে চলে যায় যা একটি স্ব-যোগদান হিসাবে পরিচিত।
এসকিউএল-এ, একটি স্ব-যোগদান একটি শক্তিশালী কৌশল যা আমাদের একই টেবিলের মধ্যে সম্পর্কিত কলামের উপর ভিত্তি করে একই টেবিল থেকে সারিগুলিকে একত্রিত করতে দেয়।
এসকিউএল-এ অন্যান্য ধরনের যোগদানের বিপরীতে যেখানে আমরা একাধিক টেবিল থেকে ডেটা গ্রহণ করি, একটি স্ব-যোগদান একটি একক টেবিলে কাজ করে।
আপনি ভাবতে পারেন, যখন আমি টেবিল থেকে ডেটা দেখতে পারি তখন কেন আমার একটি স্ব-যোগদানের প্রয়োজন? যদিও এটি সত্য হতে পারে, একটি স্ব-যোগদান কাজগুলিতে সাহায্য করতে পারে যখন আপনাকে পুনরাবৃত্ত ডেটা প্রশ্নগুলি সম্পাদন করতে হবে বা একটি শ্রেণিবদ্ধ ডেটা খুঁজে পেতে হবে।
মূলত, একটি স্ব-যোগদান একটি মৌলিক ভূমিকা পালন করে যেখানে আপনাকে একই টেবিলের সারিগুলির তুলনা করতে হবে।
এই পোস্টে আমাদের সাথে যোগ দিন কারণ আমরা অন্বেষণ করি যে স্ব-যোগদানগুলি কী, তারা কীভাবে কাজ করে এবং কীভাবে আমরা সেগুলিকে একটি SQL টেবিলে ব্যবহার করতে পারি।
দ্রষ্টব্য: আমরা ডুব দেওয়ার আগে, আমরা প্রদর্শনের উদ্দেশ্যে একটি মৌলিক টেবিল সেটআপ করব। যাইহোক, আপনি যেকোনো সমর্থিত ডেটাসেট ব্যবহার করতে অনুভব করছেন।
নমুনা তথ্য
নিম্নলিখিত প্রশ্নগুলি একটি পণ্যের তথ্য সম্বলিত একটি মৌলিক সারণী তৈরি করে এবং নমুনা রেকর্ডগুলি টেবিলে সন্নিবেশিত করে। এটি আমাদের প্রদর্শন করতে দেয় কিভাবে এসকিউএল-এ স্ব-যোগদানের সাথে কাজ করতে হয়।
টেবিল পণ্য তৈরি করুন (পণ্য_আইডি প্রাথমিক কী,
পণ্য_নাম VARCHAR(255) শূন্য নয়,
parent_id INT
);
টেবিলে 10টি নমুনা রেকর্ড যোগ করুন।
পণ্যের মধ্যে সন্নিবেশ করুন (product_id, product_name, parent_id) VALUES(1, 'ইলেকট্রনিক্স', NULL),
(2, 'স্মার্টফোন', 1),
(3, 'ল্যাপটপ', 1),
(4, 'iPhone 13', 2),
(5, 'স্যামসাং গ্যালাক্সি এস21', 2),
(6, 'ম্যাকবুক প্রো', 3),
(7, 'Dell XPS 15', 3),
(8, 'আনুষঙ্গিক', NULL),
(9, 'ফোন কেস', 8),
(10, 'ল্যাপটপ ব্যাগ', 8);
ফলস্বরূপ টেবিলটি নিম্নরূপ:
উদাহরণ 1: মৌলিক স্ব-যোগদান
আসুন একটি মৌলিক স্ব-যোগ দিয়ে শুরু করি। উদাহরণস্বরূপ, আমরা একই টেবিলের পিতামাতা-সন্তান সম্পর্ক পুনরুদ্ধার করতে একটি সাধারণ স্ব-যোগদান ব্যবহার করতে পারি।
উদাহরণস্বরূপ, আমরা সমস্ত পণ্য এবং তাদের সংশ্লিষ্ট মূল পণ্যগুলি খুঁজে পেতে এটি ব্যবহার করতে পারি। আমরা নিম্নরূপ একটি প্রশ্ন চালাতে পারি:
c.product_name AS child_product, p.product_name AS parent_product নির্বাচন করুনপণ্য থেকে গ
বাম যোগদান পণ্য p ON c.parent_id = p.product_id;
প্রদত্ত উদাহরণের ক্যোয়ারীতে, আমরা পণ্য টেবিলের একটি উপনাম হিসাবে 'c' ব্যবহার করি যা শিশু পণ্যগুলিকে উপস্থাপন করে।
আমরা মূল পণ্যগুলিকে উপস্থাপন করার জন্য পণ্য টেবিলের জন্য 'p' উপনামও তৈরি করি।
পরবর্তী ধাপে, ফলাফলে শীর্ষ-স্তরের পণ্যগুলি অন্তর্ভুক্ত করা হয়েছে তা নিশ্চিত করতে আমরা একটি মৌলিক SQL বাম যোগদান ব্যবহার করি।
সবশেষে, আমরা 'parent_id' এবং 'product_id' কলাম ব্যবহার করে সন্তান এবং পিতামাতার রেকর্ডের মধ্যে একটি সম্পর্ক তৈরি করতে ON ক্লজ ব্যবহার করি।
ফলস্বরূপ টেবিলটি নিম্নরূপ:
আপনি লক্ষ্য করবেন যে মূল পণ্যগুলির একটি শীর্ষ লিঙ্ক নেই কারণ তারা অনুক্রমের শীর্ষে রয়েছে যা মূল উপাদান হিসাবেও পরিচিত।
উদাহরণ 2: একটি হায়ারার্কিক্যাল ডেটা আনুন
একটি স্ব-যোগদানের সবচেয়ে মৌলিক ভূমিকাগুলির মধ্যে একটি হল একটি শ্রেণিবদ্ধ ডেটা পুনরুদ্ধার করা। উদাহরণস্বরূপ, ধরুন আমরা সমস্ত চাইল্ড পণ্য পুনরুদ্ধার করতে চাই যেখানে পণ্যটি 'আনুষঙ্গিক' এর সমান। আমরা নিম্নরূপ একটি স্ব-যোগদান ব্যবহার করে ক্যোয়ারী চালাতে পারি:
c.product_name AS child_product নির্বাচন করুনপণ্য থেকে গ
পণ্যে যোগ দিন p ON c.parent_id = p.product_id
যেখানে p.product_name = 'আনুষাঙ্গিক';
এই ক্ষেত্রে, আমরা পণ্য টেবিলটিকে নিজের সাথে একত্রিত করতে একটি JOIN ব্যবহার করি এবং তারপরে আমরা যে ফলাফলগুলি চাই তা ফিল্টার করতে WHERE ক্লজ ব্যবহার করি।
উপসংহার
এই টিউটোরিয়ালে, আমরা অন্বেষণ করেছি একটি স্ব-যোগদান কী, এটি কীভাবে কাজ করে এবং কীভাবে আমরা এটিকে একটি শ্রেণিবদ্ধ ডেটা পুনরুদ্ধার করতে বা পুনরাবৃত্তিমূলক প্রশ্নগুলি সম্পাদন করতে SQL টেবিলে ব্যবহার করতে পারি।