SQL SELECT IN is een logische operator in Structured Query Language. Het wordt gebruikt in SQL-query's om het gebruik van meerdere 'OF'-operators te verminderen. s
De IN-operator in SQL maakt het ook mogelijk om eenvoudig te testen of de voorwaarde overeenkomt met elke waarde in een lijst met waarden. Het vermindert het aantal OR-operators in SQL-query's.
Syntaxis van IN-operator in SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (VALUE1, VALUE2);
Subquerysyntaxis van IN-operator in SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (SELECT STATEMENT);
In de bovenstaande syntaxis kunnen we de IN-operator ook met subquery's gebruiken.
Laten we het SQL SELECT IN-concept begrijpen aan de hand van voorbeelden.
Beschouw de volgende tabellen die de volgende records hebben:
Tabel 1:Medewerkers
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | 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 | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORAKLE | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTEN | 4 |
Tabel 2:Beheerder
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORAKLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTEN |
5 | Akash Kadam | C# |
Voorbeeld 1: Schrijf een zoekopdracht om het werknemers-ID, de voornaam, de achternaam en de stad op te halen uit de tabel van de werknemer, waarbij de stad een van de lijsten Mumbai, Pune en Delhi in de tabel bevat.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, CITY FROM EMPLOYEES WHERE CITY IN ('MUMBAI', 'PUNE', 'DELHI');
In de bovenstaande verklaring hebben we het werknemers-ID, de voor- en achternaam en de stad opgehaald uit de tabel van de werknemer, waar stad een van de plaatsnamen Mumbai, Pune en Delhi bevat. Al deze namen van steden worden als een parameter in de IN-operator doorgegeven als waarden. De tabel geldt voor al die records waarvan de steden van de werknemers overeenkomen met de lijst met steden van de IN-operatorparameter.
Uitvoer:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | STAD |
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 |
Het toont slechts acht werknemers wiens plaatsnamen overeenkomen met de parameterlijst van de IN-operatorexpressie.
Voorbeeld 2: Schrijf een zoekopdracht om het werknemers-ID, de voornaam, de achternaam, het salaris en de afdeling op te halen uit de tabel van de werknemer waarbij het salaris een van de lijsten 50500, 55500 en 65500 in de tabel bevat.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT FROM EMPLOYEES WHERE SALARY IN (50500, 55500, 65500);
In de bovenstaande verklaring hebben we het werknemers-ID, de voor- en achternaam, het salaris en de afdeling opgehaald uit de tabel van de werknemer waar het salaris een van de salarissen 50500, 55500 en 65500 omvat. Al deze salarissen worden doorgegeven als een parameter in de IN-operator als waarden. De tabel geldt voor al die records waarvan de salarissen van de werknemers overeenkomen met de salarislijst van de IN-operatorparameter.
Uitvoer:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | AFDELING |
1001 | VAIBHAVI | MISHRA | 65500 | ORAKLE |
1003 | NIKHIL | VANI | 50500 | FMW |
2001 | PRACHI | SHARMA | 55500 | ORAKLE |
2002 | BHAVESH | JAIN | 65500 | FMW |
3001 | PRANOTI | SHENDE | 55500 | JAVA |
3002 | ANUJA | WANRE | 50500 | FMW |
5001 | ARCHIT | SHARMA | 55500 | TESTEN |
Het toont slechts zeven werknemers van wie het salaris overeenkomt met de parameterlijst van de IN-operatorexpressie.
Voorbeeld 3: Schrijf een zoekopdracht om het werknemers-ID, de voornaam, de achternaam, het salaris en de stad op te halen van werknemers waarvan het salaris van de werknemer hoger is dan 60000 of de stad van de werknemer een van de stedenlijsten bevat is 'Mumbai', 'Pune' en 'Jaipur' in de tabel.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY > 60000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
In de bovenstaande verklaring hebben we werknemers-ID, voornaam, achternaam, salaris en stad opgehaald uit de werknemerstabel waar het werknemerssalaris groter is dan 60000 of de stad van de werknemer een van deze stedenlijst bevat is 'Mumbai', 'Pune', ' Jaipur'. Het eerste deel van de SELECT-instructie WHERE-clausule is SALARY> 60000 en het laatste deel is CITY IN ('PUNE', 'MUMBAI', 'JAIPUR'), zoals we de OR-operator hebben gebruikt, is het resultaat van beide voorwaarden.
Uitvoer:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI |
4001 | RAJESH | GOUD | 60500 | MUMBAI |
Er worden slechts acht records uit de tabel weergegeven waarvan het salaris hoger is dan 60000 of waarvan de plaatsnamen overeenkomen met de parameterlijst van de IN-operatorexpressie.
Voorbeeld 4: Schrijf een query om werknemer-ID, salaris, stad en afdeling op te halen uit de werknemerstabel waar de werknemersafdeling een van de lijsten bevat is 'Oracle', 'FMW' en ook de stad bevat een van de lijsten is 'Delhi', 'Noida', 'Pune'.
SELECT EMPLOYEEID, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW') AND CITY IN ('PUNE', 'NOIDA', 'DELHI');
We hebben de werknemers-ID, het salaris, de plaats en de afdeling opgehaald uit de tabel van de werknemer in de bovenstaande verklaring. De medewerkersafdeling bevat een van de afdelingslijsten die zijn doorgegeven aan de IN-operatorparameter. De plaats van de werknemer bevat een van de stedenlijsten die zijn doorgegeven aan de parameter IN-operator, en het resultaat bevat alleen de details van de werknemer die aan beide voorwaarden voldoen.
Uitvoer:
WERKNEMER-ID | SALARIS | STAD | AFDELING |
1001 | 65500 | PUNE | ORAKLE |
2002 | 65500 | PUNE | FMW |
4003 | 60000 | DELHI | ORAKLE |
Er zijn slechts drie records uit de tabel Werknemers waarvan de werknemersstad Pune, Delhi en Noida omvat, en de afdeling Oracle, FMW.
Voorbeeld 5: Schrijf een zoekopdracht om de werknemers-ID, voornaam, achternaam, salaris, stad en afdeling op te halen uit de tabel van de werknemer waar het salaris van de werknemer hoger is dan 60000 en de stad een van de lijsten in Pune, Jaipur, Mumbai of de afdeling bevat een van de lijsten is 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#');
In de bovenstaande verklaring hebben we OR-operator, AND-operator en meerdere IN-operatoren met de SELECT-instructie gebruikt om het werknemers-ID, de voornaam, de achternaam, het salaris, de stad en de afdeling uit de tabel van de werknemer op te halen. De SELECT-query haalt eerst de werknemersrecords op waar salaris> 60000 AND City IN ('Pune', 'Mumbai', Jaipur), alleen die werknemers. Beide voorwaarden zijn waar, en aan het einde van Afdeling IN ('Java', 'Testing', 'C#'), zal deze zoekopdracht in de eerste fase zoeken naar het resultaat dat de werknemersrecords die we hebben opgehaald met Afdeling een van de lijsten die we hebben doorgegeven aan de IN-operator en ga ook voor de rest van de records in de tabel als er records zijn gevonden met de afdelingsnaam die we hebben doorgegeven aan de IN-operatorparameter die record wordt toegevoegd aan het resultaat.
Uitvoer:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORAKLE |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C# |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTEN |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTEN |
Er zijn slechts 9 records van werknemers met een salaris van meer dan 60000. Stad bevat een van de lijsten die we als parameter hebben doorgegeven aan de City IN-operator of Department bevat een van de lijsten die we hebben doorgegeven aan de Department IN-operator.
Voorbeeld 6: Schrijf een subquery om werknemersgegevens op te halen uit de werknemerstabel waar managerid groter is dan 2 uit de managertabel.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGERID > 2);
In de bovenstaande instructie wordt de eerste subquery uitgevoerd SELECT MANAGERID FROM MANAGER WHERE MANAGERID> 2; de uitvoer zal manager-ID zijn die groter is dan 2 pass als parameter in de hoofdquery WHERE-clausule, en de uiteindelijke uitvoer zal zijn van de werknemerstabel waar de werknemer-manager-id een van de lijsten bevat die de uitvoer is van de subquery.
Uitvoer:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
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 | TESTEN | 4 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTEN | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C# | 5 |
Er zijn slechts zeven records uit de tabel van de werknemer waarvan de manager-ID groter is dan 2.
Voorbeeld 7: Schrijf een subquery om de details van de werknemer op te halen waarbij de managerafdeling een van de lijsten bevat:orakel, java en FMW.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGER_DEPARTMENT IN ('ORACLE', 'FMW', 'JAVA'));
In de bovenstaande verklaring halen we eerst de manager-ID op uit de managertabel waar de managerafdeling een van de lijsten bevat is Oracle, FMW, Java. Vervolgens haalt de hoofdquery de gegevens van de medewerker op uit de uitvoer van de subquery.
Uitvoer:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORAKLE | 1 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORAKLE | 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 |
Voorbeeld 8: Schrijf een zoekopdracht om de werknemers-ID, voornaam, achternaam, salaris, stad op te halen uit de tabel van de werknemer met een salaris tussen 50000 en 65000 of stad die een van de lijsten bevat is Pune, Jaipur en Mumbai.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY BETWEEN 50000 AND 65000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
In de bovenstaande verklaring hebben we de werknemers-ID, voornaam, achternaam, salaris en stad opgehaald uit de tabel van de werknemer waar het werknemerssalaris tussen 50000 en 65000 of de stad een van de lijsten bevat Pune, Mumbai, Jaipur is.
Uitvoer:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50000 | 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 | 60000 | DELHI |
5001 | ARCHIT | SHARMA | 55500 | DELHI |