التعامل مع استعلامات SQL المتقدمة
استخدام أوامر الفرز (ORDER BY) لتنسيق النتائج
ORDER BY
تُستخدم لفرز النتائج حسب أعمدة معينة، إما تصاعديًا (ASC
) أو تنازليًا (DESC
).
مثال على الفرز التصاعدي:
SELECT * FROM employees ORDER BY salary ASC;
- يتم فرز الموظفين حسب الرواتب من الأقل إلى الأعلى.
مثال على الفرز التنازلي:
SELECT * FROM employees ORDER BY salary DESC;
- يتم فرز الموظفين حسب الرواتب من الأعلى إلى الأقل.
فرز حسب أكثر من عمود:
SELECT * FROM employees ORDER BY department ASC, salary DESC;
- يتم الفرز حسب القسم تصاعديًا، ثم الرواتب تنازليًا داخل كل قسم.
تجميع البيانات باستخدام GROUP BY
GROUP BY
تُستخدم لتجميع البيانات بناءً على قيمة عمود معين، وغالبًا ما تُستخدم مع دوال التجميع.
مثال على التجميع حسب قسم الموظفين:
SELECT department, COUNT(*) AS total_employees FROM employees GROUP BY department;
- يعرض عدد الموظفين في كل قسم.
إضافة شرط مع GROUP BY باستخدام HAVING:
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) > 5000;
- يعرض الأقسام التي يكون متوسط الرواتب فيها أكبر من 5000.
استخدام دوال التجميع (COUNT، SUM، AVG، MIN، MAX)
دوال التجميع تُستخدم لتحليل البيانات المجتمعة.
COUNT (عدد السجلات):
SELECT COUNT(*) AS total_orders FROM orders;
- يعرض العدد الإجمالي للطلبات.
SUM (مجموع القيم):
SELECT SUM(salary) AS total_salary FROM employees;
- يعرض مجموع الرواتب لجميع الموظفين.
AVG (متوسط القيم):
SELECT AVG(salary) AS average_salary FROM employees;
- يعرض متوسط الرواتب.
MIN وMAX (أقل وأعلى قيمة):
SELECT MIN(salary) AS lowest_salary, MAX(salary) AS highest_salary FROM employees;
- يعرض أقل وأعلى راتب بين الموظفين.
الربط بين الجداول باستخدام JOIN
JOIN
تُستخدم لربط بيانات من جداول متعددة بناءً على العلاقات بينها.
INNER JOIN (الربط الداخلي):
يعرض السجلات التي تتطابق في كلا الجدولين.
SELECT employees.name, departments.name AS department_name FROM employees INNER JOIN departments ON employees.department_id = departments.id;
- يعرض أسماء الموظفين وأسماء الأقسام التي يعملون بها.
LEFT JOIN (الربط الأيسر):
يعرض جميع السجلات من الجدول الأول، مع البيانات المتطابقة من الجدول الثاني (إن وُجدت).
SELECT employees.name, departments.name AS department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
- يعرض جميع الموظفين، حتى الذين لا ينتمون إلى قسم.
RIGHT JOIN (الربط الأيمن):
يعرض جميع السجلات من الجدول الثاني، مع البيانات المتطابقة من الجدول الأول (إن وُجدت).
SELECT employees.name, departments.name AS department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.id;
- يعرض جميع الأقسام، حتى الأقسام التي ليس لديها موظفين.
استخدام أكثر من JOIN:
يمكنك ربط أكثر من جدول في استعلام واحد.
SELECT orders.order_id, customers.name AS customer_name, products.name AS product_name FROM orders INNER JOIN customers ON orders.customer_id = customers.id INNER JOIN products ON orders.product_id = products.id;
- يعرض تفاصيل الطلبات مع أسماء العملاء والمنتجات.
باستخدام هذه الاستعلامات المتقدمة، يمكنك استخراج وتحليل البيانات بطريقة أكثر قوة ودقة لتلبية احتياجات المشاريع الكبيرة والمعقدة.