تعلم قواعد بيانات SQL Database
1.79K subscribers
84 photos
3 videos
26 files
38 links
📘 تعلم قواعد بيانات SQL بأسلوب مبسط
🛠 شرح عملي + أمثلة وتمارين
🎯 للمبتدئين وطلاب IT
📅 دروس منتظمة
تعلم اليوم وطبّق غداً
Download Telegram
# 🟢 Day 6 — (حل المشكلة الحقيقية: OrderDetails)
📌 Lesson 5: حل مشكلة المنتجات داخل الطلب (OrderDetails)
#Day6 #ERP_Project

---

🎯 المشكلة:

الطلب يحتوي على عدة منتجات ❗️

---

لا يمكن تخزينها داخل Orders

---

💡 الحل الاحترافي:

إنشاء جدول جديد:
OrderDetails

---

🔥 الكود:
CREATE TABLE OrderDetails (
    ID INT PRIMARY KEY IDENTITY,
    OrderID INT,
    ProductID INT,
    Quantity INT,
    FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
---

📊 ماذا حللنا؟

✔️ فصلنا الطلب عن التفاصيل 
✔️ أصبح كل طلب يحتوي على عدة منتجات 
✔️ حللنا مشكلة Many-to-Many

---

🎯 أصبح النظام كالتالي:

Orders → معلومات عامة 
OrderDetails → تفاصيل المنتجات 

---

🔥 Challenge:

ما نوع العلاقة بين:

Orders و OrderDetails ؟

💬 اكتب الإجابة
:::
🔥 تحدي :
اكتب استعلام يعرض:
اسم العميل + تاريخ الطلب
💬 اكتب الحل في التعليقات
1
سؤال احترافي
💣 إذا استخدمت JOIN غلط…
ممكن تطلع بيانات مضروبة
كيف تتأكد أن النتائج صحيحة؟
#ERP_Project
🎯 Lesson 7 — Foreign Keys
ليست مجرد سطر SQL... إنها حارس بيانات النظام
📌 Lesson 7 — هل يمكن إنشاء طلب لعميل غير موجود؟ 🤔
تخيل أنك تعمل على نظام مبيعات...
وأحد المبرمجين نفذ هذا الأمر:
INSERT INTO Orders(CustomerID)
VALUES(999);

لكن...
❗️العميل رقم 999 غير موجود أصلاً!
هل يجب أن يسمح النظام بهذا؟
لو سمح بذلك...
سيصبح لدينا طلب بدون صاحب!
وهنا تبدأ مشاكل التقارير والفواتير والأنظمة المالية.
💡 لهذا السبب نستخدم Foreign Key.
هو لا يربط الجداول فقط...
بل يحمي البيانات من الأخطاء.
🎯 بدون Foreign Key:
Orders قد تشير إلى Customer غير موجود.
أما مع Foreign Key:
النظام يمنع الخطأ قبل تخزين البيانات.
4
Lesson 8
INNER JOIN
كيف يجمع SQL البيانات من أكثر من جدول؟
تخيل أن مدير الشركة طلب منك تقريرًا يحتوي على:
رقم الطلب
اسم العميل
تاريخ الطلب
لكن...
اسم العميل موجود في جدول Customers.
ورقم الطلب موجود في Orders.
كيف نجمعهما؟
هنا يأتي دور INNER JOIN.
🎯 Challenge
قبل رؤية الكود...
توقع النتيجة.
هل سيظهر كل العملاء؟
أم فقط العملاء الذين لديهم طلبات؟
اكتب توقعك.
الكود
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders O
INNER JOIN Customers C
ON O.CustomerID = C.CustomerID;
💡 الآن شغّل الكود بنفسك.
هل كانت النتيجة كما توقعت؟
🚨 تحدي اليوم
لدينا:
Customers
Ahmed
Sara
Ali

Orders
Ahmed
Sara

السؤال:
بعد تنفيذ INNER JOIN...
هل سيظهر Ali؟
ولماذا؟
💬 ممنوع تشغيل SQL.
أجب بالتفكير فقط.
ملخص الدرس الثامن
Lesson 9
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...
بل نجلبه وقت إنشاء التقرير.
🚨 تحدي اليوم
يريد المدير إضافة عمود جديد داخل التقرير:
عدد المنتجات داخل كل طلب

لدينا الآن:
Customers
Orders
OrderDetails
السؤال:
هل يكفي استخدام INNER JOIN بين جدولين؟
أم سنحتاج إلى ربط جدول ثالث؟
💬 اكتب إجابتك...
ولا تكتب الكود.
فكر كمطور نظام.
Lesson 10 LEFT JOIN
كيف نعرض جميع العملاء...
حتى الذين لم يطلبوا أي شيء؟

#SQLServer #ERP_Project
تخيل أنك مدير المبيعات...
وطلبت من المبرمج تقريرًا يحتوي على:
جميع العملاء
حتى العملاء الذين لم يشتروا أي شيء حتى الآن.
لكن...
عندما استخدمنا INNER JOIN
اختفى بعض العملاء!
😨
لماذا؟
لأن INNER JOIN يعرض فقط البيانات المتطابقة.
لكن المدير يريد الجميع.
حتى العملاء الذين لم ينفذوا أي طلب.
هنا يأتي دور...
🔥 LEFT JOIN
💬 سؤال اليوم
برأيك...
هل يجب أن يظهر العميل الذي لم يشترِ شيئًا؟
ولماذا؟
اكتب رأيك قبل مشاهدة الفيديو.
🧠 سيناريو ERP
مدير التسويق قال:
أريد قائمة بكل العملاء.
ثم أريد معرفة:
من قام بالشراء؟
ومن لم يشترِ حتى الآن؟
لأنني سأرسل عروضًا للعملاء غير النشطين.
لو استخدمنا 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;
📖 شرح الكود
دعونا نقرأ الاستعلام وكأننا نتحدث مع SQL Server:
SELECT
أي: —-اعرض لي الأعمدة التالية.
C.CustomerID
اعرض رقم العميل.

C.CustomerName
اعرض اسم العميل.
O.OrderID
إذا كان لديه طلب...
اعرض رقم الطلب.
O.OrderDate

اعرض تاريخ الطلب.
FROM Customers

ابدأ من جدول Customers.
وهذا مهم جدًا.
لأن LEFT JOIN يعتمد على الجدول الموجود على اليسار.
LEFT JOIN Orders

الآن اربط جدول Orders.
لكن...
إذا لم تجد طلبًا...
لا تحذف العميل.
ON

اربط الجدولين باستخدام CustomerID.
🎯 النتيجة ستكون: كما في الشكل
وهذا يعني:
Ali موجود داخل النظام.
لكن ليس لديه طلبات.
🔥 تحدي اليوم لدينا أربعة عملاء:
Ahmed
Sara
Ali
Rana

ولدينا طلبات فقط لـ:
Ahmed
Sara

السؤال:
بعد تنفيذ LEFT JOIN...
كم صفًا سيظهر؟
ممنوع تشغيل SQL.
💬 اكتب الرقم فقط.