لماذا JOIN؟
البيانات موزّعة على عدة جداول. مثلًا جدول users وجدول orders. نربطهما
لنرى طلبات كل مستخدم.
-- orders فيه عمود user_id يشير إلى users.id
SELECT users.name, orders.total
FROM orders
INNER JOIN users ON orders.user_id = users.id;
INNER JOIN
يجلب الصفوف التي لها تطابق في الجدولين فقط.
LEFT JOIN
يجلب كل صفوف الجدول الأيسر، حتى بلا تطابق (تظهر NULL):
SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
مفيد لمعرفة المستخدمين الذين لم يطلبوا شيئًا.
دوال التجميع (Aggregate)
SELECT COUNT(*) FROM users; -- عدد الصفوف
SELECT AVG(age) FROM users; -- المتوسط
SELECT MAX(price) FROM products; -- الأكبر
SELECT SUM(total) FROM orders; -- المجموع
التجميع (GROUP BY)
نحسب قيمة لكل مجموعة:
-- عدد المستخدمين في كل مدينة
SELECT city, COUNT(*) AS count
FROM users
GROUP BY city;
التصفية بعد التجميع (HAVING)
SELECT city, COUNT(*) AS count
FROM users
GROUP BY city
HAVING COUNT(*) > 10;
💡
WHEREيصفّي الصفوف قبل التجميع، وHAVINGيصفّي المجموعات بعده.
🎉 أكملت أساسيات SQL! أصبحت قادرًا على إدارة قواعد البيانات والاستعلام عنها. اختبر نفسك واحصل على شهادتك.