دستور Select Distinct در SQL

دستور Select Distinct در SQL

نوشته شده توسط: تیم فنی نیک آموز
۰۱ شهریور ۱۴۰۰
زمان مطالعه: 20 دقیقه
۵
(۱)

معرفی SQL Select Distinct

SQL، در واقع زبانی است که برای برقراری ارتباط با جداول پایگاه داده استفاده می‌ شود. طبق ANSI یا انستیتوی ملی آمریکا، SQL زبان استاندارد برای سیستم‌ های مدیریت پایگاه داده ‌ی رابطه ‌ای است. دستورات SQL برای انجام کار‌هایی مانند بروزرسانی داده‌ ها در پایگاه داده‌ ها یا بازیابی داده‌ ها از پایگاه داده استفاده می ‌شود. برخی از سیستم ‌های مدیریت پایگاه داده ‌ی رابطه ‌ای متداول که از SQL استفاده می‌ کنند عبارتند از Microsoft، Sybase، Access، SQL Server و غیره. اگر چه بیش ‌تر سیستم‌ های پایگاه داده از SQL استفاده می ‌کنند، اکثر آن ‌ها یک سری تعمیم‌ ها و توسعه ‌های اختصاصی و اضافی مخصوص به خود را نیز دارند که به طور معمول فقط در سیستم‌ های خودشان مورد استفاده قرار می ‌گیرد.

با این حال، دستورات استاندارد SQL مانند Select، Insert، Update، Delete، Create و Drop می‌ توانند برای انجام تقریبا تمام کار‌هایی که یک فرد می ‌تواند با یک پایگاه داده انجام دهد، مورد استفاده قرار گیرند. علاوه بر این‌ ها کلمات کلیدی بسیاری در SQL وجود دارد. یکی از آن‌ ها، کلمه ‌ی کلیدی DISTINCT است. از کلمه‌ ی کلیدی DISTINCT در SQL، برای استخراج رکورد‌های منحصر به فرد از جدول پایگاه داده استفاده می ‌شود. این کلمه‌ی کلیدی معمولا همراه با کلمه‌ ی SELECT استفاده می‌ شود.

از دستور SELECT، به طور کلی برای استخراج رکورد‌های مورد نظر از جدول پایگاه داده استفاده می ‌شود. و از کلمه ‌ی کلیدی DISTINCT برای حذف رکورد‌های تکراری و استخراج رکورد‌های یکتا استفاده می‌ شود. علاوه بر این، می‌ تواند همراه با توابعی مانند AVG، MAX، MIN، SUM، COUNT و غیره نیز استفاده شود. استفاده از دستور SELECT DISTINCT، زمانی خیلی مفید است که جداول حاوی مقادیر تکراری بسیار زیادی باشند و فقط به رکورد‌های منحصر به فرد نیاز باشد. به طور مثال، در یک سناریوی مربوط به کسب و کار، وقتی می ‌خواهیم تعداد مشتر‌ی‌ های متمایز و همینطور مکان ‌های سفارش متمایز را داشته باشیم، استفاده از این دستور کمک کننده خواهد بود.
اگر می‌ خواهید بیش ‌تر با دستور SELECT DISTINCT و پارامتر‌ها و کاربرد‌‌های مربوط به آن آشنا شوید، در ادامه‌ ی مقاله با ما همراه باشید.

دستور SQL Select Distinct و پارامتر‌های آن

دستور اصلی برای نوشتن SELECT DISTINCT در SQL به شرح زیر است:

SELECT DISTINCT column_name1, column_name2,...
FROM table_name;

 
پارامتر‌های استفاده شده در دستور بالا عبارت است از:

  • column_name1, column_name2,..: این‌ ها ستون‌ هایی هستند که می‌ خواهید از آن‌ ها استخراج مجموعه ‌ی داده‌ ی مورد نظر خود را انجام دهید.
  • table_name: این پارامتر، نام جدولی است که از ستون‌ های مربوط به آن، در فرایند استخراج رکورد‌های مورد نظر استفاده می‌ شود.

عملکرد Select به همراه کلمه ‌ی کلیدی Distinct در SQL چگونه است؟

همانطور که گفته شد، کلید‌واژه‌ی DISTINCT در SQL، مقادیر تکراری را فیلتر می‌ کند. برای ساده‌ سازی فهم عملکرد آن، در ادامه مطالبی را توضیح می ‌دهیم. SELECT DISTINCT، ابتدا مجموعه نتایج کلی به همراه تمامی رکورد‌ها را ایجاد می ‌کند که شامل مقادبر تکراری با توجه به استفاده از عبارات FROM، JOIN، WHERE، HAVING و عبارات دیگر است. سپس مجموعه نتایج را بر اساس column_name یا هر فیلد دیگری مرتب می‌ کند و در نهایت عملیات de-duplication انجام می‌ گیرد؛ به این معنا که مقادیر تکراری از مجموعه نتایج کلی حذف می ‌شود.
دستور SELECT DISTINCT را می‌ توان از نظر معنایی معادل با GROUP BY که همه ‌ی فیلد‌های مورد نظر در مقابل آن ذکر می‌ شود، در نظر گرفت. بعد از صحبت در مورد دستور SELECT DISTINCT و نحوه‌ ی عملکرد آن، در بخش بعدی مثال ‌هایی را برای درک درست ‌تر مفاهیم گفته شده، خواهید دید.

نمونه ‌هایی از دستور Select  Distinct در SQL

به منظور نشان دادن عملکرد کلید واژه ‌ی SQL DISTINCT با یک مثال، یک جدول پایگاه داده‌ ی ساختگی به نام customers ایجاد می ‌کنیم. بدین منظور از کد زیر استفاده می ‌کنیم

CREATE TABLE public.customers
(
customer_id integer NOT NULL,
sale_date date NOT NULL,
sale_amount numeric NOT NULL,
salesperson character varying(255),
store_state character varying(255),
order_id character varying(255)

 اکنون، جدول مورد نظر با موفقیت ایجاد شد. در گام بعدی، تعدادی رکورد به جدول اضافه می‌ کنیم تا بتوانیم با آن ‌ها کار کنیم.

INSERT INTO public.customers(
customer_id, sale_date, sale_amount, salesperson, store_state, order_id)
VALUES (1001,'2020-05-23',1200,'Raj K','KA','1001'),
(۱۰۰۱,'۲۰۲۰-۰۵-۲۲',۱۲۰۰,'M K','NULL','1002'),
(۱۰۰۲,'۲۰۲۰-۰۵-۲۳',۱۲۰۰,'Malika Rakesh','MH','1003'),
(۱۰۰۳,'۲۰۲۰-۰۵-۲۲',۱۵۰۰,'Malika Rakesh','MH','1004'),
(۱۰۰۱,'۲۰۲۰-۰۵-۲۳',۱۳۲۰,'Dave Peter','MH','1005'),
(۱۰۰۲,'۲۰۲۰-۰۵-۲۱',۱۲۰۰,'Molly Samberg','NY','1001'),
(۱۰۰۴,'۲۰۲۰-۰۵-۲۲',۱۲۱۰,'M K','NULL','1003');

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

SELECT * FROM customers;

در ادامه قصد داریم چندین مثال را با استفاده از کلمه ‌ی کلیدی DISTINCT همراه با SELECT امتحان کنیم.
مثال اول
می‌ خواهیم شناسه‌ ی مشتری همه‌ی مشتری ‌های منحصر به فرد را که چیزی از فروشگاه خریداری یا سفارش داده‌ اند را پیدا کنیم. پس از قطعه کد زیر استفاده می ‌کنیم.

SELECT DISTINCT customer_id
FROM customers;

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

SELECT DISTINCT sale_date
FROM customers

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

SELECT DISTINCT store_state
FROM customers
ORDER BY store_state ASC;

خروجی مورد نظر در تصویر زیر قابل مشاهده است.نکته‌ی مهم در مورد مقادیر NULL و کلمه‌ ی کلیدی این است که DISTINCT به اولین NULL اجازه‌ی حضور در مجموعه ‌ی نتایج نهایی را می ‌دهد ولی تمام مقادیر بعدی NULL را حذف می‌ کند. این نکته را می‌ توانید در همین مثال نیز مشاهده کنید. در ستون store_state، دو مقدار NULL وجود داشت، اما استفاده از DISTINCT
باعث شده است که فقط یک NULL را در مجموعه نتایج نهایی داشته باشیم.
مثال چهارم
در این مثال قصد داریم تمام سفارش‌ های منحصر به فرد را که در یک تاریخ خاص در فروشگاه انجام شده است را پیدا کنیم. قطعه کد زیر را به این منظور استفاده می‌ کنیم.

SELECT DISTINCT sale_date,
salesperson,
order_id,
store_state
FROM customers
ORDER BY sale_date;

خروجی مورد نظر بر أساس این کد را در تصویر پایین مشاهده می ‌کنید.مثال پنجم
اگر بخواهیم مجموع درآمد، برای کلیه ‌ی سفارش ‌های منحصر به فرد که در یک تاریخ خاص در یک مغازه‌ی خاص فروشگاه انجام شده را پیدا کنیم، با کمک دستور SELECT DISTINCT به نتایج زیر می ‌رسیم.

SELECT DISTINCT sale_date, store_state,
sum(sale_amount) as total_sales
FROM customers
GROUP BY store_state, sale_date
ORDER BY sale_date ASC;

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

SELECT DISTINCT customer_id,
sum(sale_amount) as total_sales
FROM customers
GROUP BY customer_id
ORDER BY customer_id ASC;

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

SELECT DISTINCT salesperson
FROM customers;

 در تصویر زیر، خروجی دستور استفاده شده را می‌بینید.

دستور Select Count Distinct

تابع SELECT COUNT DISTINCT، تعداد سطر‌هایی که با یک معیار مشخص مطابقت دارند، برمی ‌گرداند. مثالی از این دستور و خروجی را در ادامه خواهید دید

SELECT COUNT(DISTINCT EmpId) FROM EmpDetail

دستور Select AVG Distinct

تابع SELECT AVG DISTINCT ، مقداز میانگین یا متوسط یک ستون عددی را برمی ‌گرداند. در ادامه مثال و خروجی این دستور را می ‌بینید

SELECT AVG(DISTINCT EmpId)
FROM EmployeeDetail
WHERE EmpId= EmpId

دستور Select MAX Distinct

تابع SELECT MAX DISTINCT، بیش ‌ترین مقدار ستون انتخاب شده را برمی‌ گرداند. در ادامه به مثال و خروجی توجه کنید.

SELECT MAX(DISTINCT EmpId)
FROM EmployeeDetail
WHERE EmpId= EmpId

جمع‌ بندی

SQL یا Structured Query Language، ‌یک زبان برنامه‌ نویسی و پرس‌ و‌‌‌ جو است که برای پرس ‌و ‌جو از پایگاه داده‌ ها مورد استفاده قرار می‌ گیرد. ما در این مقاله در مورد کلمه ‌ی کلیدی DISTINCT صحبت کردیم و گفتیم هنگامی که به داده‌ های غیر تکراری نیاز داریم، از کلمه‌ ی کلیدیDISTINCT  استفاده می ‌کنیم. پارامتر‌های مختلفی در هنگام استفاده از کلمه‌ ی کلیدی DISTINCT استفاده می ‌شود. Column Name، Conditional، Table Name و WHERE از جمله این آرگومان‌ ها هستند که بسته به نیاز به سراغ آن‌ ها می‌ رویم و رکورد‌های مورد نظر خود را از جداول پایگاه داده استخراج می‌ کنیم.
پس در مجموع می‌ توان گفت دستور Select Distinct به ما این امکان را می ‌دهد که داده‌ های منحصر به فرد و کاملا یکتا را را استخراج کنیم و همچنین تعداد این داده ‌ها را با استفاده از کلمه ‌ی کلیدی COUNT به دست آوریم. از این امر می ‌توانیم برای پیش‌ پردازش داده ‌ها، بررسی کلی داده‌ ها و درک و فهم نقاط بسیار مهم داده‌ ها استفاده کنیم چرا که با استفاده از این دستور، فقط داده‌ های منحصر به فرد را در نظر می ‌گیریم.

مقاله ‌های پیشنهادی

این متن، یک راهنمای کلی برای SQL SELECT DISTINCT بود. ما به معرفی دستور SELECT DISTINCT و مثال‌ های عملی و subquery‌ های مختلف پرداختیم. پیشنهاد ما این است برای کسب اطلاعات بیش ‌تر، این مقالات را نیز مرور کنید.

  1. Top 5 Examples of SQL Server Substring
  2. Overview of Triggers in SQL
  3. Introduction to SQL Arithmetic Operators
  4. ANY in SQL | Examples | Syntax

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۱

اولین نفر باش

title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
172 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
پروفایل نویسنده
title sign
دیدگاه کاربران