SQL SELECT IN е логически оператор в езика за структурирани заявки. Използва се в SQL заявки, за да се намали използването на множество оператори „ИЛИ“. s
Операторът IN в SQL също позволява лесно да се тества дали условието съответства на всяка стойност в списък със стойности. Намалява броя на операторите ИЛИ в SQL заявките.
Синтаксис на оператор IN в SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (VALUE1, VALUE2);
Синтаксис на подзаявка на оператор IN в SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (SELECT STATEMENT);
В горния синтаксис можем да използваме IN оператор и с подзаявка.
Нека разберем концепцията на SQL SELECT IN с помощта на примери.
Помислете за следните таблици, които имат следните записи:
Таблица 1:Служители
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# | 5 |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# | 5 |
3001 | ПРАНОТИ | ШЕНДЕ | 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 |
Таблица 2:Мениджър
Managerid | име_на_мениджър | мениджърски отдел |
1 | Снехдип Каур | ORACLE |
2 | Кирти Киртане | FMW |
3 | Абхишек Маниш | JAVA |
4 | Анупам Мишра | ТЕСТВАНЕ |
5 | Акаш Кадам | C# |
Пример 1: Напишете заявка, за да извлечете идентификатора на служителя, собственото име, фамилията и града от таблицата на служителя, където град включва един от списъците е Мумбай, Пуна и Делхи в таблицата.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, CITY FROM EMPLOYEES WHERE CITY IN ('MUMBAI', 'PUNE', 'DELHI');
В горното изявление извлечехме идентификатора на служителя, име и фамилия и град от таблицата на служителя, където град включва едно от имената на градовете, Мумбай, Пуна и Делхи. Всички тези имена на градове се предават като параметър в оператора IN като стойности. Таблицата ще се отнася за всички онези записи, чиито градове на служителите съвпадат със списъка с градове на оператора IN.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ГРАД |
1001 | VAIBHAVI | МИШРА | ПУНА |
2002 | BHAVESH | ДЖЕЙН | ПУНА |
2003 | РУЧИКА | ДЖЕЙН | МУМБАЙ |
3001 | PRANOTI | ШЕНДЕ | ПУНА |
3003 | DEEPAM | ДЖАУХАРИ | МУМБАЙ |
4001 | РАДЖЕШ | GOUD | МУМБАЙ |
4003 | РУЧИКА | AGARWAL | ДЕЛХИ |
5001 | АРХИТ | ШАРМА | ДЕЛХИ |
Показва само осем служители, чиито имена на градове съвпадат със списъка с параметри на оператора IN.
Пример 2: Напишете заявка, за да извлечете идентификатора на служителя, собственото име, фамилията, заплатата и отдела от таблицата на служителя, където заплатата включва един от списъците е 50500, 55500 и 65500 в таблицата.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT FROM EMPLOYEES WHERE SALARY IN (50500, 55500, 65500);
В горното изявление извлечехме идентификатора на служителя, име и фамилия, заплата и отдел от таблицата на служителя, където заплатата включва една от заплатите са 50500, 55500 и 65500. Всички тези заплати се предават като параметър в IN оператор като стойности. Таблицата ще включва всички онези записи, чиито заплати на служителите съвпадат със списъка със заплати за параметри на IN оператора.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ОТДЕЛ |
1001 | VAIBHAVI | МИШРА | 65500 | ORACLE |
1003 | НИХИЛ | VANI | 50500 | FMW |
2001 | PRACHI | ШАРМА | 55500 | ORACLE |
2002 | BHAVESH | ДЖЕЙН | 65500 | FMW |
3001 | PRANOTI | ШЕНДЕ | 55500 | JAVA |
3002 | ANUJA | WANRE | 50500 | FMW |
5001 | АРХИТ | ШАРМА | 55500 | ТЕСТВАНЕ |
Показва само седем служители, чиято заплата съответства на списъка с параметри на оператора IN.
Пример 3: Напишете заявка, за да извлечете идентификационния номер на служителя, собственото име, фамилията, заплатата и града от служители, при които заплатата на служителите е по-голяма от 60 000 или градът на служителите включва един от списъците с градове е „Мумбай“, „Пуна“ и „Джайпур“ в таблицата.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY > 60000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
В горното изявление извлечехме идентификатор на служител, собствено име, фамилия, заплата и град от таблицата на служителите, където заплатата на служителите е по-голяма от 60 000 или градът на служителите включва един от този списък с градове е „Мумбай“, „Пуна“, „ Джайпур“. Първата част на клаузата SELECT WHERE е SALARY> 60000 и последната част е CITY IN ('PUNE', 'MUMBAI', 'JAIPUR'), тъй като използвахме оператор ИЛИ, резултатът ще бъде и от двете условия.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ |
Той показва само осем записа от таблицата, чиято заплата е по-голяма от 60 000 или имената на градовете съвпадат със списъка с параметри на оператора IN.
Пример 4: Напишете заявка за извличане на идентификатор на служител, заплата, град и отдел от таблицата на служителите, където отделът за служители включва един от списъците е „Oracle“, „FMW“, а също така град включва един от списъците „Делхи“, „Noida“, „Пуна“.
SELECT EMPLOYEEID, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW') AND CITY IN ('PUNE', 'NOIDA', 'DELHI');
Извлечехме идентификатора на служителя, заплатата, града и отдела от таблицата на служителя в горното изявление. Отделът на служителите включва един от списъците с отдели, предадени на параметъра IN оператор. Градът на служителите включва един от списъците с градове, предадени на параметъра на оператора IN, а резултатът включва само тези данни за служителите, които отговарят на двете условия.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | ЗАПЛАТА | ГРАД | ОТДЕЛ |
1001 | 65500 | ПУНА | ORACLE |
2002 | 65500 | ПУНА | FMW |
4003 | 60 000 | ДЕЛХИ | ORACLE |
Има само три записа от таблицата на служителите, чийто град на служителите включва Пуна, Делхи и Нойда, а отделът включва Oracle, FMW.
Пример 5: Напишете заявка за извличане на идентификационен номер на служител, собствено име, фамилия, заплата, град и отдел от таблицата на служителя, където заплатата на служителя е по-голяма от 60 000 и град включва един от списъците в Пуна, Джайпур, Мумбай или департамент включва един от списъци е Java, Testing, C#.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE SALARY > 60000 AND CITY IN ('PUNE', 'MUMBAI', 'JAIPUR') OR DEPARTMENT IN ('JAVA', 'TESTING', 'C#');
В горния израз използвахме оператор OR, оператор AND и оператор множествен IN с оператора SELECT, за да извлечем идентификатора на служителя, собственото име, фамилията, заплатата, града и отдела от таблицата на служителя. Заявката SELECT първо извлича записите на служителите, където заплата> 60 000 И City IN („Пуна“, „Мумбай“, Джайпур), само тези служители. И двете условия са верни и в края на отдел IN ('Java', 'Testing', 'C#'), тази заявка ще търси в първата фаза резултат, че тези записи на служителите, които извлечехме, имат отделен един от списъците, които сме предали на IN оператор и също така отидете на останалите записи в таблицата, ако са открити записи с име на отдел, което сме предали на параметъра IN оператор, този запис ще бъде добавен към резултата.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA |
5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ | ТЕСТВАНЕ |
Има само 9 записа на служители, чиято заплата е по-голяма от 60 000. City включва един от списъците, които сме предали като параметър на оператора City IN или Отдел включва един от списъците, които сме предали на оператора Department IN.
Пример 6: Напишете подзаявка, за да извлечете подробности за служителите от таблицата на служителите, където managerid е по-голям от 2 от таблицата на мениджъра.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGERID > 2);
В горния израз първата подзаявка ще бъде изпълнена ИЗБЕРЕТЕ МЕНИДЖЕРИД ОТ МЕНИДЖЕР, КЪДЕ МЕНИДЖЕРИД> 2; изходът ще бъде идентификатор на мениджър, който е по-голям от 2 прохода като параметър в клаузата WHERE на основната заявка, а крайният изход ще бъде от таблицата на служителите, където идентификаторът на служител-мениджър включва един от списъците, който е резултатът от подзаявка.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ | ТЕСТВАНЕ | 4 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# | 5 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# | 5 |
Има само седем записа от таблицата на служителя, чийто идентификационен номер на мениджър е по-голям от 2.
Пример 7: Напишете подзаявка, за да получите подробности за служителя, където мениджърският отдел включва един от списъците е oracle, java и FMW.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGER_DEPARTMENT IN ('ORACLE', 'FMW', 'JAVA'));
В горното изявление първо извличаме идентификатора на мениджъра от таблицата на мениджъра, където мениджърският отдел включва един от списъците е Oracle, FMW, Java. Тогава основната заявка ще извлече подробности за служителя от изхода на подзаявката.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Пример 8: Напишете заявка, за да извлечете идентификатор на служител, собствено име, фамилия, заплата, град от таблицата на служителя, където заплатата е между 50000 и 65000 или град включва един от списъците е Пуна, Джайпур и Мумбай.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY BETWEEN 50000 AND 65000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
В горното изявление извадихме идентификационния номер на служителя, собственото име, фамилията, заплатата и града от таблицата на служителя, където заплатата на служителя между 50 000 и 65 000 или градът включва един от списъците е Пуна, Мумбай, Джайпур.
Изход:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA |
4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ |
5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ |