SQL SELECT IN é um operador lógico em Structured Query Language. Ele é usado em consultas SQL para reduzir o uso de vários operadores 'OR'. s
O operador IN no SQL também permite testar facilmente se a condição corresponde a qualquer valor em uma lista de valores. Reduz o número de operadores OR em consultas SQL.
Sintaxe do operador IN no SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (VALUE1, VALUE2);
Sintaxe da subconsulta do operador IN no SQL:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (SELECT STATEMENT);
Na sintaxe acima, também podemos usar o operador IN com subconsulta.
Vamos entender o conceito SQL SELECT IN com a ajuda de exemplos.
Considere as seguintes tabelas que possuem os seguintes registros:
Tabela 1:Funcionários
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | C# | 5 |
1003 | NIQUIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRAQUI | 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 | QUERER | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 |
4002 | ASHWINI | BOLSA | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60.000 | DÉLHI | ORACLE | 1 |
5001 | ARQUIVO | SHARMA | 55500 | DÉLHI | TESTE | 4 |
Tabela 2:Gerente
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTE |
5 | Akash Kadam | C# |
Exemplo 1: Escreva uma consulta para buscar o ID do funcionário, nome, sobrenome e Cidade da tabela do funcionário, onde Cidade inclui uma das listas Mumbai, Pune e Delhi na tabela.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, CITY FROM EMPLOYEES WHERE CITY IN ('MUMBAI', 'PUNE', 'DELHI');
Na declaração acima, recuperamos o ID do funcionário, nome e sobrenome e Cidade da tabela do funcionário, onde Cidade inclui um dos nomes das cidades, Mumbai, Pune e Delhi. Todos esses nomes de cidades são passados como parâmetro no operador IN como valores. A tabela irá para todos os registros cujas cidades dos funcionários correspondem à lista de cidades do parâmetro do operador IN.
Saída:
EMPLOYEEID | FIRST_NAME | LAST_NAME | CIDADE |
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 | DÉLHI |
5001 | ARQUIVO | SHARMA | DÉLHI |
Ele mostra apenas oito funcionários cujos nomes de cidades correspondem à lista de parâmetros de expressão do operador IN.
Exemplo 2: Escreva uma consulta para buscar o ID do funcionário, nome, sobrenome, salário e Departamento da tabela do funcionário em que o salário inclui uma das listas 50500, 55500 e 65500 na tabela.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT FROM EMPLOYEES WHERE SALARY IN (50500, 55500, 65500);
Na instrução acima, recuperamos o ID do funcionário, nome e sobrenome, salário e Departamento da tabela do funcionário onde o salário inclui um dos salários são 50.500, 55.500 e 65.500. Todos esses salários são passados como parâmetro no operador IN como valores. A tabela irá para todos os registros cujos salários dos funcionários correspondem à lista de salários do parâmetro do operador IN.
Saída:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | DEPARTAMENTO |
1001 | VAIBHAVI | MISHRA | 65500 | ORACLE |
1003 | NIQUIL | VANI | 50500 | FMW |
2001 | PRAQUI | SHARMA | 55500 | ORACLE |
2002 | BHAVESH | JAIN | 65500 | FMW |
3001 | PRANOTI | SHENDE | 55500 | JAVA |
3002 | ANUJA | QUERER | 50500 | FMW |
5001 | ARQUIVO | SHARMA | 55500 | TESTE |
Ele mostra apenas sete funcionários cujo salário corresponde à lista de parâmetros de expressão do operador IN.
Exemplo 3: Escreva uma consulta para buscar o ID do funcionário, nome, sobrenome, salário e Cidade de funcionários em que o salário do funcionário é maior que 60.000 ou a cidade do funcionário inclui uma das listas de cidades como 'Mumbai', 'Pune' e 'Jaipur' na mesa.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY > 60000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
Na declaração acima, buscamos o ID do funcionário, primeiro nome, sobrenome, salário e Cidade da tabela de funcionários onde o salário do funcionário é maior que 60.000 ou a cidade do funcionário inclui uma desta lista de cidades é 'Mumbai', 'Pune', ' Jaipur'. A primeira parte da cláusula WHERE da instrução SELECT é SALARY> 60000 e a última parte é CITY IN ('PUNE', 'MUMBAI', 'JAIPUR'), como usamos o operador OR o resultado será de ambas as condições.
Saída:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1003 | NIQUIL | VANI | 50500 | JAIPUR |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | QUERER | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI |
4001 | RAJESH | GOUD | 60500 | MUMBAI |
Ele mostra apenas oito registros da tabela cujo salário é maior que 60.000 ou nomes de cidades correspondem à lista de parâmetros da expressão do operador IN.
Exemplo 4: Escreva uma consulta para recuperar o ID do funcionário, Salário, Cidade e Departamento da tabela de funcionários em que o departamento de funcionários inclui uma das listas 'Oracle', 'FMW' e também Cidade inclui uma das listas 'Delhi', 'Noida', 'Punho'.
SELECT EMPLOYEEID, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW') AND CITY IN ('PUNE', 'NOIDA', 'DELHI');
Recuperamos o ID do funcionário, salário, Cidade e Departamento da tabela do funcionário na instrução acima. O departamento de funcionários inclui uma das listas de departamentos passadas para o parâmetro do operador IN. A cidade do funcionário inclui uma das listas de cidades passadas para o parâmetro do operador IN e o resultado inclui apenas os detalhes do funcionário que correspondem às duas condições.
Saída:
EMPLOYEEID | SALÁRIO | CIDADE | DEPARTAMENTO |
1001 | 65500 | PUNE | ORACLE |
2002 | 65500 | PUNE | FMW |
4003 | 60.000 | DÉLHI | ORACLE |
Existem apenas três registros da tabela Funcionários cuja cidade do funcionário inclui Pune, Delhi e Noida, e Department inclui Oracle, FMW.
Exemplo 5: Escreva uma consulta para buscar ID do funcionário, nome, sobrenome, salário, Cidade e Departamento da tabela do funcionário onde o salário do funcionário é maior que 60.000 e Cidade inclui uma das listas em Pune, Jaipur, Mumbai ou Departamento inclui um dos listas é 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#');
Na instrução acima, usamos o operador OR, o operador AND e o operador IN múltiplo com a instrução SELECT para buscar o ID do funcionário, nome, sobrenome, salário, cidade e departamento da tabela do funcionário. A consulta SELECT primeiro busca os registros de funcionários em que o salário> 60.000 AND City IN ('Pune', 'Mumbai', Jaipur), somente esses funcionários. Ambas as condições são verdadeiras, e no final Department IN ('Java', 'Testing', 'C#'), esta consulta buscará no resultado da primeira fase que esses registros de funcionários que recuperamos tendo Department uma das listas que passamos para o operador IN e também ir para o restante dos registros da tabela se algum registro for encontrado com nome de departamento que passamos para o parâmetro do operador IN esse registro será adicionado ao resultado.
Saída:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO |
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 | TESTE |
4002 | ASHWINI | BOLSA | 54500 | NOIDA | JAVA |
5001 | ARQUIVO | SHARMA | 55500 | DÉLHI | TESTE |
Existem apenas 9 registros de funcionários com salário maior que 60.000. Cidade inclui uma das listas que passamos como parâmetro para o operador Cidade IN ou Departamento inclui uma das listas que passamos para o operador Departamento IN.
Exemplo 6: Escreva uma subconsulta para buscar detalhes de funcionários da tabela de funcionários em que managerid é maior que 2 da tabela de gerentes.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGERID > 2);
Na instrução acima, a primeira subconsulta será executada SELECT MANAGERID FROM MANAGER WHERE MANAGERID> 2; a saída será o ID do gerente que é maior que 2 passe como parâmetro na cláusula WHERE da consulta principal e a saída final será da tabela de funcionários onde o ID do gerente do funcionário inclui uma das listas que é a saída da subconsulta.
Saída:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BOLSA | 54500 | NOIDA | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 |
5001 | ARQUIVO | SHARMA | 55500 | DÉLHI | TESTE | 4 |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | C# | 5 |
Existem apenas sete registros da tabela do funcionário cujo ID de gerente é maior que 2.
Exemplo 7: Escreva uma subconsulta para buscar os detalhes do funcionário onde o departamento do gerente inclui uma das listas como oráculo, java e FMW.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGER_DEPARTMENT IN ('ORACLE', 'FMW', 'JAVA'));
Na instrução acima, primeiro buscamos o ID do gerente da tabela de gerentes onde o departamento de gerentes inclui uma das listas Oracle, FMW, Java. Em seguida, a consulta principal buscará os detalhes do funcionário na saída da subconsulta.
Saída:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRAQUI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60.000 | DÉLHI | ORACLE | 1 |
1003 | NIQUIL | VANI | 50500 | JAIPUR | FMW | 2 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3002 | ANUJA | QUERER | 50500 | JAIPUR | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BOLSA | 54500 | NOIDA | JAVA | 3 |
Exemplo 8: Escreva uma consulta para buscar ID do funcionário, nome, sobrenome, salário, Cidade da tabela do funcionário onde o salário está entre 50.000 e 65.000 ou Cidade inclui uma das listas Pune, Jaipur e Mumbai.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY BETWEEN 50000 AND 65000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
Na declaração acima, buscamos o ID do funcionário, primeiro nome, sobrenome, salário e Cidade da tabela do funcionário onde o salário do funcionário entre 50.000 e 65.000 ou a Cidade inclui uma das listas é Pune, Mumbai, Jaipur.
Saída:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA |
1003 | NIQUIL | VANI | 50500 | JAIPUR |
2001 | PRAQUI | SHARMA | 55500 | CHANDIGARH |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | QUERER | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI |
4001 | RAJESH | GOUD | 60500 | MUMBAI |
4002 | ASHWINI | BOLSA | 54500 | NOIDA |
4003 | RUCHIKA | AGARWAL | 60.000 | DÉLHI |
5001 | ARQUIVO | SHARMA | 55500 | DÉLHI |