تعلم SQL للمبتدئين: أنشئ أول قاعدة بيانات واكتب أول استعلام

شرح SQL من الصفر باستخدام SQLite: أنشئ جدولاً وأضف البيانات، واستخدم SELECT وWHERE وORDER BY وUPDATE وDELETE وGROUP BY وJOIN بأمثلة مجرّبة.

نُشر في 5 دقائق قراءة

أسطوانة قاعدة بيانات متصلة بجدول بيانات داكن تضيء صفوفه على خلفية بنفسجية متدرجة
محتويات المقال
  1. ما هي قاعدة البيانات العلائقية؟
  2. أين تتدرب على SQL مجاناً؟
  3. أنشئ أول جدول لك
  4. أضف البيانات باستخدام INSERT
  5. اقرأ البيانات: SELECT وWHERE وORDER BY وLIMIT
  6. العدّ والتجميع: COUNT وAVG وGROUP BY
  7. المفتاح الأساسي وأول JOIN
  8. عدّل البيانات واحذفها: UPDATE وDELETE
  9. إلى أين بعد أول استعلام؟

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.

جدول students يضيء فيه عمود name، ثم صف الطالبة Sara، ثم عمود id المميز بأيقونة مفتاح لأنه المفتاح الأساسي

أين تتدرب على 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 (الافتراضية) تفعل العكس.

جلسة sqlite3 في الطرفية تنشئ جدول students وتضيف أربعة صفوف، ثم تنفّذ استعلامات SELECT مع WHERE وORDER BY وLIMIT وGROUP BY وتعرض النتائج

العدّ والتجميع: 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; يفرغ الجدول بالكامل، ولن يطلب منك أي تأكيد. عادات آمنة:

  1. نفّذ أولاً SELECT بالشرط WHERE نفسه، وتأكد أنه يعيد الصفوف المقصودة فقط.
  2. استخدم المفتاح الأساسي في الشرط (WHERE id = 4) عندما تقصد صفاً واحداً.
  3. احتفظ بنسخة من ملف .db قبل التعديلات الكبيرة، ومع SQLite يكفي نسخ الملف.

إلى أين بعد أول استعلام؟

  1. صمّم قاعدة بيانات صغيرة خاصة بك: كتب قرأتها، أو مصروفاتك، أو قائمة مهام، بجدولين مرتبطين.
  2. تعلّم LEFT JOIN، وLIKE للبحث في النصوص، وHAVING لتصفية المجموعات.
  3. اربط SQL بالبرمجة: معظم تطبيقات الويب ترسل أوامر SQL من الخادم ثم تعيد النتائج عبر واجهة برمجية، راجع ما هو الـ API.
  4. جرّب 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، لذلك تعلّم أساسياتها مفيد في كل الأحوال.