SQL — DDL و DML
| English | العربية |
|---|---|
| SQL/ˌes kjuː ˈel/ | SQL |
| Data Definition Language/ˈdeɪtə ˌdefɪˈnɪʃn ˈlæŋɡwɪdʒ/ | لغة تعريف البيانات |
| Data Manipulation Language/ˈdeɪtə məˌnɪpjʊˈleɪʃn ˈlæŋɡwɪdʒ/ | لغة معالجة البيانات |
| INNER JOIN/ˈɪnə dʒɔɪn/ | INNER JOIN |
| aggregate functions/ˈæɡrɪɡeɪt ˈfʌŋkʃnz/ | الدوال المجمعة |
اللغة التي كان يستخدمها مبرمجو أجدادك أيضاً
- في عام 1974، صمم باحثان من IBM لغة استعلام لجداول كود وأطلقوا عليها اسم SEQUEL: لغة الاستعلام الإنجليزية المهيكلة. تم اختصار الاسم إلى SQL، ولم تبتعد اللغة أبداً.
- بعد خمسين عاماً، يعمل كل بنك وطائرة ومستشفى وموقع إلكتروني تستخدمه عليها. طالب يكتب
SELECTاليوم يكتب نفس الجملة التي كتبها مبرجم قبل أن يولد والداها. - تتكون من جزئين، ويطلب منك الامتحان قراءة أي منهما وكتابة كليهما: لغة تعريف البيانات التي تبني البنية، ولغة معالجة البيانات التي تملأ وتغير وتسأل البيانات.
- هذه الدرس هو الجزء الفرعي من SQL في المنهج الدراسي، جملة بجملة، مع العلامة التي تحملها كل واحدة منها.
لغة تعريف البيانات ولغة معالجة البيانات (DDL و DML)
- يقوم نظام إدارة قواعد البيانات بتنفيذ جميع عمليات إنشاء وتعديل بنية قاعدة البيانات من خلال لغة تعريف البيانات (DDL): إنشاء قاعدة بيانات، وإنشاء وتعديل الجداول، وإضافة المفاتيح.
- يقوم بتنفيذ جميع الاستعلامات وصيانة البيانات من خلال لغة معالجة البيانات (DML): التحديد، والإدراج، والتحديث، والحذف للصفوف.
- SQL هو المعيار الصناعي لكلاهما. تصنيف جملة في النصف الصحيح هو سؤال شائع بعلامة واحدة:
CREATE TABLEهي DDL، وSELECTهي DML.

البنية في جانب واحد، والبيانات في الجانب الآخر
أي مما يلي جزء من لغة تعريف البيانات (DDL)؟
DDL يغير البنية (CREATE, ALTER, DROP). SELECT/INSERT/UPDATE/DELETE هي DML (العمل مع البيانات).
تعرف DDL بالبنية (مثل CREATE TABLE)، بينما تعمل DML مع البيانات بداخلها (SELECT, INSERT, UPDATE, DELETE).
التعريف مقابل التعديل: تحدد DDL الجداول؛ وتقرأ DML وتعدل الصفوف.
DDL: إنشاء البنية
CREATE DATABASE Shop;
CREATE TABLE CUSTOMER (
CustomerID INTEGER,
Name VARCHAR(50),
Town VARCHAR(30),
Joined DATE,
Active BOOLEAN,
PRIMARY KEY (CustomerID)
);
ALTER TABLE CUSTOMER ADD Email VARCHAR(100);
- أنواع البيانات في المنهج الدراسي:
CHARACTER(عدد ثابت من الأحرف)،VARCHAR(n)(حتى n من الأحرف)،BOOLEAN،INTEGER،REAL،DATE،TIME. PRIMARY KEY (field)يسمي المفتاح؛ALTER TABLE … ADDيضيف سمة إلى جدول موجود.
طابق كل عنصر بيانات مع نوع البيانات SQL المناسب له.
حالتان، نص متغير الطول، رقم بكسر، تاريخ تقويمي. INTEGER للأعداد الصحيحة الكاملة و TIME لوقت اليوم.
مثال محلول: جدولين مع مفتاح أجنبي
- اكتب SQL لإنشاء جدول
ORDERSيكون فيهOrderIDمفتاحاً رئيسياً، وCustomerIDمفتاحاً أجنبياً يشير إلىCUSTOMER، بالإضافة إلىOrderDate.
CREATE TABLE ORDERS (
OrderID INTEGER,
CustomerID INTEGER,
OrderDate DATE,
PRIMARY KEY (OrderID),
FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID)
);
- العلامة:
CREATE TABLEمع الاسم؛ لكل سمة نوع مناسب؛PRIMARY KEY؛FOREIGN KEY … REFERENCESالذي يُسمّي الجدول وحقله.
DML: طرح سؤال باستخدام SELECT
SELECT Name, Town
FROM CUSTOMER
WHERE Town = 'London'
ORDER BY Name ASC;
SELECTيسرد المجالات للمخرجات (*لكل المجالات)،FROMيسمي الجدول،WHEREيحافظ فقط على الصفوف التي تحقق شرطاً معيناً،ORDER BYيرتب النتيجة،ASCأوDESC.- النصوص تُوضع بين علامات اقتباس مفردة؛ الأرقام لا. المقارنات:
=،<،>،<=،>=،<>؛ ترتبط الشروط بواسطةAND،OR،NOT؛LIKE 'A%'يطابق نصاً يبدأ بحرف A؛BETWEEN 10 AND 20يعطي نطاقاً.

فقط الصفوف التي تمر عبر WHERE تصل إلى النتيجة
أي كلمة SQL تجلب البيانات من جدول؟ (كلمة واحدة)
SELECT يعدد الحقول التي سيتم جلبها؛ FROM يسمي الجدول.
عبارة WHERE في جملة SELECT:
WHERE يرشح الصفوف بناءً على شرط؛ ORDER BY يرتبها؛ وقائمة SELECT تختار الأعمدة.
مثال محلول: اكتب الاستعلام
- اكتب سكربت SQL لإخراج أسماء وعناوين البريد الإلكتروني لجميع العملاء النشطين في مانشستر، مرتبة أبجدياً حسب الاسم.
SELECT Name, Email
FROM CUSTOMER
WHERE Town = 'Manchester' AND Active = TRUE
ORDER BY Name;
- علامة لكل واحد: المجالات الصحيحة بعد
SELECT؛ الجدول الصحيح بعدFROM؛WHEREمع الشرطين والنص بين علامات الاقتباس المفردة؛ORDER BY Name. استخدم أسماء الجداول والمجالات الدقيقة التي قدمتها السؤال.
ضع الجمل في جملة SELECT بالترتيب الذي كُتبت فيه.
الحقول، الجدول، الفلتر، الترتيب. يكون ORDER BY دائمًا في النهاية، وينتهي الاستعلام بنقطة فاصلة منقوطة.
جدولين: INNER JOIN
SELECT CUSTOMER.Name, ORDERS.OrderDate
FROM CUSTOMER INNER JOIN ORDERS
ON CUSTOMER.CustomerID = ORDERS.CustomerID
WHERE ORDERS.OrderDate >= '2024-01-01';
- INNER JOIN يدمج صفوف جدولين حيث يتطابق المفتاح الأجنبي في أحدهما مع المفتاح الرئيسي في الآخر، المذكور في بند
ON. - ضع اسم الجدول قبل الحقل عندما يظهر الاسم نفسه في كلا الجدولين. يتطلب المنهج إجراء استعلامات على جدولين كحد أقصى.
ربط جدولين باستخدام INNER JOIN
ي matcher الربط الصفوف حيث يساوي المفتاح الأجنبي المفتاح الأساسي — هنا Orders.CustomerID = Customer.CustomerID — ويجمع كل زوج مطابق في صف واحد أعرض.
يُستخدم INNER JOIN لـ:
يقوم JOIN بدمج جدولين بناءً على علاقة (عادةً مفتاح أجنبي يطابق مفتاحًا رئيسيًا).
الدوال المجمّعة و GROUP BY
SELECT CustomerID, COUNT(*) AS NumOrders
FROM ORDERS
GROUP BY CustomerID;
SELECT AVG(Price) FROM PRODUCT;
SELECT SUM(Quantity) FROM ORDER_LINE WHERE OrderID = 1042;
- الدوال المجمّعة تلخّص عددًا كبيرًا من الصفوف في قيمة واحدة:
COUNTعدّ الصفوف،SUMمجموع القيم،AVGالمتوسط الحسابي. GROUP BYيُنتج سطرًا ملخصًا واحدًا لكل قيمة لحقل معين: عدد الطلبات لكل عميل. بدون هذا الأمر، تقوم الدالة المجمّعة بتلخيص الجدول بأكمله.
ماذا يُرجع COUNT(*)؟
COUNT(*) يحسب عدد الصفوف؛ أما SUM/AVG/MIN/MAX فهي الدوال الإجمالية الأخرى.
لمخرجة عدد الطلبات التي وضعها كل عميل، يحتاج الاستعلام إلى: اختر كل الخيارات الصحيحة.
حساب عدد الصفوف بمجموعات منفصلة لكل عميل من جدول الطلبات. الترتيب اختياري.
تغيير البيانات: INSERT, UPDATE, DELETE
INSERT INTO CUSTOMER (CustomerID, Name, Town, Joined, Active)
VALUES (101, 'Ada Lovelace', 'London', '2024-03-01', TRUE);
UPDATE CUSTOMER SET Town = 'Bristol' WHERE CustomerID = 101;
DELETE FROM CUSTOMER WHERE CustomerID = 101;
INSERT INTO … VALUESيضيف صفاً: اذكر الحقول أولاً، ثم القيم بنفس الترتيب.UPDATE … SET … WHEREيُعدّل الصفوف المطابقة.DELETE FROM … WHEREيحذفها.- يجب دائماً تزويد
UPDATEوDELETEبعبارةWHERE، وإلا سيتم تطبيق التغيير على كل صف في الجدول.
ماذا يحدث إذا قمت بتشغيل UPDATE أو DELETE بدون جملة WHERE؟
بدون WHERE، تؤثر العملية على جميع الصفوف — وهو خطأ شائع وخطير.
طابق كل statement DML بما يقوم به.
SELECT يقرأ؛ INSERT يضيف؛ UPDATE يغير؛ DELETE يزيل — هذه هي الأفعال الأساسية الأربعة في DML.
مثال محلول: قراءة الاستعلام
SELECT Name
FROM CUSTOMER INNER JOIN ORDERS
ON CUSTOMER.CustomerID = ORDERS.CustomerID
WHERE OrderDate = '2024-05-01'
ORDER BY Name DESC;
- اذكر ما تخرجه هذه البرمجة. أسماء جميع العملاء الذين قدموا طلباً في 1 مايو 2024، سطر واحد لكل طلب من هذا النوع، مرتبة أبجدياً تنازلياً.
- اقرأها حسب ترتيب التنفيذ: اربط الجداول عبر معرف العميل، احتفظ بالصفوف الخاصة بهذا التاريخ، أخرج الاسم، وصنّف تنازلياً. سيظهر العميل الذي لديه طلبان في نفس اليوم مرتين.
علامات ضائعة
- النصوص بين علامات اقتباس مفردة، والأرقام بدون علامات:
Town = 'London'،CustomerID = 101. ORDER BYيأتي بعدWHERE؛ يحتاج الربط إلى عبارةON؛ ينتهي كل استعلام بنقطة فاصلة.COUNT(*)يعدّ الصفوف وليس القيم المميزة؛ للسؤال الخاص بالمجموعات نحتاجGROUP BY.CREATE،ALTERوPRIMARY KEYهي DDL؛SELECT،INSERT،UPDATE،DELETEهي DML. استخدم الأسماء الدقيقة التي يعطيها السؤال.
لقد فهمت الأمر
- DDL ينشئ ويغيّر البنية:
CREATE DATABASE،CREATE TABLEمع سمات ذات نوع محدد،PRIMARY KEY،FOREIGN KEY … REFERENCES،ALTER TABLE … ADD· DML يتعامل مع البيانات - الأنواع:
CHARACTER،VARCHAR(n)،BOOLEAN،INTEGER،REAL،DATE،TIME SELECT fields FROM table WHERE condition ORDER BY field؛INNER JOIN … ONلجدولين؛COUNT،SUM،AVGمعGROUP BYلسطر واحد لكل مجموعةINSERT INTO … VALUES،UPDATE … SET … WHERE،DELETE FROM … WHERE: لا يوجد تحديث أو حذف بدونWHERE