0Pricing
SQL Academy · درس

أساسيات SELECT DISTINCT

أعد الصفوف الفريدة فقط

أساسيات SELECT DISTINCT درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

سبب حدوث التكرارات

غالبًا ما تحتوي الجداول على قيم متكررة. فقد يسرد جدول customers المدينة نفسها في آلاف الصفوف. وعندما تهتم فقط بمجموعة القيم الفريدة، يُرجع SELECT العادي كل صف، بما في ذلك التكرارات.

تجمع SELECT DISTINCT الصفوف المتطابقة في صف واحد. في هذا الدرس ستتعلّم أساسيات إرجاع النتائج الفريدة فقط.

SELECT city FROM customers;
-- Returns one row per customer, with many repeated cities

الكلمة المفتاحية DISTINCT

تأتي DISTINCT مباشرةً بعد SELECT. وهي تزيل الصفوف المكررة من مجموعة النتائج، مع الإبقاء على نسخة واحدة فقط من كل تركيبة فريدة من الأعمدة المحددة.

SELECT DISTINCT city
FROM customers;
-- One row per unique city

يُطبَّق DISTINCT على الصف بأكمله

من المفاهيم الخاطئة الشائعة أن DISTINCT يُطبَّق على عمود واحد. لكنه في الواقع يُطبَّق على الصف المحدد بأكمله. ويشارك كل عمود تدرجه في تحديد ما إذا كان صفان مكررين.

في المثال أدناه، تُزال التكرارات وفق قيمة city فقط، لأنها العمود المحدد الوحيد.

SELECT DISTINCT country
FROM customers;
-- Unique countries across all customers

بيانات نموذجية

لنفترض وجود جدول orders صغير. لاحظ قيم status وcountry المتكررة. سنستخدم هذا الشكل طوال الدرس.

  • id=1, status='paid', country='US'
  • id=2, status='paid', country='US'
  • id=3, status='shipped', country='DE'
  • id=4, status='paid', country='DE'
CREATE TABLE orders (
  id         int PRIMARY KEY,
  status     text,
  country    text,
  amount     numeric(10,2)
);

عمود واحد فريد

يُرجع تحديد DISTINCT status من البيانات النموذجية قيمتي الحالة الفريدتين: paid وshipped. وتتحول الصفوف الأربعة إلى صفين.

SELECT DISTINCT status
FROM orders;
-- paid
-- shipped

تُعامل NULL كقيمة واحدة

على الرغم من أن NULL لا يساوي عادةً أي شيء، ولا حتى نفسه، فإن DISTINCT يعامل جميع قيم NULL كمجموعة واحدة. فإذا احتوى عمود على العديد من الصفوف التي قيمتها NULL، فستحصل على قيمة NULL واحدة بالضبط في النتيجة الفريدة.

SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL row

استخدام DISTINCT مع ORDER BY

غالبًا ما تريد ترتيب القيم الفريدة. يعمل DISTINCT أولًا لبناء المجموعة الفريدة، ثم يرتبها ORDER BY. ويجب أن يظهر أي عمود في ORDER BY أيضًا في قائمة SELECT عند استخدام DISTINCT.

SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- US

DISTINCT مقارنةً بـ GROUP BY

ينتج عن SELECT DISTINCT col وSELECT col GROUP BY col الصفوف الفريدة نفسها. استخدم DISTINCT عندما تريد القيم الفريدة فقط، واستخدم GROUP BY عندما تحتاج أيضًا إلى دوال تجميع مثل COUNT لكل مجموعة.

-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;

SELECT country FROM orders
GROUP BY country;

استخدام DISTINCT له تكلفة

إزالة التكرارات ليست بلا تكلفة. إذ يجب على قاعدة البيانات ترتيب جميع الصفوف المرشحة أو تجزئتها للعثور على الصفوف الفريدة. ويضيف ذلك في الجداول الكبيرة عبئًا على وحدة المعالجة المركزية والذاكرة، لذا لا تطلب DISTINCT إلا عندما تحتاج فعلًا إلى نتائج فريدة.

-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders;  -- id is already unique

استخدام DISTINCT في التعبيرات

يمكنك تطبيق DISTINCT على تعبير محسوب، وليس على عمود خام فقط. تقيّم قاعدة البيانات التعبير لكل صف، ثم تزيل التكرارات من النتائج.

SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- US

إنشاء قائمة بحث

من الاستخدامات العملية لـ DISTINCT ملء قائمة منسدلة أو قائمة تصفية في تطبيق: استرداد الحالات الفريدة لعرض كل خيار ممكن موجود حاليًا في البيانات للمستخدم.

SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shipped

تحقق سريع

أين توضع الكلمة المفتاحية DISTINCT، وما الذي تزيل تكراره؟

مراجعة

تعلّمت أساسيات SELECT DISTINCT:

  • تزيل الصفوف المكررة من مجموعة النتائج.
  • تُطبَّق على الصف المحدد بأكمله، وليس على عمود واحد.
  • تُجمع جميع قيم NULL في قيمة واحدة.
  • تعمل ORDER BY بعد إزالة التكرارات، ويجب أن تكون أعمدتها محددة.
  • تتطلب عملًا إضافيًا، لذا لا تستخدمها إلا عند الحاجة.

التالي: توسيع نطاق DISTINCT ليشمل عدة أعمدة.

SELECT DISTINCT status
FROM orders
ORDER BY status;

الأسئلة الشائعة

هل درس «أساسيات SELECT DISTINCT» مجاني؟

نعم — نص درس «أساسيات SELECT DISTINCT» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «أساسيات SELECT DISTINCT»؟

أعد الصفوف الفريدة فقط تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أساسيات SELECT DISTINCT»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات SELECT DISTINCT
  2. DISTINCT على أعمدة متعددة
  3. DISTINCT ON في PostgreSQL
  4. عدّ القيم الفريدة
← العودة إلى SQL Academy