البحث والتنقيب والترشيح في SQL


يا هلا بالجميع! اليوم راح نتكلم عن أساسيات الشغل الصح في SQL: كيف نلقى بيانات، كيف نستخرج منها رؤى، وكيف نصفيها عشان نوصل للي نبغاه بالضبط. الموضوع بسيط ومباشر.

1. البحث (Searching)

البحث يعني تدوير على بيانات معينة. الأداة الرئيسية هنا هي جملة SELECT مع WHERE.

SELECT و WHERE

تخيل عندك جدول منتجات وتبغى تشوف كل المنتجات اللي سعرها فوق 100:

SELECT *
FROM منتجات
WHERE السعر > 100;

هنا * يعني جيب كل الأعمدة، و WHERE السعر > 100 هي شرط البحث.

البحث بأنماط (Pattern Matching) مع LIKE

إذا تبغى تبحث عن اسم منتج يبدأ بحرف معين، أو يحتوي على كلمة محددة، LIKE هو الحل. نستخدم معه ٪ (يمثل أي عدد من الأحرف) و _ (يمثل حرف واحد فقط).

مثال: ابحث عن منتجات اسمها يبدأ بـ "جهاز":

SELECT اسم_المنتج
FROM منتجات
WHERE اسم_المنتج LIKE 'جهاز%';

مثال: ابحث عن منتجات اسمها الحرف الثاني فيها "ا":

SELECT اسم_المنتج
FROM منتجات
WHERE اسم_المنتج LIKE '_ا%';

البحث ضمن قائمة أو نطاق (IN, BETWEEN)

لو تبغى تشوف منتجات من تصنيفات معينة، استخدم IN:

SELECT اسم_المنتج, التصنيف
FROM منتجات
WHERE التصنيف IN ('إلكترونيات', 'ملابس');

ولو تبغى تبحث عن أسعار ضمن نطاق معين، BETWEEN أسهل:

SELECT اسم_المنتج, السعر
FROM منتجات
WHERE السعر BETWEEN 50 AND 200;
ملاحظة سريعة: NULL قيم تحتاج معاملة خاصة. عشان تبحث عن قيم NULL أو تتجنبها، استخدم IS NULL أو IS NOT NULL بدلاً من = أو !=.

2. التنقيب (Mining)

التنقيب في SQL يعني استخراج معلومات أو رؤى من البيانات، مو بس جلبها. عادةً هذا يتم عن طريق تجميع البيانات واستخدام دوال التجميع.

تجميع البيانات (GROUP BY)

لو تبغى تعرف كم منتج عندك في كل تصنيف، أو متوسط سعر المنتجات في كل فئة، GROUP BY هو صديقك:

SELECT التصنيف, COUNT(*) AS عدد_المنتجات
FROM منتجات
GROUP BY التصنيف;

هنا، COUNT(*) هي دالة تجميع تحسب عدد الصفوف لكل مجموعة.

تصفية المجموعات (HAVING)

WHERE تصفي الصفوف قبل التجميع. لكن لو تبغى تصفي المجموعات بعد ما تتجمع، استخدم HAVING.

مثال: جيب لي التصنيفات اللي فيها أكثر من 5 منتجات:

SELECT التصنيف, COUNT(*) AS عدد_المنتجات
FROM منتجات
GROUP BY التصنيف
HAVING COUNT(*) > 5;

لاحظ الفرق: WHERE على البيانات الأصلية، HAVING على نتائج GROUP BY.

نصيحة ذهبية: دوال التجميع زي SUM(), AVG(), MIN(), MAX(), COUNT() تعطيك قوة خرافية لاستخلاص الرؤى. استخدمها بحكمة!

3. الترشيح (Filtering)

الترشيح هو عملية تضييق نطاق البيانات اللي تهمك. WHERE هي الأداة الأساسية، لكن فيه أدوات ثانية تخلي الترشيح أقوى.

الشروط المركبة (AND, OR, NOT)

لو عندك أكثر من شرط، AND و OR و NOT يجو ينقذوك:

مثال: منتجات سعرها بين 50 و 200 ومن تصنيف "إلكترونيات":

SELECT *
FROM منتجات
WHERE السعر BETWEEN 50 AND 200
  AND التصنيف = 'إلكترونيات';

مثال: منتجات سعرها أقل من 50 أو من تصنيف "ملابس":

SELECT *
FROM منتجات
WHERE السعر < 50
   OR التصنيف = 'ملابس';

مثال: كل المنتجات ما عدا اللي من تصنيف "أجهزة منزلية":

SELECT *
FROM منتجات
WHERE NOT التصنيف = 'أجهزة منزلية';
-- أو
-- WHERE التصنيف != 'أجهزة منزلية';

النتائج الفريدة (DISTINCT)

لو تبغى قائمة بالتصنيفات الموجودة بدون تكرار:

SELECT DISTINCT التصنيف
FROM منتجات;

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

بعد ما ترشح وتختار، ممكن تبغى تشوف النتائج مرتبة. ORDER BY يرتب تصاعدياً (ASC - افتراضي) أو تنازلياً (DESC).

SELECT اسم_المنتج, السعر
FROM منتجات
WHERE التصنيف = 'إلكترونيات'
ORDER BY السعر DESC; -- من الأغلى للأرخص

تحديد عدد النتائج (LIMIT / TOP)

لو تبغى بس أول 10 منتجات، أو أغلى 5 منتجات، LIMIT (في MySQL/PostgreSQL) أو TOP (في SQL Server) هي الحل:

مثال (MySQL/PostgreSQL):

SELECT اسم_المنتج, السعر
FROM منتجات
ORDER BY السعر DESC
LIMIT 5; -- أغلى 5 منتجات

مثال (SQL Server):

SELECT TOP 5 اسم_المنتج, السعر
FROM منتجات
ORDER BY السعر DESC; -- أغلى 5 منتجات
تذكر: ترتيب العمليات في SQL مهم جداً. FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT/TOP. فهم هذا الترتيب يخليك تكتب استعلامات صحيحة وفعالة.

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