الفرق بين الانضمام والانضمام الداخلي
-
05-09-2019 - |
سؤال
ستعطيني كل من هذه النتائج نفس النتائج:
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;