🚀 رجعنا... ونكمل بناء نظامنا خطوة بخطوة!
سؤال جديد سيختبر فهمك الحقيقي للـ JOIN 👀
في الدرس السابق تعلمنا:
✅ INNER JOIN
✅ LEFT JOIN
لكن ماذا لو كان الجدول الذي نريد الاحتفاظ بكل سجلاته موجودًا على اليمين؟ 🤔
هل نعيد كتابة كل شيء؟
أم يوجد نوع آخر من JOIN؟
🔥 الدرس الجديد اليوم:
Lesson 11 — RIGHT JOIN
قبل أن ننزل الشرح...
💬 من يتوقع الفرق بين LEFT JOIN و RIGHT JOIN؟
اكتب توقعك حتى لو لم تكن متأكدًا 👇
#SQLServer #ERP_Project #LearnSQL
سؤال جديد سيختبر فهمك الحقيقي للـ JOIN 👀
في الدرس السابق تعلمنا:
✅ INNER JOIN
✅ LEFT JOIN
لكن ماذا لو كان الجدول الذي نريد الاحتفاظ بكل سجلاته موجودًا على اليمين؟ 🤔
هل نعيد كتابة كل شيء؟
أم يوجد نوع آخر من JOIN؟
🔥 الدرس الجديد اليوم:
Lesson 11 — RIGHT JOIN
قبل أن ننزل الشرح...
💬 من يتوقع الفرق بين LEFT JOIN و RIGHT JOIN؟
اكتب توقعك حتى لو لم تكن متأكدًا 👇
#SQLServer #ERP_Project #LearnSQL
🚨 سؤال لدينا جدولان:
👥 Customers
📦 Orders
ونريد تقريرًا يعرض:
✅ جميع الطلبات الموجودة في Orders
حتى لو لم نجد بيانات عميل مطابقة لبعض الطلبات.
في الدرس السابق استخدمنا LEFT JOIN...
لكن اليوم اتجاه التفكير تغيّر 👀
🔥 السؤال:
إذا أردنا الاحتفاظ بكل سجلات الجدول الموجود على اليمين...
ما الذي سيحدث؟
💬 اكتب توقعك قبل مشاهدة الشرح.
ممنوع البحث 😄
👥 Customers
📦 Orders
ونريد تقريرًا يعرض:
✅ جميع الطلبات الموجودة في Orders
حتى لو لم نجد بيانات عميل مطابقة لبعض الطلبات.
في الدرس السابق استخدمنا LEFT JOIN...
لكن اليوم اتجاه التفكير تغيّر 👀
🔥 السؤال:
إذا أردنا الاحتفاظ بكل سجلات الجدول الموجود على اليمين...
ما الذي سيحدث؟
💬 اكتب توقعك قبل مشاهدة الشرح.
ممنوع البحث 😄
❤1
الفكرة الأساسية بسيطة جدًا:
تخيل لدينا:
ولدينا:
الطلب
إذا استخدمنا
لكن إذا كان هدف التقرير:
وكان
RIGHT JOIN يعرض كل الصفوف من الجدول الموجود على يمين كلمة JOIN، ثم يبحث عن البيانات المطابقة في الجدول الأيسر.تخيل لدينا:
Customers
-------------------
CustomerID | Name
1 | Ahmed
2 | Sara
ولدينا:
Orders
-------------------
OrderID | CustomerID
101 | 1
102 | 2
103 | NULL
الطلب
101 مرتبط بـ Ahmed، والطلب 102 مرتبط بـ Sara، لكن الطلب 103 لا توجد له بيانات عميل مطابقة.إذا استخدمنا
INNER JOIN فلن يظهر الطلب 103، لأن INNER JOIN يريد تطابقًا بين الطرفين.لكن إذا كان هدف التقرير:
“أعطني جميع الطلبات مهما حدث”
وكان
Orders هو الجدول الأيمن، يمكن استخدام RIGHT JOIN.💻 الكود الكامل لكي تطبق وتشهاد النتائج
SELECT
C.CustomerID,
C.CustomerName,
O.OrderID,
O.CustomerID AS OrderCustomerID,
O.OrderDate
FROM Customers AS C
RIGHT JOIN Orders AS O
ON C.CustomerID = O.CustomerID
ORDER BY O.OrderID;
🧠 سيناريو ERP حقيقي
تخيل أن مدير العمليات قال:
هنا التقرير ليس هدفه فقط عرض البيانات الجميلة.
بل هدفه أيضًا اكتشاف المشاكل.
مثل:
وجود
ملاحظة احترافية للطلاب: في تصميم سليم مع
تخيل أن مدير العمليات قال:
“أريد مراجعة جميع الطلبات الموجودة في النظام، وأريد اكتشاف أي طلب لا توجد له بيانات عميل مطابقة.”
هنا التقرير ليس هدفه فقط عرض البيانات الجميلة.
بل هدفه أيضًا اكتشاف المشاكل.
مثل:
Order 101 → Ahmed
Order 102 → Sara
Order 103 → NULL
وجود
NULL هنا قد يكون إشارة إلى بيانات قديمة، استيراد بيانات غير مكتمل، نظام قديم، أو حالة تحتاج مراجعة.ملاحظة احترافية للطلاب: في تصميم سليم مع
FOREIGN KEY إلزامي وCustomerID NOT NULL، لا يفترض أصلًا وجود Order يشير إلى عميل غير موجود. وهذه فرصة ممتازة لربط Lesson 11 بما تعلمناه في Lesson 7 عن Data Integrity.SELECT
C.CustomerName,
O.OrderID
FROM Customers C
RIGHT JOIN Orders O
ON C.CustomerID = O.CustomerID;
🚨 سؤال للمستوى المتوسط
انظر إلى الاستعلام جيدًا...
هل أستطيع الحصول على نفس النتيجة تمامًا باستخدام LEFT JOIN؟ 🤔
إذا كانت إجابتك نعم:
💬 اكتب الاستعلام البديل.
إذا كانت إجابتك لا:
💬 اشرح السبب.
هذا السؤال يفرق بين من يحفظ JOIN...
ومن يفهمه فعلًا 🔥
C.CustomerName,
O.OrderID
FROM Customers C
RIGHT JOIN Orders O
ON C.CustomerID = O.CustomerID;
🚨 سؤال للمستوى المتوسط
انظر إلى الاستعلام جيدًا...
هل أستطيع الحصول على نفس النتيجة تمامًا باستخدام LEFT JOIN؟ 🤔
إذا كانت إجابتك نعم:
💬 اكتب الاستعلام البديل.
إذا كانت إجابتك لا:
💬 اشرح السبب.
هذا السؤال يفرق بين من يحفظ JOIN...
ومن يفهمه فعلًا 🔥
🎓 Lesson 12 — FULL OUTER JOIN
🔥 ماذا لو أردنا كل شيء من الجدولين؟
في الدرس السابق تعلمنا:
⬅️ LEFT JOIN
➡️ RIGHT JOIN
لكن مدير النظام طلب تقريرًا مختلفًا:
✅ أظهر جميع العملاء
حتى من ليس لديه طلبات
✅ وأظهر جميع الطلبات
حتى لو لم نجد لها عميلًا مطابقًا
🤔 كيف نجمع الطرفين؟
هنا يأتي:
🔥 FULL OUTER JOIN
💬 قبل مشاهدة الشرح:
برأيك، ماذا سيحدث للسجلات غير المتطابقة؟
#SQLServer #ERP_Project #Lesson12
🔥 ماذا لو أردنا كل شيء من الجدولين؟
في الدرس السابق تعلمنا:
⬅️ LEFT JOIN
➡️ RIGHT JOIN
لكن مدير النظام طلب تقريرًا مختلفًا:
✅ أظهر جميع العملاء
حتى من ليس لديه طلبات
✅ وأظهر جميع الطلبات
حتى لو لم نجد لها عميلًا مطابقًا
🤔 كيف نجمع الطرفين؟
هنا يأتي:
🔥 FULL OUTER JOIN
💬 قبل مشاهدة الشرح:
برأيك، ماذا سيحدث للسجلات غير المتطابقة؟
#SQLServer #ERP_Project #Lesson12
🧠 2) الشرح المختصر
الفكرة سهلة:
السجلات المتطابقة بين الجدولين.
السجلات غير المتطابقة من اليسار.
السجلات غير المتطابقة من اليمين.
مثال:
النتيجة:
لماذا؟
لأن
والطلب
الفكرة سهلة:
FULL OUTER JOIN يعرض:السجلات المتطابقة بين الجدولين.
السجلات غير المتطابقة من اليسار.
السجلات غير المتطابقة من اليمين.
مثال:
Customers Orders
--------- --------
Ahmed 101 → Ahmed
Sara 102 → Sara
Ali 103 → Customer 4
النتيجة:
Ahmed → 101
Sara → 102
Ali → NULL
NULL → 103
لماذا؟
لأن
Ali ليس لديه طلب، ومع ذلك يظهر.والطلب
103 ليس له عميل مطابق في المثال، ومع ذلك يظهر.💡 FULL OUTER JOIN = لا تفقد البيانات غير المتطابقة من أي طرف.
💻الكود الجاهز
SELECT
C.CustomerID,
C.CustomerName,
O.OrderID,
O.CustomerID AS OrderCustomerID,
O.OrderDate
FROM Customers AS C
FULL OUTER JOIN Orders AS O
ON C.CustomerID = O.CustomerID;
شرح سريع جدًا
بدأنا بجدول العملاء.
طلبنا جميع البيانات من الطرفين.
حددنا شرط المطابقة.
إذا لم يوجد تطابق:
تظهر في الطرف المفقود.
SELECT
C.CustomerID,
C.CustomerName,
O.OrderID,
O.CustomerID AS OrderCustomerID,
O.OrderDate
FROM Customers AS C
FULL OUTER JOIN Orders AS O
ON C.CustomerID = O.CustomerID;
شرح سريع جدًا
FROM Customersبدأنا بجدول العملاء.
FULL OUTER JOIN Ordersطلبنا جميع البيانات من الطرفين.
ON C.CustomerID = O.CustomerIDحددنا شرط المطابقة.
إذا لم يوجد تطابق:
NULL
تظهر في الطرف المفقود.
❤1
🤔 سؤال سريع | Lesson 12
ما الفرق الأساسي بين:
INNER JOIN
و
FULL OUTER JOIN؟
A️⃣ INNER JOIN يعرض السجلات المتطابقة فقط، بينما FULL OUTER JOIN يعرض المتطابقة وغير المتطابقة من الطرفين.
B️⃣ كلاهما يعرض السجلات المتطابقة فقط.
C️⃣ INNER JOIN يعرض كل السجلات من الطرفين، بينما FULL OUTER JOIN يعرض المتطابق فقط.
💬 اكتب فقط: A أو B أو C
🔥 وإذا كنت واثقًا من إجابتك...
اكتب السبب بجملة قصيرة 👇
ما الفرق الأساسي بين:
INNER JOIN
و
FULL OUTER JOIN؟
A️⃣ INNER JOIN يعرض السجلات المتطابقة فقط، بينما FULL OUTER JOIN يعرض المتطابقة وغير المتطابقة من الطرفين.
B️⃣ كلاهما يعرض السجلات المتطابقة فقط.
C️⃣ INNER JOIN يعرض كل السجلات من الطرفين، بينما FULL OUTER JOIN يعرض المتطابق فقط.
💬 اكتب فقط: A أو B أو C
🔥 وإذا كنت واثقًا من إجابتك...
اكتب السبب بجملة قصيرة 👇
🏆 تحدي Lesson 12
لدينا:
Customers:
1 → Ahmed
2 → Sara
3 → Ali
Orders:
101 → Customer 1
102 → Customer 2
103 → Customer 4
نفذنا:
FULL OUTER JOIN
❓ كم صفًا سيظهر؟
A- ثلاثه 3 صفوف
B️ - أربعة 4 صفوف
C️ -خمسه 5 صفوف
🚫 ممنوع تشغيل SQL
فكر كمطور نظام 👨💻
💬 اكتب الإجابة + السبب
لدينا:
Customers:
1 → Ahmed
2 → Sara
3 → Ali
Orders:
101 → Customer 1
102 → Customer 2
103 → Customer 4
نفذنا:
FULL OUTER JOIN
❓ كم صفًا سيظهر؟
A- ثلاثه 3 صفوف
B️ - أربعة 4 صفوف
C️ -خمسه 5 صفوف
🚫 ممنوع تشغيل SQL
فكر كمطور نظام 👨💻
💬 اكتب الإجابة + السبب
🔥 Lesson 13 | الآن تبدأ التقارير الحقيقية!
تخيل أن جدول Orders يحتوي على 10,000 طلب...
ومدير المبيعات سألك:
❓ كم طلبًا قام به كل عميل؟
هل ستعدّ الطلبات يدويًا؟ 😅
هنا نحتاج إلى:
🚀 GROUP BY
فهي تحول آلاف الصفوف إلى مجموعات مفيدة للتقارير.
مثلاً:
Customer 1 → 5 Orders
Customer 2 → 12 Orders
Customer 3 → 3 Orders
💬 قبل مشاهدة الشرح:
برأيك، هل GROUP BY تحذف الصفوف؟
أم تجمعها منطقيًا داخل مجموعات؟ 🤔
اكتب توقعك 👇
#SQLServer #GROUPBY #ERP_Project
تخيل أن جدول Orders يحتوي على 10,000 طلب...
ومدير المبيعات سألك:
❓ كم طلبًا قام به كل عميل؟
هل ستعدّ الطلبات يدويًا؟ 😅
هنا نحتاج إلى:
🚀 GROUP BY
فهي تحول آلاف الصفوف إلى مجموعات مفيدة للتقارير.
مثلاً:
Customer 1 → 5 Orders
Customer 2 → 12 Orders
Customer 3 → 3 Orders
💬 قبل مشاهدة الشرح:
برأيك، هل GROUP BY تحذف الصفوف؟
أم تجمعها منطقيًا داخل مجموعات؟ 🤔
اكتب توقعك 👇
#SQLServer #GROUPBY #ERP_Project
الشرح المختصر للدرس
لدينا جدول
لو سأل المدير:
نحن لا نريد عرض 6 صفوف.
نريد تقريرًا:
هنا تعمل
هي تجمع الصفوف التي لها نفس
الفكرة الذهبية:
لدينا جدول
Orders:OrderID | CustomerID
--------------------
101 | 1
102 | 1
103 | 2
104 | 2
105 | 2
106 | 3
لو سأل المدير:
كم طلبًا نفذ كل عميل؟
نحن لا نريد عرض 6 صفوف.
نريد تقريرًا:
CustomerID | OrderCount
-----------------------
1 | 2
2 | 3
3 | 1
هنا تعمل
GROUP BY.هي تجمع الصفوف التي لها نفس
CustomerID في مجموعة واحدة، ثم نستخدم COUNT() لحساب عدد الصفوف داخل كل مجموعة.الفكرة الذهبية:
GROUP BYتحدد المجموعات، و
COUNT()تقوم بالحساب.
الكود الجاهز
شرح سريع
نريد تقريرًا لكل عميل.
نحسب عدد الصفوف، أي عدد الطلبات.
نجمع طلبات كل عميل معًا.
نعرض الأكثر طلبًا أولًا.
SELECT
CustomerID,
COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerID
ORDER BY OrderCount DESC;
شرح سريع
CustomerIDنريد تقريرًا لكل عميل.
COUNT(*)نحسب عدد الصفوف، أي عدد الطلبات.
GROUP BY CustomerIDنجمع طلبات كل عميل معًا.
ORDER BY OrderCount DESCنعرض الأكثر طلبًا أولًا.
🤔 سؤال سريع | GROUP BY
لدينا الطلبات التالية:
Customer 1 → Order 101
Customer 1 → Order 102
Customer 2 → Order 103
Customer 2 → Order 104
Customer 2 → Order 105
بعد تنفيذ:
GROUP BY CustomerID
مع:
COUNT(*)
ما النتيجة؟
A️⃣ Customer 1 = 2 | Customer 2 = 3
B️⃣ Customer 1 = 1 | Customer 2 = 1
C️⃣ سيظهر 5 عملاء
💬 اكتب فقط A أو B أو C
ثم اشرح السبب بجملة قصيرة 👇
لدينا الطلبات التالية:
Customer 1 → Order 101
Customer 1 → Order 102
Customer 2 → Order 103
Customer 2 → Order 104
Customer 2 → Order 105
بعد تنفيذ:
GROUP BY CustomerID
مع:
COUNT(*)
ما النتيجة؟
A️⃣ Customer 1 = 2 | Customer 2 = 3
B️⃣ Customer 1 = 1 | Customer 2 = 1
C️⃣ سيظهر 5 عملاء
💬 اكتب فقط A أو B أو C
ثم اشرح السبب بجملة قصيرة 👇
تحدي اليوم — أقوى قليلًا
🏆 تحدي Lesson 13
لدينا جدول Orders:
101 → Customer 1
102 → Customer 1
103 → Customer 2
104 → Customer 3
105 → Customer 3
106 → Customer 3
107 → Customer 3
ونفذنا:
SELECT
CustomerID,
COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerID;
❓ ما النتيجة؟
اكتبها بهذا الشكل:
Customer 1 = ?
Customer 2 = ?
Customer 3 = ?
🚫 ممنوع تشغيل SQL
فكر أولًا كمطور تقارير 👨💻
💬 اكتب النتيجة في التعليقات.
🏆 تحدي Lesson 13
لدينا جدول Orders:
101 → Customer 1
102 → Customer 1
103 → Customer 2
104 → Customer 3
105 → Customer 3
106 → Customer 3
107 → Customer 3
ونفذنا:
SELECT
CustomerID,
COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerID;
❓ ما النتيجة؟
اكتبها بهذا الشكل:
Customer 1 = ?
Customer 2 = ?
Customer 3 = ?
🚫 ممنوع تشغيل SQL
فكر أولًا كمطور تقارير 👨💻
💬 اكتب النتيجة في التعليقات.