الكود
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders O
INNER JOIN Customers C
ON O.CustomerID = C.CustomerID;
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders O
INNER JOIN Customers C
ON O.CustomerID = C.CustomerID;
🚨 تحدي اليوم
لدينا:
Customers
Orders
السؤال:
بعد تنفيذ INNER JOIN...
هل سيظهر Ali؟
ولماذا؟
💬 ممنوع تشغيل SQL.
أجب بالتفكير فقط.
لدينا:
Customers
Ahmed
Sara
Ali
Orders
Ahmed
Sara
السؤال:
بعد تنفيذ INNER JOIN...
هل سيظهر Ali؟
ولماذا؟
💬 ممنوع تشغيل SQL.
أجب بالتفكير فقط.
Lesson 9
First ERP Report
📌 Lesson 9 | أول تقرير احترافي في SQL Server
تخيل أنك انتهيت من تصميم قاعدة البيانات...
لكن مدير الشركة قال لك:
هنا تبدأ وظيفة SQL الحقيقية.
ليست إنشاء الجداول...
بل استخراج المعلومات منها.
اليوم سنبني أول تقرير يشبه ما تراه داخل أنظمة ERP.
💬 سؤال اليوم:
برأيك...
ما المعلومات التي يجب أن تظهر داخل تقرير الطلبات؟
اكتب اقتراحك قبل أن نبدأ.
First ERP Report
📌 Lesson 9 | أول تقرير احترافي في SQL Server
تخيل أنك انتهيت من تصميم قاعدة البيانات...
لكن مدير الشركة قال لك:
"أريد تقريرًا يعرض الطلبات."
هنا تبدأ وظيفة SQL الحقيقية.
ليست إنشاء الجداول...
بل استخراج المعلومات منها.
اليوم سنبني أول تقرير يشبه ما تراه داخل أنظمة ERP.
💬 سؤال اليوم:
برأيك...
ما المعلومات التي يجب أن تظهر داخل تقرير الطلبات؟
اكتب اقتراحك قبل أن نبدأ.
🧠 سيناريو ERP
شركة تبيع أجهزة إلكترونية.
في نهاية اليوم، مدير المبيعات طلب تقريرًا يحتوي على:
رقم الطلب.
اسم العميل.
تاريخ الطلب.
ولا يريد أن يفتح ثلاثة جداول مختلفة.
المطلوب تقرير واحد فقط.
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders AS O
INNER JOIN Customers AS C
ON O.CustomerID = C.CustomerID
ORDER BY O.OrderDate DESC;
🧠 لا نحفظ اسم العميل داخل Orders...
بل نجلبه وقت إنشاء التقرير.
شركة تبيع أجهزة إلكترونية.
في نهاية اليوم، مدير المبيعات طلب تقريرًا يحتوي على:
رقم الطلب.
اسم العميل.
تاريخ الطلب.
ولا يريد أن يفتح ثلاثة جداول مختلفة.
المطلوب تقرير واحد فقط.
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders AS O
INNER JOIN Customers AS C
ON O.CustomerID = C.CustomerID
ORDER BY O.OrderDate DESC;
🧠 لا نحفظ اسم العميل داخل Orders...
بل نجلبه وقت إنشاء التقرير.
🚨 تحدي اليوم
يريد المدير إضافة عمود جديد داخل التقرير:
لدينا الآن:
Customers
Orders
OrderDetails
السؤال:
هل يكفي استخدام INNER JOIN بين جدولين؟
أم سنحتاج إلى ربط جدول ثالث؟
💬 اكتب إجابتك...
ولا تكتب الكود.
فكر كمطور نظام.
يريد المدير إضافة عمود جديد داخل التقرير:
عدد المنتجات داخل كل طلب
لدينا الآن:
Customers
Orders
OrderDetails
السؤال:
هل يكفي استخدام INNER JOIN بين جدولين؟
أم سنحتاج إلى ربط جدول ثالث؟
💬 اكتب إجابتك...
ولا تكتب الكود.
فكر كمطور نظام.
Lesson 10 LEFT JOIN
كيف نعرض جميع العملاء...
حتى الذين لم يطلبوا أي شيء؟
#SQLServer #ERP_Project
تخيل أنك مدير المبيعات...
وطلبت من المبرمج تقريرًا يحتوي على:
✅ جميع العملاء
حتى العملاء الذين لم يشتروا أي شيء حتى الآن.
لكن...
عندما استخدمنا INNER JOIN
اختفى بعض العملاء!
😨
لماذا؟
لأن INNER JOIN يعرض فقط البيانات المتطابقة.
لكن المدير يريد الجميع.
حتى العملاء الذين لم ينفذوا أي طلب.
هنا يأتي دور...
🔥 LEFT JOIN
كيف نعرض جميع العملاء...
حتى الذين لم يطلبوا أي شيء؟
#SQLServer #ERP_Project
تخيل أنك مدير المبيعات...
وطلبت من المبرمج تقريرًا يحتوي على:
✅ جميع العملاء
حتى العملاء الذين لم يشتروا أي شيء حتى الآن.
لكن...
عندما استخدمنا INNER JOIN
اختفى بعض العملاء!
😨
لماذا؟
لأن INNER JOIN يعرض فقط البيانات المتطابقة.
لكن المدير يريد الجميع.
حتى العملاء الذين لم ينفذوا أي طلب.
هنا يأتي دور...
🔥 LEFT JOIN
💬 سؤال اليوم
برأيك...
هل يجب أن يظهر العميل الذي لم يشترِ شيئًا؟
ولماذا؟
اكتب رأيك قبل مشاهدة الفيديو.
برأيك...
هل يجب أن يظهر العميل الذي لم يشترِ شيئًا؟
ولماذا؟
اكتب رأيك قبل مشاهدة الفيديو.
🧠 سيناريو ERP
مدير التسويق قال:
أريد قائمة بكل العملاء.
ثم أريد معرفة:
من قام بالشراء؟
ومن لم يشترِ حتى الآن؟
لأنني سأرسل عروضًا للعملاء غير النشطين.
لو استخدمنا INNER JOIN...
لن يظهر العملاء غير النشطين.
أما باستخدام LEFT JOIN...
فسيظهر الجميع.
مدير التسويق قال:
أريد قائمة بكل العملاء.
ثم أريد معرفة:
من قام بالشراء؟
ومن لم يشترِ حتى الآن؟
لأنني سأرسل عروضًا للعملاء غير النشطين.
لو استخدمنا INNER JOIN...
لن يظهر العملاء غير النشطين.
أما باستخدام LEFT JOIN...
فسيظهر الجميع.
SELECT
C.CustomerID,
C.CustomerName,
O.OrderID,
O.OrderDate
FROM Customers AS C
LEFT JOIN Orders AS O
ON C.CustomerID = O.CustomerID;
C.CustomerID,
C.CustomerName,
O.OrderID,
O.OrderDate
FROM Customers AS C
LEFT JOIN Orders AS O
ON C.CustomerID = O.CustomerID;
📖 شرح الكود
دعونا نقرأ الاستعلام وكأننا نتحدث مع SQL Server:
SELECT
أي: —-اعرض لي الأعمدة التالية.
C.CustomerID
اعرض رقم العميل.
C.CustomerName
اعرض اسم العميل.
O.OrderID
إذا كان لديه طلب...
اعرض رقم الطلب.
اعرض تاريخ الطلب.
ابدأ من جدول Customers.
وهذا مهم جدًا.
لأن LEFT JOIN يعتمد على الجدول الموجود على اليسار.
الآن اربط جدول Orders.
لكن...
إذا لم تجد طلبًا...
لا تحذف العميل.
اربط الجدولين باستخدام CustomerID.
دعونا نقرأ الاستعلام وكأننا نتحدث مع SQL Server:
SELECT
أي: —-اعرض لي الأعمدة التالية.
C.CustomerID
اعرض رقم العميل.
C.CustomerName
اعرض اسم العميل.
O.OrderID
إذا كان لديه طلب...
اعرض رقم الطلب.
O.OrderDate
اعرض تاريخ الطلب.
FROM Customers
ابدأ من جدول Customers.
وهذا مهم جدًا.
لأن LEFT JOIN يعتمد على الجدول الموجود على اليسار.
LEFT JOIN Orders
الآن اربط جدول Orders.
لكن...
إذا لم تجد طلبًا...
لا تحذف العميل.
ON
اربط الجدولين باستخدام CustomerID.
🔥 تحدي اليوم لدينا أربعة عملاء:
Ahmed
Sara
Ali
Rana
ولدينا طلبات فقط لـ:
Ahmed
Sara
السؤال:
بعد تنفيذ LEFT JOIN...
كم صفًا سيظهر؟
❌ ممنوع تشغيل SQL.
💬 اكتب الرقم فقط.
Ahmed
Sara
Ali
Rana
ولدينا طلبات فقط لـ:
Ahmed
Sara
السؤال:
بعد تنفيذ LEFT JOIN...
كم صفًا سيظهر؟
❌ ممنوع تشغيل SQL.
💬 اكتب الرقم فقط.
🚀 رجعنا... ونكمل بناء نظامنا خطوة بخطوة!
سؤال جديد سيختبر فهمك الحقيقي للـ 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.