لاستعلام عن البيانات في SQL


يا هلا والله! اليوم بنتكلم عن أساس SQL اللي هو كيف تسحب البيانات. الموضوع سهل وممتع، ركز معي.

لما تبغى تشوف بياناتك اللي مخزنها في قاعدة البيانات، تستخدم أمر SELECT. هذا الأمر هو قلب SQL كله، ومنه تبدأ رحلتك في التعامل مع البيانات.

1. الاستعلام عن كل شي (SELECT *)

إذا تبغى تسحب كل الأعمدة من جدول معين، تستخدم النجمة *. يعني "جب لي كل شي".

SELECT *
FROM اسم_الجدول;

مثال لو عندك جدول اسمه الموظفين، وتبغى تشوف كل بياناتهم:

SELECT *
FROM الموظفين;

2. اختيار أعمدة محددة

في الغالب، ما تحتاج كل الأعمدة. هنا تحدد بالضبط وش تبغى تشوفه. هذا أفضل لأداء قاعدة البيانات.

SELECT العمود_الأول, العمود_الثاني, العمود_الثالث
FROM اسم_الجدول;

مثال: لو تبغى بس اسم الموظف وراتبه من جدول الموظفين:

SELECT اسم_الموظف, الراتب
FROM الموظفين;

3. تصفية البيانات (WHERE)

هنا تبدأ المتعة! WHERE تخليك تسحب بس البيانات اللي تطابق شروط معينة. كأنك تقول "جب لي بس اللي كذا وكذا".

SELECT *
FROM اسم_الجدول
WHERE شرط_التصفية;

أمثلة على الشروط:

  • المساواة: الراتب = 5000
  • عدم المساواة: العمر != 30 (أو <> 30)
  • أكبر من / أصغر من: الراتب > 10000, العمر < 25
  • بين قيمتين: الراتب BETWEEN 5000 AND 10000
  • ضمن قائمة: القسم IN ('IT', 'HR')
  • مطابقة نمط (مهم للبحث عن نصوص): الاسم LIKE 'محمد%' (يبدأ بـ "محمد") أو المدينة LIKE '%جدة%' (تحتوي على "جدة")

و تقدر تجمع الشروط باستخدام AND و OR:

SELECT *
FROM الموظفين
WHERE الراتب > 8000 AND القسم = 'IT';

أو:

SELECT *
FROM الموظفين
WHERE القسم = 'IT' OR القسم = 'HR';

ملاحظة: انتبه لنوع البيانات لما تستخدم WHERE. النصوص حطها بين علامات اقتباس فردية ('نص')، والأرقام لا. التواريخ بعد بين اقتباسات فردية ('2023-01-01').

4. ترتيب النتائج (ORDER BY)

تبغى تشوف البيانات مرتبة؟ ORDER BY هي الحل. تقدر ترتب تصاعدي ASC (وهو الافتراضي) أو تنازلي DESC.

SELECT *
FROM اسم_الجدول
ORDER BY العمود_المطلوب_للترتيب ASC|DESC;

مثال: رتب الموظفين حسب الراتب من الأعلى للأقل:

SELECT اسم_الموظف, الراتب
FROM الموظفين
ORDER BY الراتب DESC;

و تقدر ترتب بأكثر من عمود:

SELECT اسم_الموظف, القسم, الراتب
FROM الموظفين
ORDER BY القسم ASC, الراتب DESC; -- يرتب بالقسم أولاً، ثم الراتب داخل كل قسم

5. سحب عدد معين من النتائج (LIMIT / TOP)

أحياناً ما تحتاج كل النتائج، بس تبغى أول كم صف. هنا يجي دور LIMIT (في MySQL, PostgreSQL, SQLite) أو TOP (في SQL Server).

للمثال (MySQL, PostgreSQL):

SELECT *
FROM اسم_الجدول
LIMIT 10; -- سحب أول 10 صفوف

للمثال (SQL Server):

SELECT TOP 10 *
FROM اسم_الجدول; -- سحب أول 10 صفوف

6. القيم الفريدة (DISTINCT)

لو تبغى تشوف القيم الفريدة بدون تكرار في عمود معين، استخدم DISTINCT.

SELECT DISTINCT العمود
FROM اسم_الجدول;

مثال: عشان تعرف وش الأقسام الموجودة في شركة، بدون تكرار:

SELECT DISTINCT القسم
FROM الموظفين;

7. الدوال التجميعية و GROUP BY

هنا تدخل في عالم الإحصائيات والتقارير. الدوال التجميعية (Aggregate Functions) تحسب لك أشياء زي المجموع، المتوسط، العدد، أكبر قيمة، أصغر قيمة.

  • COUNT(): عدد الصفوف.
  • SUM(): مجموع القيم.
  • AVG(): متوسط القيم.
  • MIN(): أقل قيمة.
  • MAX(): أعلى قيمة.

وغالباً تستخدمها مع GROUP BY عشان تجمع النتائج حسب عمود معين. مثلاً، كم متوسط رواتب كل قسم؟

SELECT القسم, AVG(الراتب) AS متوسط_الراتب, COUNT(*) AS عدد_الموظفين
FROM الموظفين
GROUP BY القسم;

ولو تبغى تصفّي على نتائج GROUP BY نفسها، تستخدم HAVING (مثل WHERE لكن على المجموعات بعد التجميع).

SELECT القسم, AVG(الراتب) AS متوسط_الراتب
FROM الموظفين
GROUP BY القسم
HAVING AVG(الراتب) > 7000; -- الأقسام اللي متوسط رواتبها فوق 7000

وبكذا نكون غطينا أساسيات الاستعلام عن البيانات في SQL. هذي هي اللبنة الأساسية لكل شي بتسويه في قواعد البيانات. طبق الأمثلة وجرب بنفسك عشان تثبت المعلومة. بالتوفيق!