যোগ এবং ইনর জয়েনের মধ্যে পার্থক্য


997

এই উভয় যোগদানই আমাকে একই ফলাফল দেবে:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

বনাম

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

পারফরম্যান্স বা অন্যথায় বিবৃতি মধ্যে কোন পার্থক্য আছে?

এটি কি বিভিন্ন এসকিউএল বাস্তবায়নের মধ্যে পার্থক্য করে ?


2
<: এই প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/448023?sort=newest >
জোএল Coehoorn

6
পার্শ্ব নোট হিসাবে: ক্রস যোগ যোগ জেনা টাইপ জানার জন্য ভাল (এটি অন্তর্ভুক্ত যোগদানের চেয়ে পৃথক)।
সার্জ

উত্তর:


1091

এগুলি কার্যকরীভাবে সমতুল্য, তবে INNER JOINএটি পড়ার জন্য আরও কিছুটা পরিষ্কার হতে পারে, বিশেষত যদি ক্যোয়ারিতে এর সাথে যুক্ত হওয়ার মতো অন্যান্য ধরনের (যেমন LEFTবা RIGHTবা CROSS) থাকে।


11
এটি কি সমস্ত ডেটা ঘাঁটিগুলির জন্য সত্য (যেমন এসকিউএল, পোস্টগ্রিস?) কেউ ডকুমেন্টেশনের একটি লিঙ্ক এটি ব্যাখ্যা করে জানেন?
চোগ

4
এটি এএনএসআই এসকিউএল স্ট্যান্ডার্ড। আরও দেখুন: অবদান.অ্যান্ড্রু.সি.এম.ইডু / ~শাদো / এসকিএল / এসকিএল 1992.txt ; en.wikedia.org/wiki/SQL-92
ভারতীয়

14
ক্যোয়ারীটি কেবল জয়েন লিখে যথেষ্ট পরিস্কার হয়েছে, INNER কেবল গোলমাল করছে।
ইভানজিনহো

22
হতে পারে আমি একজন বিশুদ্ধবাদী, তবে আমি মনে করি এসকিউএল লেখার সময় অন্তর্নিহিতের চেয়ে স্পষ্ট হওয়া ভাল। বিশেষভাবে জটিল প্রশ্নগুলিতে অনন্য যোগদান আরও পাঠযোগ্য।
ব্রুশেস্কয়াস

3
@ ইভানজিনহো: কীবোর্ড বা প্রোগ্রামের জটিলতার কীবোর্ড স্ট্রোক নয়। বাস্তব জীবনের জটিলতা রক্ষণাবেক্ষণ থেকে আসে, যেখানে পাঠযোগ্যতা একটি প্রধান ভূমিকা পালন করে। সত্য যখন এটি অন্তর্ভুক্ত হয়, আপনি কী করতে পারেন তা নিশ্চিত হতে পারেন এবং এটি ঠিক হওয়ার কথা, যেখানে একটি সরল জোইন আপনাকে বা অন্য কাউকে ছেড়ে চলে যাবে, ভাবছেন যে স্ট্যান্ডার্ডটি বাস্তবায়নের বিষয়ে কী বলেছিল এবং সে ছিল ইনার / আউটার / বাম দুর্ঘটনাক্রমে বা উদ্দেশ্য অনুসারে বাদ পড়েছে।
টুউকা হাপানিয়েমি

243

না, কোনও পার্থক্য নেই, খাঁটি সিনট্যাকটিক চিনি


21
আমি এই সিনট্যাকটিক চিনিকে ডাকব না। "ডিফল্ট" যোগদানের ধরণ, "শর্টহ্যান্ড," বা "উপসর্গ" হতে পারে।
এম কে 12

62
কম্পিউটার বিজ্ঞানে, সিনট্যাকটিক চিনি একটি প্রোগ্রামিং ভাষার অভ্যন্তরে বাক্য গঠন যা জিনিসগুলি পড়া বা প্রকাশ করা সহজ করার জন্য তৈরি করা হয় । আমি বিশ্বাস করি যে INNERএই সংজ্ঞাটির আওতায় আসার ক্ষমতা হ্রাস পায়।
কাসনসুই

13
আপনি যদি সংজ্ঞাটি খুব আক্ষরিক অর্থে প্রয়োগ করেন তবে হ্যাঁ, তবে আমি সবসময় এটি দেখতে পেয়েছি কেবল জিনিসগুলির বিকল্প নাম নয়, আরও আকর্ষণীয় ধরণের সিনট্যাক্সের জন্য সংরক্ষিত।
এম কে 12

9
@ কাসনোই কেবল এই প্রশ্নটি জিজ্ঞাসা করা হয়েছে, এটি অনুপস্থিতি দেখায় যে কোয়েরিটি পড়া সহজ INNERকরে না । আমি জানি সকলের জন্য, যদি এখানে উত্তরগুলি দিয়ে এটি পরিষ্কার না করা যায় তবে এটির পক্ষে JOINভাল LEFT JOIN
মার্টেনিস

2
@ কাসনোই আপনার মন্তব্যের উদ্ধৃত সূচনা উইকি বিবৃতি সিনট্যাকটিক চিনির ক্ষেত্রে সত্য, তবে এটি সংজ্ঞা হিসাবে অপ্রতুল। সিনট্যাকটিক সুগার জটিল সিনট্যাক্সের বিশেষ ক্ষেত্রে সহজ সিনট্যাক্স সম্পর্কে। এটি বলা আরও উপযুক্ত যে INNER একটি "শব্দ শব্দ"।
ফিলিপ্সি

143

অন্তর্ভুক্ত যোগদান করুন = যোগ দিন

যদি আপনি উল্লেখ না করেন তবে ইনর জয়েন্ট ডিফল্ট শব্দটি ব্যবহার করার সময় আপনি যদি প্রকারটি ।

আপনি লেফট আউটর জয়েন বা রাইট আউটর জয়েনও ব্যবহার করতে পারেন, এই ক্ষেত্রে OUTER শব্দটি isচ্ছিক, বা আপনি ক্রস যোগ যোগ করতে পারেন।

অথবা

অভ্যন্তরীণ যোগদানের জন্য সিনট্যাক্সটি হ'ল:


টেবিলএ থেকে নির্বাচন করুন ...
[ ] টেবিলবিতে যোগদান করুন

(অন্য কথায়, "ভিতরের" KEYWORD হয় ঐচ্ছিক - ফলাফল সহ বা ছাড়া একই)



54

একইভাবে OUTER JOINs, শব্দটি "OUTER".চ্ছিক। এটি এমন একটি LEFTবা RIGHTকীওয়ার্ড যা JOINএকটি করে "OUTER" JOIN

তবে কিছু কারণে আমি সর্বদা "OUTER"হিসাবে LEFT OUTER JOINএবং কখনও হিসাবে ব্যবহার করি না LEFT JOIN, তবে আমি কখনই ব্যবহার করি না INNER JOIN, বরং আমি কেবল ব্যবহার করি "JOIN":

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID

23
আমি আপনার বিপরীত: আমি সবসময় "অভ্যন্তরীণ যোগদান" বলি তবে আমি কখনই বাইরে ব্যবহার করি না; সুতরাং "বাম যোগ দিন" এবং "সঠিক যোগদান"। অনুমান আমি কেবল আমার চরিত্রকে গণ্য করছি ধ্রুবক!
স্টিফেন হল্ট

10
@ জোনাথন। অভ্যন্তরীণ যোগদানের দিকনির্দেশ সম্পর্কে কোনও ধারণা নেই। বহিরাগত যোগদানের সাথে মেলে না এমন ফলাফলের সেটগুলি উত্পাদন করতে পারে এবং সেগুলি দিকের ভিত্তিতে পরিবর্তিত হতে পারে। অভ্যন্তরীণটির সাথে মিলের প্রয়োজন তাই দিকটি কোনও বিষয় নয়।
কার্ল কিনেঞ্জার

32

অন্যান্য উত্তরগুলি ইতিমধ্যে জানিয়েছে যে আপনার উদাহরণে কোনও পার্থক্য নেই।

ব্যাকরণ সম্পর্কিত বিট এখানে নথিভুক্ত করা হয়

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

দেখানো হচ্ছে যে সমস্ত alচ্ছিক। পৃষ্ঠাটি আরও ব্যাখ্যা করে

INNERসারিগুলির সাথে মিলিত হওয়া সমস্ত জোড়া উল্লেখ করে। উভয় টেবিল থেকে তুলনাহীন সারিগুলি বাতিল করে। যখন কোনও যোগদানের ধরণ নির্দিষ্ট না করা হয়, এটি ডিফল্ট

ব্যাকরণ এছাড়াও ইঙ্গিত দেয় যে এক সময় যেখানে INNER আছে যদিও প্রয়োজন। যোগদানের ইঙ্গিত নির্দিষ্ট করার সময়।

নীচে উদাহরণ দেখুন

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.