تعلم SQL من الصفر

تعلم SQL من الصفر

تُستخدم لغة SQL (Structured Query Language) للتحكم بقواعد البيانات العلائقية. سواء استخدمت SQLite أو PostgreSQL أو MySQL أو SQL Server، فمعظم الأوامر الأساسية متشابهة. تستخدم هذه المقالة SQLite الذي لا يحتاج إلى خادم، لإنشاء الجداول وإضافة البيانات والبحث والربط بين الجداول والتجميع وتعديل البيانات.

تم تشغيل جميع الأوامر في هذه المقالة باستخدام SQLite 3.50، والمخرجات المعروضة حقيقية.

ما الذي تحتاجه

كيف ترتبط الجداول

مخطط لثلاثة جداول students وclasses وscores مرتبطة بالمفاتيح
مخطط لثلاثة جداول students وclasses وscores مرتبطة بالمفاتيح

إنشاء الجداول وإضافة البيانات

CREATE TABLE students (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  class_id INTEGER
);
CREATE TABLE classes (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL
);
CREATE TABLE scores (
  student_id INTEGER REFERENCES students(id),
  subject TEXT,
  score INTEGER
);
INSERT INTO classes VALUES (1, 'ม.4/1'), (2, 'ม.4/2');
INSERT INTO students VALUES (1, 'สมชาย', 1), (2, 'สมหญิง', 1), (3, 'สมศักดิ์', 2);
INSERT INTO scores VALUES (1, 'คณิต', 85), (1, 'อังกฤษ', 70), (2, 'คณิต', 72), (3, 'คณิต', 45), (3, 'อังกฤษ', 60);

البحث باستخدام SELECT وWHERE

SELECT name FROM students WHERE class_id = 1;

الربط بين الجداول باستخدام JOIN

SELECT s.name, c.title FROM students s JOIN classes c ON c.id = s.class_id ORDER BY s.name;

تجمع `JOIN` الصفوف من جدولين عندما تتطابق المفاتيح. الحرفان `s` و`c` اختصارات لاسمي الجدولين.

التجميع باستخدام GROUP BY

SELECT subject, AVG(score) AS avg_score, COUNT(*) AS n FROM scores GROUP BY subject ORDER BY subject;

تعمل دوال التجميع مثل `AVG` و`COUNT` و`SUM` على كل مجموعة. استخدم `HAVING` للتصفية بعد التجميع:

SELECT student_id, SUM(score) AS total FROM scores GROUP BY student_id HAVING SUM(score) >= 100;

تعديل البيانات وحذفها

UPDATE scores SET score = score + 5 WHERE student_id = 3 AND subject = 'คณิต';
DELETE FROM scores WHERE score < 50;
SELECT student_id, subject, score FROM scores ORDER BY student_id, subject;

يرفع `UPDATE` الدرجة 45 إلى 50، لذلك لا يحذف `DELETE` أي صف. لاحظ أن الأوامر تُنفَّذ بالترتيب الذي كُتبت به.

النتائج الفعلية

name
------
สมชาย
สมหญิง

name      title
--------  -----
สมชาย     ม.4/1
สมศักดิ์     ม.4/2
สมหญิง     ม.4/1

subject  avg_score         n
-------  ----------------  -
คณิต      67.3333333333333  3
อังกฤษ    65.0              2

student_id  total
----------  -----
1           155
3           105

student_id  subject  score
----------  -------  -----
1           คณิต      85
1           อังกฤษ    70
2           คณิต      72
3           คณิต      50
3           อังกฤษ    60

أخطاء شائعة

الخطوات التالية

صمّم جداولك الخاصة، مثل المنتجات والطلبات، واكتب `JOIN` يحسب إجمالي المبيعات لكل منتج. ثم تعلّم الفهارس (Index) والمعاملات (Transactions)، فهي مهمة عندما تكبر البيانات.

الخلاصة

تحدد SQL البنية باستخدام `CREATE`، وتدير البيانات باستخدام `INSERT` و`UPDATE` و`DELETE`، وتبحث باستخدام `SELECT` مع `WHERE` و`JOIN` و`GROUP BY` و`HAVING`. التجربة على بيانات نموذجية صغيرة توضح أثر كل أمر بوضوح.