SQL заявката DISTINCT се използва за извличане на уникални стойности от таблиците с помощта на оператора SELECT в SQL.
Може да възникне ситуация, когато искате да извлечете уникалните стойности от таблиците, но дублиращи се стойности също присъстват вътре в таблицата. В такъв случай трябва да използвате заявката SELECT DISTINCT, за да премахнете дублиращи се стойности и да извлечете уникални стойности от таблицата.
Синтаксис на израза SELECT DISTINCT:
SELECT DISTINCT columnname1, columnname2 FROM table_name; Помислете за съществуващите таблици на служителите, които имат следните записи:
| ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
| 1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
| 1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
| 1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
| 2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
| 2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
| 2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
| 3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
| 3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
| 3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
| 4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
| 4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
| 4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ | ORACLE | 1 |
| 5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ | ТЕСТВАНЕ | 4 |
Нека разберем SELECT DISTINCT с помощта на пример.
Пример 1: Напишете заявка, за да извлечете подробности за служителите, чиято заплата на служителите е по-голяма от 55 000, без да използвате ключовата дума DISTINCT.
SELECT * FROM EMPLOYEES WHERE SALARY > 55000; В горното изявление извлечехме данните за служителя от таблицата на служителя, чиято заплата на служителя е по-голяма от 55 000, включително дублиращите се стойности.
Резултатът за следния израз:
| ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
| 1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
| 1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
| 2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
| 2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
| 3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
| 3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
| 4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
| 4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ | ORACLE | 1 |
| 5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ | ТЕСТВАНЕ | 4 |
Резултатът по-горе показва, че сме избрали подробностите за служителите, включително дублиращи се стойности.
Пример 2: Напишете заявка за показване на заплатата на служителите от таблицата на служителите, чиято заплата на служителите е по-голяма от 55 000, като използвате ключова дума DISTINCT.
SELECT DISTINCT (SALARY) FROM EMPLOYEES WHERE SALARY > 55000; В горното изявление ние извличаме заплатата на служителя от таблицата на служителя, чиято заплата е по-голяма от 55 000, където елиминираме дублиращите се стойности. Отделната заплата ще показва уникална заплата от таблицата на служителя.
Резултатът за следния израз:
| ЗАПЛАТА |
| 65000 |
| 60000 |
| 55500 |
| 65500 |
| 58500 |
| 60500 |
В първия пример извадихме данните за служителите, чиято заплата е по-голяма от 55 000. Резултатът от заявката включва дублиращи се стойности. Но във втория пример изпълняваме същата заявка за показване на заплата на служител, чиято заплата е по-голяма от 55 000. Заявката показва резултата, елиминирайки дублиращите се стойности, защото използвахме ключовата дума DISTINCT, последвана от колоната за заплата.
Пример 3: Напишете заявка за показване на града и заплатата на служителите от таблицата на служителите, без да използвате отделна ключова дума.
SELECT SALARY, CITY FROM EMPLOYEES; Показахме заплатата на служителя и името на града от таблицата на служителя в горната декларация, включително дублиращи се стойности.
Резултатът за следния израз:
| ЗАПЛАТА | ГРАД |
| 65500 | ПУНА |
| 60000 | NOIDA |
| 50500 | ДЖАЙПУР |
| 55500 | ЧАНДИГАР |
| 65500 | ПУНА |
| 50 000 | МУМБАЙ |
| 55500 | ПУНА |
| 50500 | ДЖАЙПУР |
| 58500 | МУМБАЙ |
| 60500 | МУМБАЙ |
| 54500 | NOIDA |
| 60000 | ДЕЛХИ |
| 55500 | ДЕЛХИ |
Пример 4: Напишете заявка за показване на града и заплатата на служителите от таблицата на служителите, като използвате различни ключови думи.
ИЗБЕРЕТЕ РАЗЛИЧНА ЗАПЛАТА, ГРАД ОТ СЛУЖИТЕЛИТЕ;
Извадихме заплатата и града на служителите от таблицата на служителите в горното изявление. Но ние извлечехме уникална стойност, която не се повтаря в цялата таблица с помощта на ключовата дума DISTINCT.
Резултатът за следния израз:
| ЗАПЛАТА | ГРАД |
| 65500 | ПУНА |
| 60000 | NOIDA |
| 50500 | ДЖАЙПУР |
| 55500 | ЧАНДИГАР |
| 50 000 | МУМБАЙ |
| 55500 | ПУНА |
| 58500 | МУМБАЙ |
| 60500 | МУМБАЙ |
| 54500 | NOIDA |
| 60000 | ДЕЛХИ |
| 55500 | ДЕЛХИ |
Пример 5: Напишете заявка за показване на фамилия и отдел на служител от таблицата на служителя, където името на отдела започва с „O“, без да използвате ключовата дума DISTINCT;
SELECT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%'; В горното изявление извлечехме фамилни имена на служители, отдели от таблицата на служителите на тези служители, чиито имена на отдели започват с „O“, включително дублиращи се стойности.
Резултатът за следния израз:
| LAST_NAME | ОТДЕЛ |
| МИШРА | ORACLE |
| ШАРМА | ORACLE |
| ШАРМА | ORACLE |
| AGARWAL | ORACLE |
Показват се само четири записа за тези служители, чийто отдел започва с „O“.
Пример 6: Напишете заявка за показване на фамилия и отдел на служител от таблицата на служителя, където името на отдела започва с „O“, като използвате ключовата дума DISTINCT;
SELECT DISTINCT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%'; Използвахме същата заявка в пример 5, просто добавихме ключовата дума DISTINCT точно преди името на колони, която ще показва уникални стойности от таблицата на служителя, чието име на отдел започва с „O“.
Резултатът за следния израз:
| LAST_NAME | ОТДЕЛ |
| МИШРА | ORACLE |
| ШАРМА | ORACLE |
| AGARWAL | ORACLE |
Същата заявка, която изпълнихме в горната заявка, добавихме ключовата дума DISTINCT точно преди колони. Резултатът, който получаваме, се различава от горния пример, защото показването на резултата има уникални стойности.
Пример 7: Напишете заявка за преброяване на заплатата на служителите от таблицата на служителите, без да използвате отделна ключова дума.
SELECT COUNT (SALARY) AS TOTAL SALARY FROM EMPLOYEES; В горното изявление сме преброили общия брой заплати от таблицата на служителя, включително дублиращи се стойности.
Резултатът за следния израз:
| ОБЩА ЗАПЛАТА |
| 13 |
Пример 8: Напишете заявка за преброяване на заплатата на служителите от таблицата на служителите, като използвате отделна ключова дума.
SELECT COUNT(DISTINCT SALARY) AS TOTAL SALARY FROM EMPLOYEES; В горното изявление сме преброили общия брой заплати от таблицата на служителя, с изключение на дублиращи се стойности.
Резултатът за следния израз:
| ОБЩА ЗАПЛАТА |
| 8 |