📞 02166056460

دستور SELECT DISTINCT در sql

9 / 10
از 18 کاربر
بازگشت به لیست مقالات » | چهارشنبه 15 مهر 1405 در ساعت 17 و 59 دقیقه | نظرات کاربران ( 8 )

دستور SELECT DISTINCT در SQL چیست و چه کاربردی دارد؟

💡آشنایی با حذف تکرارها
در پایگاه داده، ممکن است یک ستون در چندین رکورد مقدار یکسانی داشته باشد. برای نمونه، چند مشتری می‌توانند در یک شهر یا استان زندگی کنند. اگر با دستور معمولی دستور Select فقط نام آن ستون را بخوانید، مقدارهای تکراری نیز در نتیجه دیده می‌شوند. دستور SELECT DISTINCT در SQL این تکرارها را از خروجی حذف می‌کند و فهرستی از مقدارهای یکتا به شما می‌دهد.
✅ساختار پایه
عبارت DISTINCT بلافاصله پس از واژه SELECT قرار می‌گیرد. سپس نام یک یا چند ستون و در ادامه نام جدول نوشته می‌شود. این عبارت روی نتیجه پرس و جو اثر می‌گذارد، نه روی داده‌های ذخیره شده؛ بنابراین رکوردهای تکراری همچنان در جدول باقی می‌مانند و فقط در خروجی همان پرس و جو نمایش داده نمی‌شوند.
SELECT DISTINCT column_name
FROM table_name;

نحوه عملکرد DISTINCT با یک مثال ساده

📊جدول مشتریان
تصور کنید جدول Customer دارای هزار رکورد است و بیشتر مشتریان در ایالت کالیفرنیا زندگی می‌کنند. اگر ستون State را بدون DISTINCT انتخاب کنید، مقدار CA برای هر رکورد مربوط به آن ایالت تکرار می‌شود. چنین خروجی‌ای برای کسی که فقط فهرست ایالت‌های موجود را می‌خواهد، طولانی و کم کاربرد است.
SELECT State
FROM Customer;
✨نمایش هر مقدار فقط یک بار
با قرار دادن DISTINCT پس از SELECT، پایگاه داده مقدارهای تکراری State را در نتیجه یکی می‌کند. در خروجی، هر کد ایالت فقط یک بار دیده می‌شود؛ بنابراین می‌توانید متوجه شوید چه ایالت‌هایی در جدول مشتریان وجود دارند، بدون آنکه یک مقدار بارها تکرار شود.
SELECT DISTINCT State
FROM Customer;
روش پرس و جو محتوای خروجی کاربرد معمول
SELECT State تمام مقدارهای ستون، از جمله تکراری‌ها بررسی رکوردهای ثبت شده
SELECT DISTINCT State هر مقدار State فقط یک بار تهیه فهرست ایالت‌های موجود

استفاده از DISTINCT برای چند ستون

🔎ترکیب ستون‌ها در تشخیص یکتایی
DISTINCT فقط به یک ستون محدود نیست. می‌توانید چند ستون را در فهرست SELECT قرار دهید تا ترکیب مقدارهای آن ستون‌ها یکتا شود. در این حالت، هر ستون به تنهایی بررسی نمی‌شود؛ کل ترکیب یک ردیف با ترکیب ردیف‌های دیگر مقایسه می‌شود. اگر دست کم یکی از مقدارهای ترکیب متفاوت باشد، ردیف جداگانه در نتیجه باقی می‌ماند.
SELECT DISTINCT State, City
FROM Customer;
⚠️نکته درباره چند ستون
فرض کنید دو مشتری در یک ایالت اما در دو شهر متفاوت باشند. پرس و جوی بالا هر دو ترکیب را نگه می‌دارد، چون مقدار City در آن‌ها برابر نیست. در مقابل، اگر State و City هر دو در دو ردیف یکسان باشند، تنها یک بار در نتیجه دیده می‌شوند. این تفاوت هنگام تحلیل داده‌های مکانی یا دسته بندی اطلاعات اهمیت دارد.

تفاوت DISTINCT و ALL در SQL

ℹ️رفتار پیش فرض SELECT
همتای DISTINCT در این کاربرد، ALL است. ALL به موتور پایگاه داده می‌گوید همه ردیف‌های منطبق را برگرداند، حتی اگر مقدارهای آن‌ها تکراری باشند. این رفتار به طور معمول حالت پیش فرض دستور SELECT است؛ به همین دلیل در بیشتر پرس و جوها لازم نیست ALL را صریحا بنویسید.
SELECT ALL State
FROM Customer;

-- این پرس و جو از نظر نتیجه مانند SELECT State عمل می‌کند
🧭کدام گزینه را انتخاب کنیم؟
اگر برای گزارش یا فهرست، هر مقدار را فقط یک بار نیاز دارید، DISTINCT گزینه مناسب است. اگر هدف شما مشاهده همه ردیف‌ها یا شمارش تعداد تکرارها باشد، از رفتار عادی SELECT استفاده کنید. انتخاب درست به این بستگی دارد که پرس و جو باید مقدارهای یکتا را نشان دهد یا همه رکوردهای واقعی جدول را بازگرداند.

نکات مهم و روش استفاده بهینه از SELECT DISTINCT

۱. DISTINCT داده‌های جدول را حذف نمی‌کند

1
این عبارت فقط نتیجه پرس و جو را یکتا می‌کند و تغییری در جدول اصلی نمی‌دهد. اگر بعدا پرس و جویی بدون DISTINCT اجرا کنید، ردیف‌های تکراری دوباره نمایش داده خواهند شد. بنابراین برای پاک سازی دائمی داده‌ها باید از روش‌های بررسی و اصلاح داده استفاده کنید، نه از DISTINCT.

۲. DISTINCT را با شرط WHERE ترکیب کنید

2
می‌توانید ابتدا با WHERE ردیف‌های مورد نظر را محدود کنید و سپس مقدارهای یکتای باقی مانده را بگیرید. برای نمونه، اگر فقط مشتریان فعال مد نظر باشند، شرط وضعیت را در پرس و جو قرار دهید. به این ترتیب نتیجه هم مرتبط‌تر می‌شود و هم از پردازش داده‌هایی که نیاز ندارید جلوگیری می‌شود.
SELECT DISTINCT State
FROM Customer
WHERE Status = 'Active';

۳. برای شمارش مقدارهای یکتا از COUNT استفاده کنید

3
گاهی به جای دیدن فهرست، تعداد مقدارهای متفاوت لازم است. در بسیاری از سامانه‌های SQL می‌توانید DISTINCT را داخل تابع COUNT قرار دهید تا تعداد مقدارهای یکتای یک ستون محاسبه شود. رفتار مقدارهای NULL و برخی جزئیات تابع ممکن است با نوع پایگاه داده تفاوت داشته باشد؛ بنابراین مستندات سامانه مورد استفاده را هم بررسی کنید.
SELECT COUNT(DISTINCT State) AS UniqueStateCount
FROM Customer;

۴. ترتیب نمایش را جداگانه مشخص کنید

4
DISTINCT به تنهایی ترتیب مشخصی برای نمایش نتیجه تضمین نمی‌کند. اگر خروجی باید بر اساس نام یا مقدار مرتب باشد، از ORDER BY استفاده کنید. مرتب سازی، یکتا سازی و فیلتر کردن هر کدام نقش جداگانه‌ای دارند و ترکیب درست آن‌ها خوانایی گزارش را بهتر می‌کند.
SELECT DISTINCT State
FROM Customer
ORDER BY State;

۵. از استفاده بی دلیل روی داده‌های بزرگ پرهیز کنید

5
برای تشخیص ردیف‌های تکراری، پایگاه داده باید مقدارهای نتیجه را مقایسه کند. در جدول‌های بزرگ یا زمانی که ستون‌های زیادی انتخاب شده‌اند، این کار ممکن است منابع بیشتری مصرف کند. فقط ستون‌هایی را انتخاب کنید که واقعا به آن‌ها نیاز دارید و در صورت کندی، اجرای پرس و جو و طرح اجرای آن را بررسی کنید.

مزایا و محدودیت‌های دستور DISTINCT

جنبه مزیت یا محدودیت توصیه
خوانایی خروجی مقدارهای تکراری را از فهرست حذف می‌کند. برای گزارش فهرست مقادیر موجود استفاده کنید.
داده اصلی رکورد تکراری را از جدول پاک نمی‌کند. برای اصلاح دائمی داده‌ها، راهکار جداگانه به کار ببرید.
کارایی مقایسه مقدارها می‌تواند هزینه پردازشی داشته باشد. ستون‌های غیرضروری را از SELECT حذف کنید.
چند ستون یکتایی بر اساس ترکیب همه ستون‌های انتخاب شده است. ترکیب ستون‌ها را پیش از اجرا بررسی کنید.

خطاهای رایج هنگام استفاده از DISTINCT

⚠️برداشت اشتباه از یکتایی
یکی از اشتباه‌های متداول این است که تصور شود DISTINCT فقط ستون اول را بررسی می‌کند. در واقع، هنگام انتخاب چند ستون، کل ترکیب مقدارهای همان ستون‌ها مبنای مقایسه قرار می‌گیرد. همچنین ممکن است کاربر انتظار داشته باشد این عبارت رکوردهای تکراری جدول را حذف کند؛ در حالی که تغییر فقط در مجموعه نتیجه رخ می‌دهد.
🛠️بررسی نتیجه پیش از استفاده
اگر نتیجه غیرمنتظره است، ابتدا ستون‌های SELECT را بررسی کنید. ممکن است ستونی مانند شناسه مشتری باعث شود هر ردیف همچنان ترکیب متفاوتی داشته باشد و در نتیجه هیچ ردیفی حذف نشود. سپس شرط‌های WHERE و معنای مورد انتظار از «مقدار یکتا» را مرور کنید. این بررسی ساده اغلب علت خروجی نادرست را مشخص می‌کند.

جمع بندی

📌انتخاب درست برای نتیجه‌های خوانا
در نهایت، دستور SELECT DISTINCT در SQL راهی ساده برای نمایش مقدارهای یکتا در خروجی یک پرس و جو است. این دستور برای تهیه فهرست دسته‌ها، شهرها یا وضعیت‌های ثبت شده کاربرد دارد و با چند ستون نیز کار می‌کند؛ اما داده‌های جدول را تغییر نمی‌دهد. با انتخاب ستون‌های لازم، استفاده سنجیده از شرط‌ها و مرتب سازی خروجی، می‌توانید نتیجه‌ای خوانا و کاربردی بسازید. این دقت در کارهای فنی و پروژه‌های طراحی سایت نیز به مدیریت بهتر داده‌ها کمک می‌کند.

سوالات متداول دستور SELECT DISTINCT در SQL

دستور DISTINCT در SQL چه کاری انجام می‌دهد؟

این دستور مقدارهای تکراری را از نتیجه یک پرس و جو حذف می‌کند و هر مقدار یا ترکیب یکتا را فقط یک بار نشان می‌دهد. داده‌های اصلی جدول تغییر نمی‌کنند.

DISTINCT را کجا باید در دستور SELECT بنویسیم؟

واژه DISTINCT بلافاصله پس از SELECT و پیش از نام ستون‌ها قرار می‌گیرد؛ برای نمونه: SELECT DISTINCT State FROM Customer.

آیا DISTINCT با چند ستون هم کار می‌کند؟

بله. در این حالت پایگاه داده ترکیب مقدارهای همه ستون‌های انتخاب شده را مقایسه می‌کند. ردیف‌هایی که ترکیب یکسان دارند یک بار در خروجی می‌آیند.

تفاوت DISTINCT و ALL چیست؟

DISTINCT مقدارهای تکراری را از نتیجه کنار می‌گذارد، اما ALL همه ردیف‌های منطبق را نگه می‌دارد. ALL رفتار پیش فرض SELECT است و معمولا نیازی به نوشتن آن نیست.

آیا DISTINCT رکوردهای تکراری را از جدول پاک می‌کند؟

خیر. DISTINCT فقط نتیجه پرس و جو را یکتا می‌کند و هیچ رکوردی را از جدول حذف یا ویرایش نمی‌کند. برای پاک سازی دائمی داده‌ها باید از روش‌های مناسب مدیریت داده استفاده شود.

ارسال نظر و نظرات ثبت شده
:
31 1
مرسی
:
30 0
با تشکر فراوان خیلی به من کمک کردید. خدا حفظتان کند انشاالله
:
7 0
خیلی ممنون
: :
6 0
ممنون
: :
2 0
دستتون درد نکنه
:
3 0
خیلی خیلی ممنون
:
1 0
ممنون عالي بود
مرتضی :
0 0
عالی بود
سایر مقالات
دستور Delete در sql دستور Delete در sql دستور DELETE در SQL؛ آموزش حذف رکورد از جدول 💡آشنایی با حذف داده‌ها دستور DELETE در ...
دستور Update در sql دستور Update در sql دستور Update در SQL چیست و چه کاربردی دارد؟ 💡آشنایی با به روزرسانی داده ها دستور Update در ...
دستور Insert در sql دستور Insert در sql دستور Insert در اسکیوال دستور Insert در sql برای وارد کردن و ايجاد يک رکورد جديد در جدول ...
دستور مرتب سازی Order By در sql دستور مرتب سازی Order By در sql دستور ORDER BY در SQL چیست و چه کاربردی دارد؟ 💡مرتب سازی خروجی کوئری دستور ORDER BY در SQL ...
دستور Group By در sql دستور Group By در sql دستور Group By در sql از دستور Group By در اسکیوال برای دسته بندی يک ستون بر حسب مقادير مشابه ...
دستور شرطی Having در sql دستور شرطی Having در sql دستور شرطی Having در sql دستور Having در اسکیوال برای افزودن شرط به توابع درون ساخته SQL ...
عملگر های And و Or در SQL عملگر های And و Or در SQL عملگر های And و Or در SQL عملگرهای And و Or برای ترکيب شرط ها در دستور Where در sql استفاده می ...
دستور شرطی WHERE در sql دستور شرطی WHERE در sql دستور شرطی WHERE در sql دستور Where برای اضافه کردن شرط يا شرط هايی جهت محدود کردن نتايج جستجو و یا ...
دستور SELECT DISTINCT در sql دستور SELECT DISTINCT در sql دستور SELECT DISTINCT در SQL چیست و چه کاربردی دارد؟ 💡آشنایی با حذف تکرارها در پایگاه داده، ...
دستور SELECT در sql دستور SELECT در sql دستور SELECT در sql دستور SELECT در اسکیوال برای انتخاب و استخراج اطلاعات مورد نظر از يک ...
⏳ در حال پردازش...
لطفا صبر کنید