SQL - کار با SELECT DISTINCT در دیتابیس
توی این مقاله، میخوایم در باره نحوه کار SELECT DISTINCT
حرف بزنیم. این دستور رو وقتی به کار میبریم که بخوایم ردیف های تکراری رو از نتیجه حذف کنیم. توضیحش همینقدر کوتاه و راحته. حالا بیاین ببینیم چطوری کدشو بزنیم.
مقدمه ای بر SELECT DISTINCT
در واقع DISTINCT
توی SELECT
استفاده میشه و همونطور که گفتم، ردیف های تکراری رو از نتیجه Query
حذف می کنه.
DISTINCT
فقط یک ردیف رو از هر گروه تکراری نگه میداره. همچنین میتونه روی یک و یا چندین ستون توی دستور SELECT
اعمال بشه.
دستور DISTINCT
توی SELECT
به شکل زیر هست:
SELECT
DISTINCT column1
FROM
table_name;
در نتیجه اجرای این دستور، ستون column1
هیچ مقدار تکراری ای نخواهد داشت.
اگه بیش از یک ستون رو برای DISTINCT
انتخاب کنیم، نتیجه های تکراری برای مجموع دو ستون حذف میشه.
برای استفاده DISTINCT
در بیش از یک ستون، دستور به شکل زیر خواهد بود:
SELECT
DISTINCT column1, column2
FROM
table_name;
در نتیجه این دستور، مجموع محتوای دو ستون column1
و column2
یونیک خواهند بود. یعنی شاید توی column1
موارد تکراری ببینیم ( و یا توی column2
)، ولی مجموع column1
و column2
تکرار نمیشن.
مثال هایی از SELECT DISTINCT
بیاین یه جدول درست کنیم و یک سری اطلاعات توش بریزیم تا نتیجه رو ببینیم پس اول ساخت جدول ( توی MySql
):
CREATE TABLE `distinct_demo` (
`id` int NOT NULL,
`bcolor` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`fcolor` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
و در ادامه اطلاعات نمونرو واردش کنیم:
INSERT INTO `distinct_demo` (`id`, `bcolor`, `fcolor`) VALUES
(13, 'red', 'red'),
(14, 'red', 'red'),
(15, 'red', NULL),
(16, NULL, 'red'),
(17, 'red', 'green'),
(18, 'red', 'blue'),
(19, 'green', 'red'),
(20, 'green', 'blue'),
(21, 'green', 'green'),
(22, 'blue', 'red'),
(23, 'blue', 'green'),
(24, 'blue', 'blue');
اسم جدولمون distinct_demo
هست که سه ستون داره id
که کلید اصلی و خودش یکی یکی عددش زیاد میشه. دوتای بعدی bcolor
و fcolor
هستن. توشون هم اطلاعاتی رو ریختیم تا تست کنیم.
حالا بیاین اول یه Query
ساده بگیریم که اطلاعات توی جدول رو بهمون نشون بده:
SELECT
id,
bcolor,
fcolor
FROM
distinct_demo ;
و در نتیجه چیزی که خواهیم داشت به شکل زیر هست:
دستور DISTINCT
روی یک ستون:
دستور زیر اطلاعات یونیک رو از ستون bcolor توی جدول distinct_demo انتخاب می کنه و در نهایت این اطلاعات رو بر اساس حروف الفبا مرتب میکنه و نشون میده:
SELECT
DISTINCT bcolor
FROM
distinct_demo
ORDER BY
bcolor;
نتیجه به شکل زیر خواهد بود:
دستور DISTINCT
روی بیش از یک ستون:
دستور زیر نحوه اعمال DISTINCT
روی چند ستون رو نشون میده:
SELECT
DISTINCT bcolor,
fcolor
FROM
distinct_demo
ORDER BY
bcolor,
fcolor;
و نتیجه به شکل زیر خواهد بود:
همونطور که میبینین، چون ما دو ستون bcolor
و fcolor
رو برای DISTINCT
انتخاب کردیم، مجموع اطلاعات هر ردیف یونیک هست. به همین راحتی.
پس استفاده از DISTINCT
توی SELECT
برای مواقعی هست که میخوایم اطلاعات برگشتی، یونیک باشه. مثلا فرض کنین توی جدول بالا، بخوایم ببینیم چند نوع رنگ توی ستون bcolor
قرار داره. برای این کار، باید چه Query
بگیریم؟
توی کامنت برام بنویسین ;)