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 |