SQL SELECT IN je logický operátor v jazyce Structured Query Language. Používá se v dotazech SQL ke snížení použití více operátorů 'OR'. s
Operátor IN v SQL také umožňuje snadno testovat shodu podmínky s jakoukoli hodnotou v seznamu hodnot. Snižuje počet operátorů OR v dotazech SQL.
Syntaxe operátoru IN v SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (VALUE1, VALUE2);
Syntaxe poddotazu operátoru IN v SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (SELECT STATEMENT);
Ve výše uvedené syntaxi můžeme použít operátor IN také s poddotazem.
Pojďme pochopit koncept SQL SELECT IN pomocí příkladů.
Zvažte následující tabulky, které mají následující záznamy:
Tabulka 1:Zaměstnanci
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60 000 | DELHI | ORACLE | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOVÁNÍ | 4 |
Tabulka 2:Správce
Managerid | název_manažera | manažer_oddělení |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTOVÁNÍ |
5 | Akash Kadam | C# |
Příklad 1: Napište dotaz pro získání ID zaměstnance, křestního jména, příjmení a města z tabulky zaměstnance, kde Město obsahuje jeden ze seznamů v tabulce Bombaj, Pune a Dillí.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, CITY FROM EMPLOYEES WHERE CITY IN ('MUMBAI', 'PUNE', 'DELHI');
Ve výše uvedeném prohlášení jsme získali ID zaměstnance, jméno a příjmení a město z tabulky zaměstnance, kde Město obsahuje jeden z názvů měst, Bombaj, Pune a Dillí. Všechna tato jména měst jsou předávána jako parametr v operátoru IN jako hodnoty. Tabulka bude obsahovat všechny záznamy, jejichž města zaměstnanců odpovídají seznamu měst operátora IN.
Výstup:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | MĚSTO |
1001 | VAIBHAVI | MISHRA | PUNE |
2002 | BHAVESH | JAIN | PUNE |
2003 | RUCHIKA | JAIN | MUMBAI |
3001 | PRANOTI | SHENDE | PUNE |
3003 | DEEPAM | JAUHARI | MUMBAI |
4001 | RAJESH | GOUD | MUMBAI |
4003 | RUCHIKA | AGARWAL | DELHI |
5001 | ARCHIT | SHARMA | DELHI |
Zobrazuje pouze osm zaměstnanců, jejichž názvy měst odpovídají seznamu parametrů výrazu operátora IN.
Příklad 2: Napište dotaz pro získání ID zaměstnance, jména, příjmení, platu a oddělení z tabulky zaměstnance, kde plat obsahuje jeden ze seznamů v tabulce je 50500, 55500 a 65500.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT FROM EMPLOYEES WHERE SALARY IN (50500, 55500, 65500);
Ve výše uvedeném příkazu jsme získali ID zaměstnance, jméno a příjmení, plat a oddělení z tabulky zaměstnance, kde plat zahrnuje jeden z platů 50500, 55500 a 65500. Všechny tyto platy jsou předány jako parametr v Operátor IN jako hodnoty. Tabulka bude obsahovat všechny záznamy, jejichž mzdy zaměstnanců odpovídají seznamu platů operátora IN.
Výstup:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | ODDĚLENÍ |
1001 | VAIBHAVI | MISHRA | 65500 | ORACLE |
1003 | NIKHIL | VANI | 50500 | FMW |
2001 | PRACHI | SHARMA | 55500 | ORACLE |
2002 | BHAVESH | JAIN | 65500 | FMW |
3001 | PRANOTI | SHENDE | 55500 | JAVA |
3002 | ANUJA | WANRE | 50500 | FMW |
5001 | ARCHIT | SHARMA | 55500 | TESTOVÁNÍ |
Zobrazuje pouze sedm zaměstnanců, jejichž plat odpovídá seznamu parametrů výrazu operátora IN.
Příklad 3: Napište dotaz pro získání ID zaměstnance, křestního jména, příjmení, platu a města od zaměstnanců, jejichž plat je vyšší než 60 000 nebo město zaměstnance obsahuje jeden ze seznamů měst „Bombaj“, „Pune“ a „Džajpur“ v tabulce.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY > 60000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
Ve výše uvedeném prohlášení jsme získali ID zaměstnance, jméno, příjmení, plat a město z tabulky zaměstnanců, kde je plat zaměstnance vyšší než 60 000 nebo město zaměstnance zahrnuje jedno z tohoto seznamu měst je „Bombaj“, „Pune“, „ Jaipur'. První část klauzule SELECT WHERE je SALARY> 60 000 a poslední část je CITY IN ('PUNE', 'MUMBAI', 'JAIPUR'), protože jsme použili operátor OR, výsledek bude z obou podmínek.
Výstup:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI |
4001 | RAJESH | GOUD | 60500 | MUMBAI |
Zobrazuje pouze osm záznamů z tabulky, jejichž plat je vyšší než 60 000 nebo názvy měst odpovídají seznamu parametrů výrazu operátora IN.
Příklad 4: Napište dotaz pro získání ID zaměstnance, platu, města a oddělení z tabulky zaměstnanců, kde oddělení zaměstnanců obsahuje jeden ze seznamů je 'Oracle', 'FMW' a také město obsahuje jeden ze seznamů je 'Dillí', 'Noida', 'Pune'.
SELECT EMPLOYEEID, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW') AND CITY IN ('PUNE', 'NOIDA', 'DELHI');
Získali jsme ID zaměstnance, plat, město a oddělení z tabulky zaměstnance ve výše uvedeném prohlášení. Oddělení zaměstnanců zahrnuje jeden ze seznamů oddělení předávaných parametru operátor IN. Město zaměstnance zahrnuje jeden ze seznamů měst předaný parametru operátoru IN a výsledek zahrnuje pouze ty údaje zaměstnance, které splňují obě podmínky.
Výstup:
ID ZAMĚSTNANCE | PLAT | MĚSTO | ODDĚLENÍ |
1001 | 65500 | PUNE | ORACLE |
2002 | 65500 | PUNE | FMW |
4003 | 60 000 | DELHI | ORACLE |
Existují pouze tři záznamy z tabulky Zaměstnanci, jejichž město zaměstnanců zahrnuje Pune, Dillí a Noida a oddělení zahrnuje Oracle, FMW.
Příklad 5: Napište dotaz pro získání ID zaměstnance, jména, příjmení, platu, města a oddělení z tabulky zaměstnance, kde je plat zaměstnance vyšší než 60 000 a město obsahuje jeden ze seznamů v Pune, Jaipur, Mumbai nebo oddělení obsahuje jeden z seznamy je 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#');
Ve výše uvedeném příkazu jsme použili operátor OR, operátor AND a vícenásobný operátor IN s příkazem SELECT k načtení ID zaměstnance, jména, příjmení, platu, města a oddělení z tabulky zaměstnance. Dotaz SELECT nejprve načte záznamy zaměstnanců, kde plat> 60 000 AND City IN ('Pune', 'Bombaj', Jaipur), pouze tito zaměstnanci. Obě podmínky jsou splněny a na konci oddělení IN ('Java', 'Testing', 'C#') tento dotaz v první fázi vyhledá, že záznamy o zaměstnancích, které jsme získali, mají oddělení jeden ze seznamů, které jsme předali operátor IN a také přejděte na zbytek záznamů v tabulce, pokud byly nalezeny nějaké záznamy s názvem oddělení, které jsme předali parametru operátoru IN, tento záznam bude přidán k výsledku.
Výstup:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | C# |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | C# |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOVÁNÍ |
Existuje pouze 9 záznamů o zaměstnancích, jejichž plat je vyšší než 60 000. Město obsahuje jeden ze seznamů, které jsme předali jako parametr operátorovi City IN, nebo Department obsahuje jeden ze seznamů, které jsme předali operátorovi oddělení IN.
Příklad 6: Napište dílčí dotaz pro získání podrobností o zaměstnancích z tabulky zaměstnanců, kde je managerid větší než 2 z tabulky manažerů.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGERID > 2);
Ve výše uvedeném příkazu se provede první dílčí dotaz SELECT MANAGERID FROM MANAGER WHERE MANAGERID> 2; výstupem bude ID manažera, které je větší než 2 průchody jako parametr v klauzuli hlavního dotazu WHERE, a konečný výstup bude z tabulky zaměstnanců, kde ID zaměstnance-manažera obsahuje jeden ze seznamů, který je výstupem dílčího dotazu.
Výstup:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOVÁNÍ | 4 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | C# | 5 |
Existuje pouze sedm záznamů z tabulky zaměstnance, jejichž ID manažera je větší než 2.
Příklad 7: Napište dílčí dotaz pro získání podrobností o zaměstnanci, kde manažerské oddělení obsahuje jeden ze seznamů Oracle, Java a FMW.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGER_DEPARTMENT IN ('ORACLE', 'FMW', 'JAVA'));
Ve výše uvedeném příkazu nejprve načteme ID manažera z tabulky manažerů, kde oddělení manažerů obsahuje jeden ze seznamů Oracle, FMW, Java. Poté hlavní dotaz načte podrobnosti o zaměstnanci z výstupu dílčího dotazu.
Výstup:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60 000 | DELHI | ORACLE | 1 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Příklad 8: Napište dotaz pro získání ID zaměstnance, jména, příjmení, platu, města z tabulky zaměstnance, kde je plat mezi 50 000 a 65 000, nebo město zahrnuje jeden ze seznamů je Pune, Jaipur a Mumbai.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY BETWEEN 50000 AND 65000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
Ve výše uvedeném prohlášení jsme získali ID zaměstnance, jméno, příjmení, plat a město z tabulky zaměstnance, kde plat zaměstnance mezi 50 000 a 65 000 nebo město zahrnuje jeden ze seznamů je Pune, Mumbai, Jaipur.
Výstup:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI |
4001 | RAJESH | GOUD | 60500 | MUMBAI |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA |
4003 | RUCHIKA | AGARWAL | 60 000 | DELHI |
5001 | ARCHIT | SHARMA | 55500 | DELHI |