সবেমাত্র সারণী তালিকাবদ্ধ করার WHERE
সাথে এবং যোগদানের মানদণ্ড নির্দিষ্ট করার জন্য ক্লজটি ব্যবহার করে পুরানো বাক্য গঠনটি বেশিরভাগ আধুনিক ডাটাবেসে অবচয় করা হচ্ছে।
এটি কেবল প্রদর্শনের জন্য নয়, আপনি যখন ইনার এবং আউটর উভয়টি একই ক্যোয়ারিতে যোগদান করেন তখন পুরানো বাক্য গঠনটি দ্ব্যর্থক হওয়ার সম্ভাবনা থাকে।
আমাকে যদি আপনি একটি উদাহরণ দিতে।
ধরা যাক আপনার সিস্টেমে আপনার কাছে 3 টি টেবিল রয়েছে:
Company
Department
Employee
প্রতিটি টেবিলে একসাথে লিঙ্কযুক্ত অসংখ্য সারি থাকে। আপনি একাধিক সংস্থা পেয়েছেন এবং প্রতিটি সংস্থার একাধিক বিভাগ থাকতে পারে এবং প্রতিটি বিভাগে একাধিক কর্মচারী থাকতে পারে।
ঠিক আছে, সুতরাং এখন আপনি নিম্নলিখিতটি করতে চান:
সমস্ত সংস্থাকে তালিকাবদ্ধ করুন এবং তাদের সমস্ত বিভাগ এবং তাদের সমস্ত কর্মচারী অন্তর্ভুক্ত করুন। মনে রাখবেন যে কয়েকটি সংস্থার এখনও কোনও বিভাগ নেই তবে আপনি সেগুলিও অন্তর্ভুক্ত করেছেন তা নিশ্চিত করুন। নিশ্চিত হয়ে নিন যে আপনি কেবলমাত্র বিভাগগুলি পুনরুদ্ধার করেছেন যেখানে কর্মচারী রয়েছে তবে সর্বদা সমস্ত সংস্থার তালিকা তৈরি করুন।
সুতরাং আপনি এটি করুন:
SELECT * -- for simplicity
FROM Company, Department, Employee
WHERE Company.ID *= Department.CompanyID
AND Department.ID = Employee.DepartmentID
নোট করুন যে আপনি কেবল লোকদের সাথে বিভাগগুলি চান সেই মানদণ্ডটি পূরণ করার জন্য শেষটি একটি অভ্যন্তরীণ যোগদান রয়েছে।
ঠিক আছে, তাই এখন কি হয়। ঠিক আছে, সমস্যাটি হ'ল এটি ডাটাবেস ইঞ্জিন, ক্যোরি অপটিমাইজার, সূচক এবং টেবিলের পরিসংখ্যানের উপর নির্ভর করে। আমাকে ব্যাখ্যা করতে দাও.
যদি ক্যোয়ারী অপ্টিমাইজারটি নির্ধারণ করে যে এটি করার উপায়টি প্রথমে কোনও সংস্থা নেওয়া, তারপরে বিভাগগুলি সন্ধান করুন এবং তারপরে কর্মীদের সাথে অভ্যন্তরীণ যোগদান করুন, আপনি এমন কোনও সংস্থা পাবেন না যার বিভাগ নেই।
এর কারণ হ'ল WHERE
ধারাটি নির্ধারণ করে যে কোন সারিগুলি চূড়ান্ত ফলাফলে শেষ হয়, সারিগুলির পৃথক অংশ নয়।
এবং এই ক্ষেত্রে, বাম যোগদানের কারণে, বিভাগ.আইডি কলামটি শূন্য হবে, এবং এইভাবে যখন এটি কর্মচারীর সাথে অন্তর্ভুক্ত হবে, তখন কর্মচারী সারিটির জন্য এই সীমাবদ্ধতা পূরণ করার কোনও উপায় নেই, এবং তাই এটি হবে না প্রদর্শিত হবে।
অন্যদিকে, যদি ক্যোয়ারী অপ্টিমাইজার বিভাগ-কর্মচারী যোগদানের বিষয়টি প্রথমে সামলানো এবং তারপরে সংস্থাগুলির সাথে বাম দিকে যোগদান করার সিদ্ধান্ত নেয়, আপনি সেগুলি দেখতে পাবেন।
সুতরাং পুরানো বাক্য বাক্যটি দ্ব্যর্থক। কোয়েরি ইঙ্গিতগুলি ব্যবহার না করে আপনি কী চান তা নির্দিষ্ট করার কোনও উপায় নেই এবং কিছু ডাটাবেসের কোনও উপায় নেই।
নতুন বাক্য গঠন লিখুন, এটির সাহায্যে আপনি চয়ন করতে পারেন।
উদাহরণস্বরূপ, যদি আপনি সমস্ত সংস্থাগুলি চান, যেমন সমস্যার বিবরণ বর্ণিত হয়েছে, আপনি যা লিখবেন তা এই:
SELECT *
FROM Company
LEFT JOIN (
Department INNER JOIN Employee ON Department.ID = Employee.DepartmentID
) ON Company.ID = Department.CompanyID
এখানে আপনি উল্লেখ করেছেন যে আপনি চান যে বিভাগ-কর্মচারী যোগদান হিসাবে একটি হিসাবে যোগদান করা হবে, এবং তারপরে সংস্থাগুলির সাথে এর ফলাফলগুলিতে যোগদান করুন।
অতিরিক্তভাবে, আসুন আমরা বলি যে আপনি কেবলমাত্র এমন বিভাগগুলি চান যা তাদের নামে X অক্ষর রাখে। আবার পুরানো স্টাইলের সাথে যোগ দেওয়ার সাথে সাথে আপনিও কোম্পানিকে হারাতে পারেন, যদি এটির নামে একটি এক্স সহ কোনও বিভাগ না থাকে তবে নতুন সিনট্যাক্সের সাহায্যে আপনি এটি করতে পারেন:
SELECT *
FROM Company
LEFT JOIN (
Department INNER JOIN Employee ON Department.ID = Employee.DepartmentID
) ON Company.ID = Department.CompanyID AND Department.Name LIKE '%X%'
এই অতিরিক্ত ধারাটি যোগদানের জন্য ব্যবহৃত হয়, তবে পুরো সারির জন্য ফিল্টার নয়। সুতরাং সারিটি সংস্থার তথ্য সহ উপস্থিত হতে পারে তবে সেই বিভাগের সমস্ত বিভাগ এবং কর্মচারী কলামগুলিতে NULL থাকতে পারে, কারণ সেই সংস্থার নামে একটি এক্স সহ কোনও বিভাগ নেই। এটি পুরানো বাক্য বাক্সের সাথে শক্ত।
এই কারণেই, অন্যান্য বিক্রেতাদের মধ্যে, মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৫ এবং তারপরের দিকে পুরানো বাইরের জোড় সিনট্যাক্সকে ছাড়েনি, তবে পুরানো অভ্যন্তরীণ জোড় সিনট্যাক্সকে ছাড়িয়েছে। মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০ 2005 বা ২০০৮ সালে চলমান একটি ডাটাবেসের সাথে কথা বলার একমাত্র উপায়, পুরানো স্টাইলের বাইরের জোড় সিনট্যাক্স ব্যবহার করে, সেই ডাটাবেসটিকে 8.0 সামঞ্জস্যতা মোডে সেট করা (ওরফে এসকিউএল সার্ভার 2000)।
তদ্ব্যতীত, পুরানো উপায়, কোয়েরি অপ্টিমাইজারে টেবিলের একগুচ্ছ নিক্ষেপ করে WHERE ক্লজগুলির একগুচ্ছ, "এখানে আপনি আছেন, যথাসাধ্য চেষ্টা করুন" বলার অনুরূপ। নতুন সিনট্যাক্সের সাহায্যে, কোন্ অংশগুলি একসাথে চলেছে তা নির্ধারণের জন্য ক্যোয়ারী অপ্টিমাইজারের কাছে কম কাজ করা উচিত।
তাই সেখানে যদি আপনি এটি আছে।
বাম এবং অন্তর্ভুক্ত যোগদান ভবিষ্যতের তরঙ্গ।