تهدف هذه الوحدة إلى تمكين الطلاب من التعامل مع البيانات داخل قواعد البيانات من خلال أوامر DML: SELECT، INSERT، UPDATE، DELETE، واستخدام الدوال المدمجة وضم الجداول.
تهدف هذه الوحدة إلى تمكين الطلاب من التعامل مع البيانات داخل قواعد البيانات من خلال أوامر DML (Data Manipulation Language): SELECT، INSERT، UPDATE، DELETE، واستخدام الدوال المدمجة وضم الجداول.
SELECT
تعليمة SELECT هي العمود الفقري لأي نظام قواعد بيانات، وهي الأكثر استخدامًا لاسترجاع المعلومات.
تُستخدم تعليمة SELECT لاستخراج البيانات من جداول قاعدة البيانات. يمكنك تحديد الأعمدة التي تريدها، الجداول التي ستسترجع منها البيانات، والشروط التي يجب أن تستوفيها السجلات.
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1 ASC|DESC;
column1, column2, ...: الأعمدة التي تريد استرجاعها. يمكنك استخدام * لاسترجاع جميع الأعمدة.table_name: اسم الجدول الذي تريد استرجاع البيانات منه.WHERE condition: (اختياري) يُستخدم لتصفية السجلات بناءً على شرط محدد.ORDER BY column1 ASC|DESC: (اختياري) يُستخدم لفرز النتائج بترتيب تصاعدي (ASC) أو تنازلي (DESC) بناءً على عمود واحد أو أكثر.لاستخراج أسماء الموظفين ورواتبهم من جدول Employees حيث الراتب أكبر من 5000، وترتيبهم أبجديًا حسب الاسم:
SELECT Name, Salary
FROM Employees
WHERE Salary > 5000
ORDER BY Name ASC;
SELECT:DISTINCT: تُستخدم لإرجاع القيم الفريدة فقط في عمود محدد، مما يزيل أي صفوف مكررة من مجموعة النتائج.
SELECT DISTINCT City FROM Customers;
LIMIT (أو TOP في SQL Server): تُستخدم لتحديد العدد الأقصى من السجلات التي سيتم إرجاعها. مفيدة لتقليل الحمل على قاعدة البيانات.
SELECT Name, Email FROM Employees LIMIT 10; -- لـ MySQL وPostgreSQL
-- SELECT TOP 10 Name, Email FROM Employees; -- لـ SQL Server
LIKE: تُستخدم للبحث عن نمط محدد في عمود نصي باستخدام أحرف البدل (wildcard characters) مثل % (يمثل أي عدد من الأحرف) و _ (يمثل حرفًا واحدًا).
SELECT ProductName FROM Products WHERE ProductName LIKE 'Laptop%'; -- المنتجات التي تبدأ بـ "Laptop"
SELECT Email FROM Employees WHERE Email LIKE '%@example.com'; -- البريد الإلكتروني الذي ينتهي بـ "@example.com"
لمزيد من المعلومات حول تعليمة SELECT، يمكنك زيارة: SQL SELECT – W3Schools
INSERT
تُستخدم تعليمة INSERT لإضافة بيانات جديدة إلى الجداول.
تُستخدم تعليمة INSERT INTO لإضافة سجلات (صفوف) جديدة إلى جدول موجود في قاعدة البيانات.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
table_name: اسم الجدول الذي ستُضاف إليه البيانات.(column1, column2, ...): (اختياري) قائمة الأعمدة التي ستُدخل فيها البيانات. إذا تم تضمين قيم لجميع الأعمدة بنفس الترتيب، يمكن حذف هذه القائمة.(value1, value2, ...): القيم المقابلة للأعمدة المحددة. يجب أن تتطابق أنواع البيانات.لإضافة موظف جديد إلى جدول Employees:
INSERT INTO Employees (EmployeeID, Name, Salary, HireDate, Email)
VALUES (1, 'علي', 6000, '2023-01-15', 'ali.a@example.com');
إذا كنت تضيف قيمًا لجميع الأعمدة وبنفس الترتيب الذي تم تعريفها به في الجدول، يمكنك حذف قائمة الأعمدة:
-- إذا كان ترتيب الأعمدة في جدول Employees هو: EmployeeID, Name, Salary, HireDate, Email
INSERT INTO Employees
VALUES (2, 'سارة', 7500, '2022-03-01', 'sara.m@example.com');
لمزيد من المعلومات حول تعليمة INSERT، يمكنك زيارة: SQL INSERT – W3Schools
UPDATE
تُستخدم تعليمة UPDATE لتعديل البيانات الموجودة في جدول.
تُستخدم تعليمة UPDATE لتعديل القيم الموجودة في عمود واحد أو أكثر لسجلات معينة في جدول.
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
table_name: اسم الجدول الذي ستُعدّل بياناته.SET column1 = value1, ...: يحدد الأعمدة الجديدة وقيمها.WHERE condition: (اختياري) يُحدد السجلات التي سيتم تحديثها.لتعديل راتب الموظف ذو الرقم 1 ليصبح 6500:
UPDATE Employees
SET Salary = 6500
WHERE EmployeeID = 1;
لتحديث عدة أعمدة:
UPDATE Products
SET Price = 25.00, StockQuantity = 150
WHERE ProductID = 101;
عدم استخدام جملة WHERE في تعليمة UPDATE سيؤدي إلى تحديث جميع السجلات في الجدول! هذا يمكن أن يؤدي إلى فقدان بيانات لا يمكن استعادتها.
لمزيد من المعلومات حول تعليمة UPDATE، يمكنك زيارة: SQL UPDATE – W3Schools
DELETE
تُستخدم تعليمة DELETE لحذف سجلات من الجدول.
تُستخدم تعليمة DELETE FROM لحذف صف واحد أو أكثر من السجلات من جدول في قاعدة البيانات.
DELETE FROM table_name
WHERE condition;
table_name: اسم الجدول الذي ستُحذف منه البيانات.WHERE condition: (اختياري) يُحدد السجلات التي سيتم حذفها.لحذف الموظف ذو الرقم 1 من جدول Employees:
DELETE FROM Employees
WHERE EmployeeID = 1;
لحذف جميع الطلبات التي تمت قبل تاريخ معين:
DELETE FROM Orders
WHERE OrderDate < '2023-01-01';
عدم استخدام جملة WHERE في تعليمة DELETE سيؤدي إلى حذف جميع السجلات في الجدول! هذا يمكن أن يؤدي إلى فقدان بيانات لا يمكن استعادتها.
لمزيد من المعلومات حول تعليمة DELETE، يمكنك زيارة: SQL DELETE – W3Schools
تُقدم SQL مجموعة غنية من الدوال المدمجة التي تُمكنك من إجراء عمليات حسابية، معالجة النصوص، التعامل مع التواريخ، وغيرها من العمليات مباشرة على البيانات المسترجعة.
هي دوال مُعدة مسبقًا تُسهل العمليات الحسابية والمنطقية والتحويلية على البيانات في قواعد البيانات. تُستخدم غالبًا في جمل SELECT، WHERE، أو HAVING.
COUNT(): تُرجع عدد السجلات التي تطابق معيارًا محددًا.
SELECT COUNT(*) AS TotalEmployees FROM Employees; -- عدد كل الموظفين
SELECT COUNT(Email) FROM Employees; -- عدد الموظفين الذين لديهم بريد إلكتروني غير NULL
SUM(): تُرجع المجموع الكلي للقيم العددية في عمود.
SELECT SUM(Salary) AS TotalSalaries FROM Employees; -- مجموع رواتب الموظفين
AVG(): تُرجع متوسط القيم العددية في عمود.
SELECT AVG(Salary) AS AverageSalary FROM Employees; -- متوسط رواتب الموظفين
MIN(): تُرجع أصغر قيمة في عمود.
SELECT MIN(Price) AS CheapestProduct FROM Products; -- أرخص منتج
MAX(): تُرجع أكبر قيمة في عمود.
SELECT MAX(OrderDate) AS LatestOrderDate FROM Orders; -- أحدث تاريخ طلب
GROUP BY لتطبيق الدالة على مجموعات من السجلات بدلاً من الجدول بأكمله.
SELECT DepartmentID, AVG(Salary) AS AvgDeptSalary FROM Employees GROUP BY DepartmentID;
CONCAT(str1, str2, ...): لدمج سلاسل نصية.LENGTH(string) (أو LEN()): لإرجاع طول السلسلة.LOWER(string) / UPPER(string): لتحويل النص إلى أحرف صغيرة / كبيرة.NOW() / CURRENT_DATE(): لإرجاع التاريخ والوقت الحاليين.DATEDIFF(unit, start_date, end_date): لحساب الفرق بين تاريخين.لمزيد من المعلومات حول دوال SQL، يمكنك زيارة: SQL Functions – W3Schools
تُستخدم عمليات الضم (JOINs) لدمج الصفوف من جدولين أو أكثر بناءً على عمود مشترك بينهما (عادةً مفتاح رئيسي ومفتاح خارجي)، مما يُمكنك من استرجاع بيانات مترابطة مخزنة عبر جداول متعددة.
عملية تُستخدم لربط جدولين أو أكثر في استعلام واحد للحصول على بيانات مترابطة. تتم عملية الربط عادةً عن طريق مقارنة القيم في عمود مشترك (أو أكثر) بين الجداول.
JOIN الشائعة:
INNER JOIN:
يُرجع فقط الصفوف التي تتطابق فيها القيم في كلا الجدولين. هذا هو النوع الأكثر شيوعًا من الضم.
LEFT JOIN (أو LEFT OUTER JOIN):
يُرجع جميع الصفوف من الجدول الأيسر، بالإضافة إلى الصفوف المطابقة من الجدول الأيمن. إذا لم يكن هناك تطابق في الجدول الأيمن، فستظهر قيم NULL للأعمدة من الجدول الأيمن.
RIGHT JOIN (أو RIGHT OUTER JOIN):
يُرجع جميع الصفوف من الجدول الأيمن، بالإضافة إلى الصفوف المطابقة من الجدول الأيسر. إذا لم يكن هناك تطابق في الجدول الأيسر، فستظهر قيم NULL للأعمدة من الجدول الأيسر. (هو عكس LEFT JOIN).
FULL OUTER JOIN (أو FULL JOIN):
يُرجع جميع الصفوف من كلا الجدولين. إذا لم يكن هناك تطابق في أحد الجدولين، فستظهر قيم NULL للأعمدة من الجدول الآخر.
لنفترض أن لدينا جداول: Students (StudentID, Name)، Courses (CourseID, CourseName)، و Enrollments (EnrollmentID, StudentID, CourseID, Grade).
لإظهار أسماء الطلاب والمقررات التي سجلوها (لجلب بيانات من ثلاثة جداول):
SELECT
S.Name AS StudentName,
C.CourseName
FROM
Enrollments E
INNER JOIN
Students S ON E.StudentID = S.StudentID
INNER JOIN
Courses C ON E.CourseID = C.CourseID;
في هذا المثال:
Enrollments هو الجدول المركزي الذي يربط الطلاب بالمقررات.INNER JOIN Students ON E.StudentID = S.StudentID: يربط جدول Enrollments بجدول Students باستخدام StudentID.INNER JOIN Courses ON E.CourseID = C.CourseID: يربط جدول Enrollments بجدول Courses باستخدام CourseID.AS يُستخدم لإعطاء أسماء مستعارة (aliases) للأعمدة والجداول لتسهيل القراءة وتجنب تضارب الأسماء.لمزيد من المعلومات حول ضم الجداول (JOINs)، يمكنك زيارة: SQL JOIN – W3Schools
| المصطلح (الإنجليزية) | المصطلح (العربية) | التعريف |
|---|---|---|
| DML (Data Manipulation Language) | لغة معالجة البيانات | جزء من SQL يُستخدم لاسترجاع، إضافة، تعديل، وحذف البيانات في قاعدة البيانات. |
| SELECT | تحديد / استعلام | أمر DML لاستخراج البيانات من جدول أو أكثر. |
| INSERT INTO | إدخال في | أمر DML لإضافة صفوف جديدة من البيانات إلى جدول. |
| UPDATE | تحديث | أمر DML لتعديل البيانات الموجودة في جدول. |
| DELETE FROM | حذف من | أمر DML لحذف صفوف من البيانات من جدول. |
| WHERE Clause | جملة WHERE | تُستخدم لتصفية السجلات بناءً على شرط محدد في أوامر SELECT, UPDATE, DELETE. |
| ORDER BY | ترتيب حسب | تُستخدم لفرز مجموعة النتائج بترتيب تصاعدي أو تنازلي. |
| DISTINCT | فريد | تُستخدم لإرجاع قيم غير مكررة فقط. |
| LIMIT / TOP | تحديد / أعلى | تُستخدم لتحديد العدد الأقصى من السجلات المراد إرجاعها. |
| LIKE | يشبه | تُستخدم للبحث عن نمط محدد في عمود نصي. |
| Built-in Functions | الدوال المدمجة | دوال جاهزة في SQL لإجراء عمليات على البيانات (مثل COUNT, SUM, AVG, MIN, MAX). |
| Aggregate Functions | الدوال المجمعة | دوال تُجري عمليات حسابية على مجموعة من الصفوف وتُرجع قيمة واحدة (مثل COUNT, SUM, AVG). |
| GROUP BY | تجميع حسب | تُستخدم لتجميع الصفوف التي تحتوي على نفس القيم في أعمدة محددة في مجموعات. |
| JOIN | ضم / ربط | عملية دمج الصفوف من جدولين أو أكثر بناءً على عمود مشترك. |
| INNER JOIN | ضم داخلي | يُرجع الصفوف المتطابقة فقط من كلا الجدولين. |
| LEFT JOIN | ضم أيسر | يُرجع جميع الصفوف من الجدول الأيسر والصفوف المتطابقة من الجدول الأيمن. |
| RIGHT JOIN | ضم أيمن | يُرجع جميع الصفوف من الجدول الأيمن والصفوف المتطابقة من الجدول الأيسر. |
| FULL OUTER JOIN | ضم خارجي كامل | يُرجع جميع الصفوف من كلا الجدولين، مع قيم NULL للصفوف غير المتطابقة. |
| Alias | اسم مستعار | اسم مؤقت يُعطى لجدول أو عمود في استعلام SQL. |
SELECT (لاسترجاع البيانات)، INSERT (لإضافة بيانات)، UPDATE (لتعديل بيانات)، وDELETE (لحذف بيانات).WHERE حاسمة لتصفية السجلات في أوامر SELECT، UPDATE، وDELETE لمنع العمليات غير المقصودة.COUNT، SUM، AVG، MIN، MAX) تُمكن من إجراء عمليات حسابية وتحويلات على البيانات.INNER JOIN وLEFT JOIN تُستخدم لدمج البيانات من جداول متعددة بناءً على العلاقات بينها.استخدم قاعدة بيانات افتراضية تحتوي على الجداول التالية لتطبيق التمارين:
Employees:EmployeeID (INT PK) |
Name (VARCHAR) |
Salary (DECIMAL) |
DepartmentID (INT FK) |
|---|---|---|---|
| 1 | أحمد علي | 6000.00 | 10 |
| 2 | سارة محمد | 7500.00 | 20 |
| 3 | فهد خالد | 5500.00 | 10 |
| 4 | نور يوسف | 8000.00 | 30 |
Departments:DepartmentID (INT PK) |
DepartmentName (VARCHAR) |
|---|---|
| 10 | الموارد البشرية |
| 20 | التسويق |
| 30 | التطوير |
Courses:CourseID (INT PK) |
CourseName (VARCHAR) |
Credits (INT) |
|---|---|---|
| 101 | مقدمة في قواعد البيانات | 3 |
| 102 | البرمجة بلغة بايثون | 4 |
SELECT:
Name وSalary لجميع الموظفين من جدول Employees، ورتب النتائج بترتيب تنازلي حسب Salary، ثم تصاعدي حسب Name.INSERT:
Courses بالمعلومات التالية: CourseID = 103، CourseName = 'أساسيات الأمن السيبراني'، Credits = 3.UPDATE:
EmployeeID = 2 في جدول Employees ليصبح 8200.00.DELETE:
EmployeeID = 4 من جدول Employees. (افترض أنه لا يوجد تكامل مرجعي يمنع الحذف أو قم بتعطيله مؤقتًا لأغراض التمرين).AVG() لحساب متوسط رواتب الموظفين في كل قسم. يجب أن يظهر الاستعلام DepartmentID ومتوسط الراتب لكل قسم.JOIN):
INNER JOIN بين جدولي Employees وDepartments لإظهار EmployeeID، Name، وDepartmentName لجميع الموظفين.LEFT JOIN):
LEFT JOIN بين جدولي Departments وEmployees. أظهر DepartmentName وName لجميع الأقسام، مع إظهار الموظفين المرتبطين بها. (يجب أن تُظهر الأقسام التي ليس لها موظفين أيضًا).