تعلم SQL للمبتدئين: أنشئ أول قاعدة بيانات واكتب أول استعلام
شرح SQL من الصفر باستخدام SQLite: أنشئ جدولاً وأضف البيانات، واستخدم SELECT وWHERE وORDER BY وUPDATE وDELETE وGROUP BY وJOIN بأمثلة مجرّبة.
نُشر في 5 دقائق قراءة
محتويات المقال
SQL (اختصار Structured Query Language) هي اللغة المعيارية لتخزين البيانات وقراءتها وتعديلها في قواعد البيانات العلائقية. بعدد قليل من الأوامر مثل CREATE TABLE وINSERT وSELECT تستطيع بناء قاعدة بيانات صغيرة وطرح أسئلة حقيقية عليها. نستخدم في هذا الشرح SQLite لأنها مجانية ولا تحتاج خادماً، وكل الأمثلة هنا جُرّبت وتأكدنا من نتائجها.
الجواب السريع: قاعدة البيانات تحفظ البيانات في جداول من صفوف وأعمدة. تنشئ الجدول بـ CREATE TABLE، وتضيف الصفوف بـ INSERT، وتقرؤها بـ SELECT ... WHERE ... ORDER BY، وتعدّلها بـ UPDATE وDELETE، وتلخّصها بـ COUNT وGROUP BY، وتربط الجداول ببعضها بـ JOIN.
ما هي قاعدة البيانات العلائقية؟
قاعدة البيانات العلائقية تنظّم البيانات في جداول، تشبه أوراق Excel لكن بقواعد أكثر صرامة:
- الجدول (Table) يحفظ نوعاً واحداً من الأشياء، مثل جدول الطلاب
students. - العمود (Column) خاصية واحدة لها معنى ثابت:
nameوcityوscore. - الصف (Row) سجل واحد: طالب واحد.
- المفتاح الأساسي (Primary Key)، وهنا العمود
id، قيمته لا تتكرر أبداً، فتستطيع دائماً الإشارة إلى سجل واحد بعينه.
وكلمة "علائقية" تعني أن الجداول يمكن ربطها ببعض عبر هذه المفاتيح، وهذا ما ستفعله لاحقاً باستخدام JOIN.
أين تتدرب على SQL مجاناً؟
| الخيار | ما هو | مناسب لـ |
|---|---|---|
| SQLite Fiddle | يشغّل SQLite داخل المتصفح من موقع sqlite.org | تجربة الاستعلامات دون تثبيت أي شيء |
أداة سطر الأوامر sqlite3 |
الواجهة الرسمية لـ SQLite في الطرفية | التعلم من الطرفية |
| DB Browser for SQLite | برنامج مكتبي مجاني ومفتوح المصدر | رؤية الجداول بشكل مرئي |
وحدة sqlite3 في Python |
مدمجة مع Python | استخدام SQL داخل برامجك |
لاستخدام أداة سطر الأوامر، نزّلها من صفحة التنزيلات الرسمية في sqlite.org (وغالباً تكون موجودة مسبقاً في macOS). ثم افتح ملف قاعدة بيانات أو أنشئ ملفاً جديداً:
sqlite3 school.db
هذان الإعدادان يجعلان النتائج أسهل في القراءة، والأمر .quit للخروج:
.headers on
.mode column
وإذا كنت تعرف شيئاً من Python، فيمكنك تشغيل أوامر SQL نفسها عبر وحدة sqlite3 المدمجة فيها، راجع تعلم Python للمبتدئين.
أنشئ أول جدول لك
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
city TEXT,
score INTEGER
);
كل سطر يعرّف عموداً ونوعه. وعبارة NOT NULL تعني أنه لا يمكن حفظ صف بدون اسم. وفي SQLite، العمود المعرّف بـ INTEGER PRIMARY KEY يملأ نفسه: إذا لم تعطه قيمة id، تعطي SQLite الصف الجديد الرقم التالي تلقائياً.
اكتب .tables لعرض الجداول، و.schema students لرؤية تعريف الجدول.
أضف البيانات باستخدام INSERT
INSERT INTO students (name, city, score) VALUES ('Sara', 'Riyadh', 92);
INSERT INTO students (name, city, score) VALUES
('Omar', 'Jeddah', 78),
('Lina', 'Riyadh', 85),
('Khalid', 'Dammam', 64);
القيم النصية توضع بين علامتي تنصيص مفردتين، والأرقام بدونها. وكل أمر ينتهي بفاصلة منقوطة ;، وإذا نسيتها في أداة sqlite3 فستبقى الأداة منتظرة بقية الأمر.
اقرأ البيانات: SELECT وWHERE وORDER BY وLIMIT
الرمز * يعني "كل الأعمدة":
SELECT * FROM students;
id name city score
-- ------ ------ -----
1 Sara Riyadh 92
2 Omar Jeddah 78
3 Lina Riyadh 85
4 Khalid Dammam 64
اختر أعمدة محددة وصفِّ الصفوف بـ WHERE:
SELECT name, score FROM students WHERE city = 'Riyadh';
name score
---- -----
Sara 92
Lina 85
تقبل WHERE مقارنات مثل = و<> (لا يساوي) و> و< و>= و<=، ويمكن الجمع بينها بـ AND وOR. ولترتيب النتائج والاكتفاء بأعلاها:
SELECT name, score FROM students ORDER BY score DESC LIMIT 2;
النتيجة Sara (92) ثم Lina (85). الكلمة DESC ترتب من الأعلى إلى الأدنى، وASC (الافتراضية) تفعل العكس.

العدّ والتجميع: COUNT وAVG وGROUP BY
الدوال التجميعية تحوّل صفوفاً كثيرة إلى إجابة واحدة:
SELECT COUNT(*) FROM students; -- 4
SELECT COUNT(*) FROM students WHERE score >= 80; -- 2
SELECT AVG(score) FROM students; -- 79.75
أما GROUP BY فتحسب الإجابة لكل مجموعة على حدة:
SELECT city, COUNT(*) AS total
FROM students
GROUP BY city
ORDER BY total DESC, city;
city total
------ -----
Riyadh 2
Dammam 1
Jeddah 1
العبارة AS total تعطي عمود النتيجة اسماً واضحاً.
المفتاح الأساسي وأول JOIN
قواعد البيانات الحقيقية توزّع البيانات على عدة جداول. هذا جدول ثانٍ يسجّل الدورات التي يدرسها كل طالب:
CREATE TABLE enrollments (
id INTEGER PRIMARY KEY,
student_id INTEGER REFERENCES students(id),
course TEXT
);
INSERT INTO enrollments (student_id, course) VALUES
(1, 'Python'),
(1, 'SQL'),
(3, 'JavaScript');
العمود student_id يحفظ المفتاح الأساسي للطالب بدلاً من تكرار اسمه ومدينته ودرجته، ويسمى هذا النوع من الأعمدة مفتاحاً أجنبياً (Foreign Key). ملاحظة: SQLite لا تفرض قيود المفاتيح الأجنبية إلا بعد تشغيل الأمر PRAGMA foreign_keys = ON;.
والآن يطابق JOIN الصفوف من الجدولين:
SELECT students.name, enrollments.course
FROM students
JOIN enrollments ON enrollments.student_id = students.id;
name course
---- ----------
Sara Python
Sara SQL
Lina JavaScript
لم يظهر Omar وKhalid لأنهما غير مسجلين في أي دورة. ولو استخدمت LEFT JOIN لظهرا مع قيمة فارغة (NULL) في عمود الدورة.
عدّل البيانات واحذفها: UPDATE وDELETE
UPDATE students SET score = 70 WHERE id = 4;
DELETE FROM students WHERE id = 2;
الأمر الأول يغيّر درجة Khalid إلى 70، والثاني يحذف صف Omar.
تحذير: لا تنسَ WHERE أبداً. الأمر UPDATE students SET score = 0; يغيّر كل الصفوف، والأمر DELETE FROM students; يفرغ الجدول بالكامل، ولن يطلب منك أي تأكيد. عادات آمنة:
- نفّذ أولاً
SELECTبالشرطWHEREنفسه، وتأكد أنه يعيد الصفوف المقصودة فقط. - استخدم المفتاح الأساسي في الشرط (
WHERE id = 4) عندما تقصد صفاً واحداً. - احتفظ بنسخة من ملف
.dbقبل التعديلات الكبيرة، ومع SQLite يكفي نسخ الملف.
إلى أين بعد أول استعلام؟
- صمّم قاعدة بيانات صغيرة خاصة بك: كتب قرأتها، أو مصروفاتك، أو قائمة مهام، بجدولين مرتبطين.
- تعلّم
LEFT JOIN، وLIKEللبحث في النصوص، وHAVINGلتصفية المجموعات. - اربط SQL بالبرمجة: معظم تطبيقات الويب ترسل أوامر SQL من الخادم ثم تعيد النتائج عبر واجهة برمجية، راجع ما هو الـ API.
- جرّب PostgreSQL أو MySQL عندما تتقن SQLite، فمعظم ما تعلمته ينتقل معك.
وللحصول على خطة تعلم كاملة، اقرأ كيف تبدأ تعلم البرمجة من الصفر.
المصادر الرسمية: توثيق SQLite · SQLite Fiddle · تعريف SQL في MDN
أسئلة شائعة
هل SQL لغة برمجة؟
SQL لغة مصممة خصيصاً للتعامل مع البيانات في قواعد البيانات العلائقية. هي لغة وصفية: تصف النتيجة التي تريدها وقاعدة البيانات تقرر طريقة الوصول إليها. ومعظم المبرمجين يتعلمونها إلى جانب لغة عامة مثل Python أو JavaScript.
أي قاعدة بيانات أستخدم لتعلم SQL؟
SQLite هي الأسهل للبداية، لأن قاعدة البيانات كلها ملف واحد ولا تحتاج إعداد خادم. والأساسيات التي تتعلمها تنطبق على PostgreSQL وMySQL وSQL Server مع فروق بسيطة في الصيغة وأنواع البيانات.
هل يجب كتابة أوامر SQL بالحروف الكبيرة؟
لا. الأمر SELECT يعمل مثل select تماماً، والحروف الكبيرة مجرد عرف شائع يسهّل قراءة الاستعلام. أما القيم داخل علامات التنصيص فأمرها مختلف: مطابقة 'Riyadh' مع 'riyadh' تعتمد على قاعدة البيانات وإعداداتها.
ما الفرق بين قواعد بيانات SQL وNoSQL؟
قواعد بيانات SQL تخزن البيانات في جداول ذات هيكل محدد وعلاقات بينها. أما NoSQL فاسم واسع لنماذج أخرى مثل قواعد المستندات أو قواعد المفتاح والقيمة. ونسبة كبيرة من المشاريع تستخدم قواعد SQL، لذلك تعلّم أساسياتها مفيد في كل الأحوال.
شروحات ذات صلة
البرمجة
تعلم JavaScript للمبتدئين: الأساسيات وأول كود تكتبه
شرح JavaScript للمبتدئين خطوة بخطوة: شغّل الكود في Console المتصفح، وتعلّم المتغيرات والدوال والشروط والحلقات والمصفوفات، ثم اجعل زراً يتفاعل مع النقر.
· 6 دقائق قراءة
البرمجة
دورات برمجة مجانية ومدعومة في السعودية والخليج: دليل 2026
أهم خيارات تعلم البرمجة مجاناً أو بدعم في السعودية والخليج: أكاديمية طويق، دروب، أكاديمية سدايا، معسكرات مسك، و42 أبوظبي، مع مصادر عالمية مجانية.
· 5 دقائق قراءة
البرمجة
كيف تستخدم الذكاء الاصطناعي في البرمجة: دليل عملي للمبتدئين
تعلّم كيف تستخدم أدوات الذكاء الاصطناعي مثل ChatGPT وClaude وGitHub Copilot لكتابة الكود وشرحه وإصلاح أخطائه، والأخطاء التي يجب أن تتجنبها.
· 5 دقائق قراءة