اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

في حال كان الدمج JOIN عاديا فلا يوجد فرق في ترتيب الجداول قبل وبعد JOIN

a JOIN b

# تساوي

b JOIN a

أما إذا كنت تستعمل النوع LEFT أو RIGHT أو FULL من JOIN فالترتيب مهم لأن معنى العبارة يختلف فالجدول قبل JOIN يسمى يساري وبعدها يسمى يميني

a LEFT JOIN b

# لا تساوي 

b LEFT JOIN a



a RIGHT JOIN b

# لا تساوي 

b RIGHT JOIN a



a FULL JOIN b

# لا تساوي 

b FULL JOIN a

 

  • 0
نشر (معدل)

اذا كنت تقصد تغيير في شكل النتيجة، فلا، join العادية لا تؤثر في شكل الخرج حيث أن :

Table1 JOIN  Table 2 = Table2 JOIN Table1

ونفس الوضع بالنسبة ل INNER JOIN و NATURAL JOIN .

 لكن على صعيد الأداء، فبالتاكيد هناك فرق، حيث أن JOIN تقوم بدمج عناصر الجدول الأول مع الجدول الثاني، وذلك فان عدد عناصر كل جدول يفرق في الاداء وبالتالي ترتيبيهم حيث يبدا بايجاد العمود الأول والبحث عن تطابق بين كل عنصر فيه وكل الجدول الثاني.

أما بالنسبة ل LEFT JOIN , RIGHT JOIN ,  فالترتيب يفرق حتى في شكل الخرج وذلك لانه يهتم بترتيب الجداول، وقد يجد تطابق اذا كان Table1 اولا لكنه لا يجد اذا كان Table1 ثانيا وهكذا.

تم التعديل في بواسطة Ahmed Sharshar
  • 1
نشر

تبديل تررتيب الجداول يؤثر على نتيجة استعلام LEFT - RIGHT _ FULL حيث أن فيهم الربط يعتمد على عرض جميع بيانات أحد الجدولين (حسب جهة العرض) ثم البحث عن عنصر مقابل في الجدول الآخر، لذلك البيانات تختلف.

أما في الربط الداخلي INNER JOIN نحصل على نفس النتيجة لكن ترتريب الأعمدة يختلف باختلاف ترتيب الدمج

Table   col1 col2
A       a1   a2
B       b1   b2

select * from A, B => a1, a2, b1, b2

select * from B, A => b1, b2, a1, a2

ولتثبيت ترتريب الأعمدة علينا تحديدهم في عبارة SELECT

select a1, b1, b2, a2 from B, A => a1, b1, b2, a2

بالنسبة للدمج اليساري: سوف نثبت جدول الزبائن، ولكل زبون نبحث عن الطلبية التي تعود له

LEFT JOIN Example

SELECT cust_id, cust_name, order_num, order_date  
FROM customer LEFT JOIN orders   
ON customer.cust_id = orders.order_id  
WHERE order_date < '2020-04-30'; 

left-join.PNG.d6e2206e3645b9c09bf1ac738366b3f5.PNG

بالنسبة للدمج اليميني: سوف نثبت جدول الطلبيات، ولكل طلبية نبحث عن الزبون صاحبها الذي يعود إليها

RIGHT JOIN Example

SELECT cust_id, cust_name, occupation, order_num, order_date    
FROM customer  
RIGHT JOIN orders ON cust_id = order_id    
ORDER BY order_date;  

 

right-join.PNG

عندما لانجد بيانات من الجدول الثانوي سيعيد NULL

left-join.PNG

right-join.PNG

وفي حال عمل FULL JOIN سنلحظ ربما وجود قيم فارغة في كلا الحقلين لأنه ليس شرطا تقابل القيم من كلا الجدولين

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...