ক্রস জয়েন = (অন্তর্) জয়েন = কমা (",")
টিএল; ডিআর এসকিউএল ক্রস যোগ, (ইনার) যোগ এবং কমা (",") এর মধ্যে একমাত্র পার্থক্য (মূল্যায়নের আদেশের চেয়ে কম অগ্রাধিকার প্রাপ্ত কমা) এটি হ'ল (INNER) JOIN রয়েছে যখন ক্রস যোগ এবং কমা হয় না।
মধ্যবর্তী পণ্য পুনরায়
তিনটিই প্রতিটি টেবিল থেকে একটি সারির সম্ভাব্য সংমিশ্রণের মধ্যবর্তী ধারণামূলক এসকিউএল-স্টাইল রিলেশনাল "কার্টেসিয়ান" পণ্য, ওরফে ক্রস জয়েন উত্পাদন করে। এটি চালু এবং / বা যেখানে সারিগুলির সংখ্যা হ্রাস করে। এসকিউএল ফিডল
এসকিউএল স্ট্যান্ডার্ড সংজ্ঞায়িত <কমা> পণ্য (7.5 1.b.ii), <ক্রস যোগদানের> <কমা> (7.7 1. একটি) মাধ্যমে এবং যোগদান করুন <সার্চ শর্ত> মাধ্যমে <কমা> প্লাস যেখানে (7.7 1.b মাধ্যমে )।
উইকিপিডিয়ায় যেমন লেখা আছে:
ক্রস জয়েন
ক্রস যোগ যোগদানের টেবিলগুলি থেকে সারিগুলির কার্তেসিয়ান পণ্য ফেরত দেয়। অন্য কথায়, এটি সারণী তৈরি করবে যা প্রথম সারণী থেকে প্রতিটি সারি দ্বিতীয় সারণির প্রতিটি সারি সংযুক্ত করে।
ভেতরের যোগ দিতে
[...] যোগদানের ফলাফলকে প্রথম টেবিলে সমস্ত রেকর্ডের কার্টেসিয়ান পণ্য (বা ক্রস জয়েন) গ্রহণের ফলাফল হিসাবে সংজ্ঞায়িত করা যেতে পারে (টেবিল বিতে প্রতিটি রেকর্ডের সাথে টেবিল এ-র প্রতিটি রেকর্ড একত্রিত করে) এবং তারপরে ফিরে আসার ফলাফল হিসাবে সমস্ত রেকর্ড যা যোগদানের পূর্বাভাসকে সন্তুষ্ট করে।
"অন্তর্নিহিত যোগদানের স্বরলিপি" কেবলমাত্র সलेक्ट স্টেটমেন্টের এফআরএম ক্লজে যোগদানের জন্য সারণীগুলি তালিকাভুক্ত করে তাদের আলাদা করার জন্য কমা ব্যবহার করে। এইভাবে এটি একটি ক্রস জয়েন নির্দিষ্ট করে
পুনরায় বাহ্য এ যোগদান করেছে এবং বনাম যেখানে তাদের মধ্যে দেখতে অন ব্যবহার বাঁদিকের শর্তাবলী যোগদান (বাইরের JOIN) বনাম ভেতরের যোগ দিতে ।
টেবিলের মধ্যে কলামগুলি কেন তুলনা করবেন?
যখন কোনও সদৃশ সারি নেই:
প্রতিটি টেবিল সারিগুলিকে ধারণ করে যা একটি নির্দিষ্ট ফিল-ইন-[নাম দেওয়া] খালি বিবৃতি টেম্পলেট থেকে সত্য বিবৃতি দেয়। (এটি থেকে সত্য প্রস্তাব দেওয়া হয়েছে - সন্তুষ্ট - একটি নির্দিষ্ট (বৈশিষ্ট্যযুক্ত) ভবিষ্যদ্বাণী ।)
একটি বেস টেবিলটি সারিগুলিকে ধারণ করে যা কিছু ডিবিএ-প্রদত্ত বিবৃতি টেম্পলেট থেকে সত্য বিবৃতি দেয়:
/* rows where
customer C.CustomerID has age C.Age and ...
*/
FROM Customers C
একটি যোগদানের অন্তর্বর্তী পণ্য হ'ল সারিগুলিকে ধরে রাখে যা এর অপারেশনগুলির টেম্পলেটগুলির এবং এর থেকে সত্য বিবৃতি দেয়:
/* rows where
customer C.CustomerID has age C.Age and ...
AND movie M.Movie is rented by customer M.CustomerID and ...
*/
FROM Customers C CROSS JOIN Movies M
আরও টেমপ্লেট দেওয়ার জন্য শর্তাবলী স্থিতিশীল। মানটি আবার সেই সারিগুলি যা সেই টেম্পলেটটি পূরণ করে:
/* rows where
customer C.CustomerID has age C.Age and ...
AND movie M.Movie is rented by customer M.CustomerID and ...
AND C.CustomerID = M.CustomerID
AND C.Age >= M.[Minimum Age]
AND C.Age = 18
*/
FROM Customers C INNER JOIN Movies M
ON C.CustomerID = M.CustomerID
AND C.Age >= M.[Minimum Age]
WHERE C.Age = 18
বিশেষত, টেবিলের মধ্যে (এসকিউএল) সমতার জন্য কলামগুলির তুলনা করার অর্থ এই যে কলামগুলির জন্য টেম্পেলের অংশযুক্ত অংশযুক্ত অংশ থেকে পণ্য থেকে রাখা সারিগুলির সমান (নন-নুল) মান রয়েছে। এটি কেবল কাকতালীয় যে টেবিলগুলির মধ্যে সমতা তুলনা করে প্রচুর সারি সাধারণত সরানো হয় - আপনার সারিগুলি চিহ্নিত করার জন্য যা প্রয়োজনীয় এবং পর্যাপ্ত তা প্রয়োজনীয়।
আপনার সারিগুলির সারণির জন্য কেবলমাত্র এসকিউএল লিখুন!
ক্যোয়ারির অর্থ (এবং সারণী বনাম শর্তাবলী) দেখুন:
দুটি পৃথক কলামের জন্য অন্য এসকিউএল টেবিলের সাথে ম্যাচের ডেটা কীভাবে পাবেন: অভ্যন্তরীণ যোগদান এবং / অথবা ইউনিয়ন?
কোনও মানব-পঠনযোগ্য বর্ণনা থেকে এসকিউএল কোয়েরি তৈরির জন্য কি থাম্বের কোনও নিয়ম রয়েছে?
ওভারলোডিং "ক্রস জয়েন"
দুর্ভাগ্যক্রমে "ক্রস জয়েন" শব্দটি এর জন্য ব্যবহৃত হয়:
- মধ্যবর্তী পণ্য।
- যোগ দিন।
- (অন্তর্নিহিত) এমন কোনও ও যেখানে বা অন্য কোনও কলামের সাথে একটি টেবিল থেকে যে কোনও কলামের তুলনা করে না with (যেহেতু এটি মধ্যবর্তী পণ্য সারিগুলির মধ্যে অনেকগুলি ফিরিয়ে দেয়))
এই বিভিন্ন অর্থ বিভ্রান্ত হয়। (যেমন অন্যান্য উত্তর এবং মতামত এখানে।)
ক্রস যোগ বনাম (INNER) বনাম কমা ব্যবহার করুন
সাধারণ সম্মেলনটি হ'ল:
- আপনি যখন টেবিলের মধ্যে কলামগুলি তুলনা না করেন কেবল তখনই ক্রস যোগ যোগ করুন। এটি দেখানোর জন্য যে তুলনার অভাব ছিল ইচ্ছাকৃত।
- আপনি যখন টেবিলের মধ্যে কলামগুলি তুলনা করেন কেবল তখন এবং সাথেই (INNER) যোগদান করুন। (প্লাস সম্ভবত অন্যান্য শর্ত।)
- কমা ব্যবহার করবেন না।
সাধারণত টেবিলে জোড়ায় না থাকা শর্তগুলিও একটি গোছের জন্য রাখা হয়। কোনও সঠিক, বাম বা পুরো (আউটর) যোগদানের সাথে যুক্তির জন্য যথাযথ সারি পেতে তাদের একটি (এন ইনার) যোগদান করতে হতে পারে।
পুনরায় "কমা ব্যবহার করবেন না" সুস্পষ্ট জোয়িনের সাথে কমা মিশ্রিত করা বিভ্রান্ত করতে পারে কারণ কমাতে কম অগ্রাধিকার রয়েছে। কিন্তু ক্রস যোগ, (ইনার) জয়েন্ট এবং কমা অর্থের মধ্যে অন্তর্বর্তী পণ্যের ভূমিকা দেওয়া, উপরোক্ত কনভেনশনটি একেবারেই ব্যবহার না করার পক্ষে যুক্তিগুলি নড়বড়ে। একটি ক্রস যোগ বা কমা একটি সত্য শর্তে ঠিক (অন্তর্ভুক্ত) যোগদানের মতো। একটি মধ্যবর্তী পণ্য, চালু এবং যেখানে সমস্ত প্রাসঙ্গিক একটি ভবিষ্যত প্রস্তাব করে। তবে অন্যটি অন্তর্ভুক্ত হবে এমনটি ভাবা যেতে পারে - বলুন, কেবলমাত্র ইনপুট সারিগুলির একটি জুড়ি পাওয়া যায় যা অন শর্তটিকে সন্তুষ্ট করে - তবে তবুও শর্তটি পূরণকারী ক্রস জোড় সারিগুলি ফেরত দেয়। এসকিউএল-এ কমা পরিপূরক করার একমাত্র কারণ ছিল OUTER লিখেযোগদান করে। অবশ্যই, একটি অভিব্যক্তি এর অর্থ পরিষ্কার করা উচিত; তবে যা স্পষ্ট তা নির্ভর করে বিষয়গুলির অর্থ কী নেওয়া হয়েছে তার উপর।
পুনরায় ভেন ডায়াগ্রাম দুটি ছেদকারী বৃত্ত সহ একটি ভেন চিত্রটি একই ইনপুটটির জন্য INNER, Left, RIGHT এবং সম্পূর্ণ যোগদানের জন্য আউটপুট সারিগুলির মধ্যে পার্থক্য চিত্রিত করতে পারে । এবং যখন অন শর্তহীন সত্য, অনন্য যোগদানের ফলাফল ক্রস যোগ হিসাবে সমান। এছাড়াও এটি ইন্টারস্যাক্ট, ইউনিয়ন এবং ছাড়ের ইনপুট এবং আউটপুট সারিগুলিকে চিত্রিত করতে পারে । এবং যখন উভয় ইনপুটগুলির একই কলাম থাকে, তখন ইন্টারস্যাক্ট ফলাফল স্ট্যান্ডার্ড এসকিউএল প্রাকৃতিক যোগদানের মতো হয়, এবং বাম ফলাফল এবং বাম অংশের সাথে জড়িত নির্দিষ্ট আইডিয়ামগুলির মতোই হয় EX তবে এটি কীভাবে (INNER) JOIN সাধারণভাবে কাজ করে তা চিত্রিত করে না । এটি কেবল প্রথম নজরেই প্রশংসনীয় বলে মনে হয় । এটি অংশগুলি জন্য ইনপুট এবং / অথবা আউটপুটবিশেষ ক্ষেত্রে সনাক্ত করতে পারেঅন, পিকে (প্রাথমিক কী), এফকে (বিদেশী কী) এবং / অথবা নির্বাচন করুন। সমস্ত এই দেখতে যা করতে হবে চিহ্নিত হয় ঠিক সেট বৃত্ত দ্বারা উপস্থাপিত উপাদান কি কি । (কোন বলার উপস্থাপনা স্পষ্ট কখনো ভুলবেন না।) (মনে রাখবেন যে সাধারণভাবে যোগদান জন্য আউটপুট সারি ইনপুট সারি থেকে আলাদা শিরোনাম আছে । এবং এসকিউএল টেবিল হয় ব্যাগ না সেট সারি NULLs মানের সঙ্গে ।)
CROSS JOIN
টেবিলগুলির সমস্ত সম্ভাব্য সংমিশ্রণের ফলাফল হবে। উদাহরণস্বরূপ, 100 টি সারি সহ টেবিল 1 এবং 100 সারি সহ টেবিল 2 এর ফলে 10000 রেকর্ড হবে।