এটি দুটি বা ততোধিক টেবিলকে একত্রিত করার মতো মনে হচ্ছে, আমরা হয় যোগ বা যেখানে ব্যবহার করতে পারি। একে অপরের ওপরে কী কী সুবিধা রয়েছে?
এটি দুটি বা ততোধিক টেবিলকে একত্রিত করার মতো মনে হচ্ছে, আমরা হয় যোগ বা যেখানে ব্যবহার করতে পারি। একে অপরের ওপরে কী কী সুবিধা রয়েছে?
উত্তর:
একাধিক টেবিলের সাথে জড়িত যে কোনও প্রশ্নের জন্য টেবিল "এ" থেকে টেবিল "বি" এর সাথে ফলাফলগুলি লিঙ্ক করার জন্য কিছু প্রকারের সমিতি দরকার। Doingতিহ্যবাহী (এএনএসআই -৯৯) এর অর্থ হ'ল:
যেখানে সারণিগুলির মধ্যে সারণিগুলির মধ্যে সমিতি লিখুন ER
SELECT *
FROM TABLE_A a,
TABLE_B b
WHERE a.id = b.idএখানে এএনএসআই -২২ জিন সিনট্যাক্স ব্যবহার করে পুনরায় লিখিত ক্যোয়ারীটি দেওয়া হয়েছে:
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
যেখানে সমর্থিত (ওরাকল 9 আই +, পোস্টগ্রিসকিউএল 7.2+, মাইএসকিউএল 3.23+, এসকিউএল সার্ভার 2000+) সেখানে অন্যটির বাক্য গঠন বাক্য ব্যবহার করে কোনও কার্যকারিতা সুবিধা নেই benefit অপ্টিমাইজার তাদের একই কোয়েরি হিসাবে দেখবে। তবে আরও জটিল প্রশ্নগুলি এএনএসআই -২৯ সিনট্যাক্স ব্যবহার করে উপকৃত হতে পারে:
এএনএসআই -৯৯ এর সাথে এএনএসআই -২৯ জিন সিনট্যাক্স ব্যবহারের অসংখ্য কারণ রয়েছে:
এএনএসআই -২২ জিন সিনট্যাক্সটি প্যাটার্ন, অ্যান্টি-প্যাটার্ন নয়:
পরিচিতি এবং / বা স্বাচ্ছন্দ্যের সংক্ষিপ্ততা, আমি এএনএসআই -৯৯ জোনের সিনট্যাক্সের পরিবর্তে এএনএসআই -৯৯ WHERE ধারাটি ব্যবহার করা চালিয়ে যাওয়ার কোনও উপকার দেখতে পাচ্ছি না। কেউ কেউ অভিযোগ করতে পারেন যে এএনএসআই -২৯ সিনট্যাক্সটি আরও ভার্বোজ, তবে এটি এটিকে স্পষ্ট করে তোলে। আরও স্পষ্টত, বোঝা এবং বজায় রাখা তত সহজ।
কোনটিতে কী যোগ দেওয়া হচ্ছে সে সম্পর্কে বেশিরভাগ লোকেরা জিন সিনট্যাক্সটি কিছুটা স্পষ্টভাবে খুঁজে পেতে চান। অতিরিক্তভাবে, এটি একটি মানক হওয়ার সুবিধা রয়েছে।
ব্যক্তিগতভাবে, আমি যেখানে "বড় হয়েছি", তবে যতই আমি যুক্ত সিনট্যাক্স ব্যবহার করি আমি এটি আরও স্পষ্টভাবে দেখতে শুরু করি।
সিনট্যাক্স ব্যবহার করার ক্ষেত্রে এই সমস্যাগুলি (অন্তর্নিহিত যোগদান হিসাবে অন্যান্য জ্ঞানী)
প্রথমত, দুর্ঘটনাক্রমে ক্রস যোগ দেওয়া খুব সহজ কারণ যোগদানের শর্তগুলি টেবিলের নামের পাশে ঠিক নেই। যদি আপনার 6 টি টেবিল একসাথে যোগদান করা হয় তবে যেখানে ক্লজটিতে একটিটি মিস করা সহজ। আপনি পৃথক কীওয়ার্ড ব্যবহার করে এটি প্রায়শই স্থির দেখতে পাবেন। এটি ডাটাবেসের জন্য অহেজ পারফরম্যান্স হিট। সুস্পষ্ট জোড় সিনট্যাক্স ব্যবহার করে আপনি দুর্ঘটনাজনক ক্রস জয়েন পেতে পারবেন না কারণ এটি সিনট্যাক্স চেককে ব্যর্থ করবে।
ডান এবং বাম সংযোগগুলি সমস্যাযুক্ত (এসকিউএল সার্ভারে আপনার সঠিক ফলাফল পাওয়ার নিশ্চয়তা নেই) কিছু ডাটাবেসে পুরানো বাক্য বাক্সে। আরও সেগুলি আমার জানা এসকিউএল সার্ভারে অবচিত করা হয়েছে।
যদি আপনি ক্রস জয়েন ব্যবহার করতে চান তবে এটি পুরানো বাক্য গঠন থেকে পরিষ্কার নয়। এটি বর্তমানের এএনএসআইআই স্ট্যান্ডার্ডটি ব্যবহার করে পরিষ্কার।
কোন ক্ষেত্রগুলি যোগ দেওয়ার অংশ বা কোন টেবিলগুলি অন্তর্ভুক্ত বাক্য বিন্যাসটি ব্যবহার করে কোন ক্রমে একত্রিত হয় তা ঠিক রক্ষণাবেক্ষণকারীদের পক্ষে দেখা অনেক কঠিন। এর অর্থ প্রশ্নগুলি সংশোধন করতে আরও বেশি সময় লাগতে পারে। আমি খুব কম লোককেই চিনি, যারা একবার স্পষ্ট যোগদানের বাক্য গঠন নিয়ে স্বাচ্ছন্দ্য বোধ করার জন্য সময় নিয়ে গেলে, কখনও পুরানো পথে ফিরে যায়।
আমি আরও লক্ষ্য করেছি যে কিছু লোক যারা এই অন্তর্নিহিত যোগদানগুলি ব্যবহার করে তারা আসলে কীভাবে যোগদান করে তা বুঝতে পারে না এবং এইভাবে তাদের অনুসন্ধানগুলিতে ভুল ফলাফল পাচ্ছে।
সত্যি বলতে কি, আপনি কি 18 বছর আগে আরও ভাল পদ্ধতিতে প্রতিস্থাপন করা অন্য কোনও ধরণের কোড ব্যবহার করবেন?
স্পষ্টত যোগদান করে অভিপ্রায় জড়িত, ফিল্টারিং করতে ক্লজ যেখানে ছেড়ে। এটি পরিষ্কার এবং এটি আদর্শ এবং আপনি বাম বাইরের বা ডান বাহিরের মতো কাজগুলি করতে পারেন যা কেবল যেখানেই করা শক্ত।
আপনি দুটি টেবিল একত্রিত করতে WHERE ব্যবহার করতে পারবেন না। আপনি যা করতে পারেন তা লিখতে হয়:
SELECT * FROM A, B
WHERE ...
এখানে কমা লেখার সমতুল্য:
SELECT *
FROM A
CROSS JOIN B
WHERE ...
আপনি কি এটা লিখবেন? না - কারণ আপনি মোটেই বোঝাতে চাইছেন না। আপনি ক্রস যোগ দিতে চান না, আপনি একটি অন্তর্ভুক্ত যোগদান করতে চান। কিন্তু যখন আপনি কমা লিখেন, আপনি ক্রস যোগ দিয়ে বলছেন এবং এটি বিভ্রান্তিকর।
আসলে আপনার প্রায়শই "WHERE" এবং "যোগদান" উভয়ই প্রয়োজন।
"যোগদান" দুটি টেবিল থেকে ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয় - একটি সাধারণ কলামের মানগুলির উপর ভিত্তি করে। আপনি যদি এই ফলাফলটি আরও ফিল্টার করতে চান তবে WHERE ধারাটি ব্যবহার করুন।
উদাহরণস্বরূপ, "বাম যোগ দিন" বাম টেবিল থেকে সমস্ত সারি পুনরুদ্ধার করে, ডান টেবিল থেকে মিলছে সারিগুলি। তবে এটি কোনও নির্দিষ্ট মান বা JOIN এর অংশ নয় এমন অন্যান্য কলামগুলিতে রেকর্ডগুলি ফিল্টার করে না। সুতরাং, আপনি যদি এই ফলাফলটি আরও ফিল্টার করতে চান তবে WHERE ধারাটিতে অতিরিক্ত ফিল্টার নির্দিষ্ট করুন।