سؤال

ستعطيني كل من هذه النتائج نفس النتائج:

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

ضد

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

هل هناك أي فرق بين البيانات في الأداء أو غير ذلك؟

هل تختلف بين تطبيقات SQL المختلفة؟

هل كانت مفيدة؟

المحلول

إنهم يعادلون وظيفيا، ولكن INNER JOIN يمكن أن يكون أكثر وضوحا قليلا للقراءة، خاصة إذا كان الاستعلام لديه أنواع الانضمام الأخرى (أي LEFT أو RIGHT أو CROSS) المدرجة في ذلك.

نصائح أخرى

لا، لا يوجد فرق، نقي التجميل اللغوى.

inner الانضمام = انضم

الانضمام الداخلي هو الافتراضي إذا كنت لا تحدد النوع عند استخدام Word Join.

يمكنك أيضا استخدام الانضمام الخارجي الأيسر أو الانضمام الخارجي الأيمن، وفي هذه الحالة كلمة الخارجية اختيارية، أو يمكنك تحديد الانضمام عبر.

أو

للحصول على انضمام Inner، بناء الجملة هو:

تحديد ...
من tablea
inner] انضم إلى الجدول

(بمعنى آخر، كلمة رئيسية "الداخلية" هي اختياري - النتائج هي نفسها مع أو بدونها)

وبالمثل مع 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

هل تختلف بين تطبيقات SQL المختلفة؟

نعم، مدخل البرمجيات المرنة لا تسمح فقط join. وبعد يتطلب inner join.

مع وجود إجابات أخرى بالفعل لا يوجد فرق في مثالك.

القليل ذي الصلة من القواعد هو موثقة هنا

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

إظهار أن جميعهم اختيارية. توضح الصفحة كذلك ذلك

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;

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top