SQL SELECT IN jest operatorem logicznym w Structured Query Language. Jest używany w zapytaniach SQL w celu zmniejszenia użycia wielu operatorów 'OR'. s
Operator IN w SQL pozwala również na łatwe testowanie, czy warunek pasuje do dowolnej wartości z listy wartości. Zmniejsza liczbę operatorów OR w zapytaniach SQL.
Składnia operatora IN w SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (VALUE1, VALUE2);
Składnia podzapytania operatora IN w SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (SELECT STATEMENT);
W powyższej składni możemy również użyć operatora IN z podzapytaniem.
Rozumiemy koncepcję SQL SELECT IN za pomocą przykładów.
Rozważ następujące tabele, które zawierają następujące zapisy:
Tabela 1:Pracownicy
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | WYROCZNIA | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOWANIE | 4 |
Tabela 2:Menedżer
Identyfikator menedżera | nazwa_menedżera | manager_department |
1 | Snehdeep Kaur | WYROCZNIA |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTOWANIE |
5 | Akasz Kadam | C# |
Przykład 1: Napisz zapytanie, aby pobrać identyfikator pracownika, imię, nazwisko i miasto z tabeli pracownika, przy czym miasto zawiera jedną z list w tabeli:Mumbai, Pune i Delhi.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, CITY FROM EMPLOYEES WHERE CITY IN ('MUMBAI', 'PUNE', 'DELHI');
W powyższym oświadczeniu pobraliśmy identyfikator pracownika, imię i nazwisko oraz miasto z tabeli pracowników, gdzie miasto zawiera jedną z nazw miasta, Mumbai, Pune i Delhi. Wszystkie te nazwy miast są przekazywane jako parametr w operatorze IN jako wartości. W tabeli zostaną uwzględnione wszystkie rekordy, których miasta pracowników są zgodne z listą miast parametru operatora IN.
Wyjście:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | MIASTO |
1001 | VAIBHAVI | MISHRA | PUNE |
2002 | PRZYJMUJ SIĘ | JAIN | PUNE |
2003 | RUCHIKA | JAIN | MUMBAJ |
3001 | PRANOTI | SHENDE | PUNE |
3003 | DEEPAM | JAUHARI | MUMBAJ |
4001 | RAJESH | GOUD | MUMBAJ |
4003 | RUCHIKA | AGARWAL | DELHI |
5001 | ARCHIT | SHARMA | DELHI |
Pokazuje tylko ośmiu pracowników, których nazwy miast pasują do listy parametrów wyrażenia operatora IN.
Przykład 2: Napisz zapytanie, aby pobrać identyfikator pracownika, imię, nazwisko, wynagrodzenie i dział z tabeli pracownika, gdzie wynagrodzenie zawiera jedną z list to 50500, 55500 i 65500 w tabeli.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT FROM EMPLOYEES WHERE SALARY IN (50500, 55500, 65500);
W powyższym zestawieniu pobraliśmy identyfikator pracownika, imię i nazwisko, wynagrodzenie i dział z tabeli pracownika, gdzie wynagrodzenie zawiera jedną z pensji to 50500, 55500 i 65500. Wszystkie te pensje są przekazywane jako parametr w Operator IN jako wartości. W tabeli zostaną uwzględnione wszystkie rekordy, których pensje pracowników są zgodne z listą wynagrodzeń parametru operatora IN.
Wyjście:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | DZIAŁ |
1001 | VAIBHAVI | MISHRA | 65500 | WYROCZNIA |
1003 | NIKHIL | VANI | 50500 | FMW |
2001 | PRACI | SHARMA | 55500 | WYROCZNIA |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | FMW |
3001 | PRANOTI | SHENDE | 55500 | JAVA |
3002 | ANUJA | WANRE | 50500 | FMW |
5001 | ARCHIT | SHARMA | 55500 | TESTOWANIE |
Pokazuje tylko siedmiu pracowników, których wynagrodzenie odpowiada liście parametrów wyrażenia operatora IN.
Przykład 3: Napisz zapytanie, aby pobrać identyfikator pracownika, imię, nazwisko, wynagrodzenie i miasto od pracowników, dla których wynagrodzenie pracownika jest większe niż 60000 lub miasto pracownika zawiera jedną z list miast to „Mumbai”, „Pune” i „Jaipur” w tabeli.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY > 60000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
W powyższym oświadczeniu pobraliśmy identyfikator pracownika, imię, nazwisko, wynagrodzenie i miasto z tabeli pracowników, w której wynagrodzenie pracownika jest większe niż 60000 lub miasto pracownika zawiera jedno z tych miast to „Mumbai”, „Pune”, „ Jaipur”. Pierwsza część instrukcji SELECT WHERE to SALARY> 60000 a ostatnia część to CITY IN („PUNE”, „MUMBAI”, „JAIPUR”), ponieważ użyliśmy operatora OR, wynik będzie pochodził z obu warunków.
Wyjście:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ |
4001 | RAJESH | GOUD | 60500 | MUMBAJ |
Pokazuje tylko osiem rekordów z tabeli, których wynagrodzenie jest większe niż 60000 lub nazwy miast pasują do listy parametrów wyrażenia operatora IN.
Przykład 4: Napisz zapytanie, aby pobrać identyfikator pracownika, wynagrodzenie, miasto i dział z tabeli pracowników, w której dział pracowników zawiera jedną z list to „Oracle”, „FMW”, a także miasto zawiera jedną z list to „Delhi”, „Noida”, „Pune”.
SELECT EMPLOYEEID, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW') AND CITY IN ('PUNE', 'NOIDA', 'DELHI');
Pobraliśmy identyfikator pracownika, wynagrodzenie, miasto i dział z tabeli pracownika w powyższym zestawieniu. Dział pracowniczy zawiera jedną z list działów przekazanych do parametru operatora IN. Miasto pracownika zawiera jedną z list miast przekazanych do parametru operatora IN, a wynik zawiera tylko te dane pracownika, które spełniają oba warunki.
Wyjście:
ID PRACOWNIKA | WYNAGRODZENIE | MIASTO | DZIAŁ |
1001 | 65500 | PUNE | WYROCZNIA |
2002 | 65500 | PUNE | FMW |
4003 | 60000 | DELHI | WYROCZNIA |
W tabeli Employees są tylko trzy rekordy, których miasto pracownika obejmuje Pune, Delhi i Noida, a dział obejmuje Oracle, FMW.
Przykład 5: Napisz zapytanie, aby pobrać identyfikator pracownika, imię, nazwisko, wynagrodzenie, miasto i departament z tabeli pracownika, w której wynagrodzenie pracownika jest większe niż 60000, a miasto zawiera jedną z list w Pune, Jaipur, Bombaju lub departament zawiera jedną z list to 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#');
W powyższej instrukcji użyliśmy operatora OR, operatora AND i wielu operatorów IN z instrukcją SELECT w celu pobrania identyfikatora pracownika, imienia, nazwiska, wynagrodzenia, miasta i działu z tabeli pracownika. Zapytanie SELECT najpierw pobiera rekordy pracowników, w których wynagrodzenie> 60000 AND City IN („Pune”, „Mumbai”, Jaipur), tylko ci pracownicy. Oba warunki są prawdziwe, a na końcu działu IN („Java”, „Testowanie”, „C#”) to zapytanie wyszuka w pierwszej fazie, że te rekordy pracowników, które pobraliśmy, mając dział jedną z list, które przekazaliśmy do Operator IN, a także przejdź do pozostałych rekordów w tabeli, jeśli jakiekolwiek znalezione rekordy z nazwą działu przekazaliśmy do parametru operatora IN, który zostanie dodany do wyniku.
Wyjście:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOWANIE |
Istnieje tylko 9 rekordów pracowników, których wynagrodzenie przekracza 60000. Miasto zawiera jedną z list, które przekazaliśmy jako parametr operatorowi City IN lub Department zawiera jedną z list, które przekazaliśmy operatorowi Department IN.
Przykład 6: Napisz podzapytanie, aby pobrać dane pracownika z tabeli pracowników, w której identyfikator menedżera jest większy niż 2 z tabeli menedżerów.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGERID > 2);
W powyższym oświadczeniu pierwsze podzapytanie zostanie wykonane SELECT MANAGERID FROM MANAGER WHERE MANAGERID> 2; wyjściem będzie identyfikator menedżera, który jest większy niż 2, jako parametr w klauzuli WHERE głównego zapytania, a końcowym wynikiem będzie tabela pracowników, w której identyfikator pracownika-kierownika zawiera jedną z list, która jest wynikiem podzapytania.
Wyjście:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOWANIE | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# | 5 |
Jest tylko siedem rekordów z tabeli pracownika, którego identyfikator kierownika jest większy niż 2.
Przykład 7: Napisz podzapytanie, aby pobrać dane pracownika, w którym dział kierownika zawiera jedną z list, czyli wyrocznię, javę i FMW.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGER_DEPARTMENT IN ('ORACLE', 'FMW', 'JAVA'));
W powyższym oświadczeniu najpierw pobieramy identyfikator menedżera z tabeli menedżerów, w której dział menedżera zawiera jedną z list to Oracle, FMW, Java. Następnie główne zapytanie pobierze dane pracownika z wyniku podzapytania.
Wyjście:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA | 1 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
Przykład 8: Napisz zapytanie, aby pobrać identyfikator pracownika, imię, nazwisko, wynagrodzenie, miasto z tabeli pracownika, gdzie wynagrodzenie wynosi od 50000 do 65000 lub miasto zawiera jedną z list Pune, Jaipur i Mumbai.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY BETWEEN 50000 AND 65000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
W powyższym oświadczeniu pobraliśmy identyfikator pracownika, imię, nazwisko, pensję i miasto z tabeli pracownika, w której wynagrodzenie pracownika wynosi od 50000 do 65000 lub miasto zawiera jedną z list to Pune, Mumbai, Jaipur.
Wyjście:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ |
4001 | RAJESH | GOUD | 60500 | MUMBAJ |
4002 | ASHWINI | TORBA | 54500 | NOIDA |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI |
5001 | ARCHIT | SHARMA | 55500 | DELHI |