الدرس 13

القيم المميزة DISTINCT

📚 الوحدة الثانية: الاستعلامات الأساسية ⏱️ 12 دقيقة 📗 مبتدئ

ما هو DISTINCT؟

DISTINCT كلمة مفتاحية تُستخدم مع SELECT لإزالة الصفوف المكررة من نتائج الاستعلام وإرجاع القيم الفريدة فقط.

تخيل أن لديك جدول طلبات يحتوي على عمود للبلد. إذا أردت معرفة "ما هي الدول التي طلب منها العملاء؟" بدون تكرار، تستخدم DISTINCT.

💡 متى تستخدم DISTINCT؟
  • استخراج قائمة الفئات المتاحة في المتجر
  • معرفة الدول التي يتواجد فيها العملاء
  • الحصول على قائمة الأقسام في الشركة
  • إيجاد القيم الفريدة لأي عمود

الصيغة الأساسية

SELECT DISTINCT column_name
FROM table_name;

أمثلة عملية

المثال 1: استخراج القيم الفريدة من عمود واحد

لنفترض لدينا جدول orders التالي:

id customer country amount
1أحمدالسعودية500
2سارةالإمارات300
3محمدالسعودية750
4فاطمةمصر200
5عليالإمارات600
6نورالسعودية400

بدون DISTINCT:

SELECT country FROM orders;

النتيجة: السعودية، الإمارات، السعودية، مصر، الإمارات، السعودية (6 صفوف مع تكرار)

مع DISTINCT:

SELECT DISTINCT country FROM orders;
country
السعودية
الإمارات
مصر

المثال 2: DISTINCT مع عدة أعمدة

عند استخدام DISTINCT مع عدة أعمدة، تُعتبر الصفوف فريدة بناءً على مجموع قيم كل الأعمدة.

-- جدول employees
SELECT DISTINCT department, city
FROM employees;

هذا سيُرجع كل مجموعة فريدة من (القسم + المدينة). مثلاً: (المبيعات، الرياض) و (المبيعات، جدة) يُعتبران صفين مختلفين.

المثال 3: COUNT مع DISTINCT

لمعرفة عدد القيم الفريدة، ندمج DISTINCT مع COUNT:

-- كم عدد الدول المختلفة للعملاء؟
SELECT COUNT(DISTINCT country) AS unique_countries
FROM orders;
unique_countries
3

DISTINCT مقابل GROUP BY

قد يبدو أن DISTINCT و GROUP BY يفعلان نفس الشيء، لكن هناك فروقات:

📊 الفرق الأساسي
  • DISTINCT: لإزالة التكرار فقط
  • GROUP BY: لإزالة التكرار + تطبيق دوال التجميع (SUM, COUNT, etc.)
-- هذان الاستعلامان يعطيان نفس النتيجة
SELECT DISTINCT country FROM orders;
SELECT country FROM orders GROUP BY country;

-- لكن GROUP BY يمكنه فعل أكثر:
SELECT country, COUNT(*) AS order_count
FROM orders
GROUP BY country;

التعامل مع NULL

DISTINCT يعتبر جميع قيم NULL متساوية - أي سيظهر NULL مرة واحدة فقط في النتيجة.

-- إذا كان لدينا موظفون بدون قسم (NULL)
SELECT DISTINCT department
FROM employees;

-- النتيجة ستحتوي NULL مرة واحدة فقط

اعتبارات الأداء

⚠️ تنبيه للأداء
  • DISTINCT يتطلب فرز البيانات أو استخدام hash، مما قد يؤثر على الأداء
  • تجنب استخدام SELECT DISTINCT * على جداول كبيرة
  • استخدم DISTINCT فقط عندما تحتاجه حقاً
  • إذا كانت البيانات أصلاً فريدة (مثل PRIMARY KEY)، لا حاجة لـ DISTINCT

تمرين عملي

🎯 تمرين سهل

اكتب استعلام SQL لاستخراج الفئات الفريدة من جدول products

💡 تلميح: استخدم SELECT DISTINCT column_name FROM table_name

اختبر معلوماتك

📝 أسئلة سريعة

1. ما هي وظيفة DISTINCT في SQL؟

2. كيف نحسب عدد القيم الفريدة؟

3. عند استخدام DISTINCT مع عدة أعمدة، كيف يُحدد التكرار؟

الخلاصة

📌 النقاط الأساسية
  • DISTINCT يُزيل الصفوف المكررة من النتائج
  • يمكن استخدامه مع عمود واحد أو عدة أعمدة
  • COUNT(DISTINCT col) يحسب عدد القيم الفريدة
  • جميع قيم NULL تُعتبر متساوية
  • استخدمه بحذر على الجداول الكبيرة لاعتبارات الأداء

هل أكملت قراءة الدرس وفهمت DISTINCT؟