SQL SELECT IN est un opérateur logique dans Structured Query Language. Il est utilisé dans les requêtes SQL pour réduire l'utilisation de plusieurs opérateurs 'OU'. s
L'opérateur IN dans SQL permet également de tester facilement la condition correspond à n'importe quelle valeur dans une liste de valeurs. Cela réduit le nombre d'opérateurs OU dans les requêtes SQL.
Syntaxe de l'opérateur IN en SQL :
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (VALUE1, VALUE2);
Syntaxe de sous-requête de l'opérateur IN en SQL :
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (SELECT STATEMENT);
Dans la syntaxe ci-dessus, nous pouvons également utiliser l'opérateur IN avec la sous-requête.
Comprenons le concept SQL SELECT IN à l'aide d'exemples.
Considérez les tables suivantes qui ont les enregistrements suivants :
Tableau 1 :Employés
ID EMPLOYEE | FIRST_NAME | LAST_NAME | SALAIRE | VILLE | DÉPARTEMENT | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOÏDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGAR | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | Bombay | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | Bombay | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | Bombay | TEST | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOÏDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TEST | 4 |
Tableau 2 :Gestionnaire
ID gestionnaire | nom_du_responsable | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manich | JAVA |
4 | Anupam Mishra | TEST |
5 | Akash Kadam | C# |
Exemple 1 : Écrivez une requête pour récupérer l'identifiant, le prénom, le nom et la ville de l'employé à partir de la table de l'employé où City inclut l'une des listes Mumbai, Pune et Delhi dans la table.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, CITY FROM EMPLOYEES WHERE CITY IN ('MUMBAI', 'PUNE', 'DELHI');
Dans la déclaration ci-dessus, nous avons récupéré l'identifiant, le prénom et le nom de l'employé et la ville de la table de l'employé, où City inclut l'un des noms de ville, Mumbai, Pune et Delhi. Tous ces noms de villes sont passés en paramètre dans l'opérateur IN en tant que valeurs. Le tableau ira pour tous les enregistrements dont les villes des employés correspondent à la liste des villes du paramètre de l'opérateur IN.
Sortie :
ID EMPLOYEE | FIRST_NAME | LAST_NAME | VILLE |
1001 | VAIBHAVI | MISHRA | PUNE |
2002 | BHAVESH | JAIN | PUNE |
2003 | RUCHIKA | JAIN | Bombay |
3001 | PRANOTI | SHENDE | PUNE |
3003 | DEEPAM | JAUHARI | Bombay |
4001 | RAJESH | GOUD | Bombay |
4003 | RUCHIKA | AGARWAL | DELHI |
5001 | ARCHIT | SHARMA | DELHI |
Il n'affiche que huit employés dont les noms de ville correspondent à la liste des paramètres d'expression de l'opérateur IN.
Exemple 2 : Écrivez une requête pour récupérer l'identifiant, le prénom, le nom, le salaire et le service de l'employé à partir de la table de l'employé où le salaire comprend l'une des listes est 50500, 55500 et 65500 dans la table.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT FROM EMPLOYEES WHERE SALARY IN (50500, 55500, 65500);
Dans la déclaration ci-dessus, nous avons récupéré l'identifiant de l'employé, le prénom et le nom, le salaire et le département de la table de l'employé où le salaire comprend l'un des salaires 50500, 55500 et 65500. Tous ces salaires sont passés en paramètre dans le Opérateur IN comme valeurs. Le tableau ira pour tous les enregistrements dont les salaires des employés correspondent à la liste des salaires des paramètres de l'opérateur IN.
Sortie :
ID EMPLOYEE | FIRST_NAME | LAST_NAME | SALAIRE | DÉPARTEMENT |
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 | TEST |
Il ne montre que sept employés dont le salaire correspond à la liste des paramètres d'expression de l'opérateur IN.
Exemple 3 : Écrivez une requête pour récupérer l'identifiant, le prénom, le nom, le salaire et la ville de l'employé des employés dont le salaire est supérieur à 60 000 ou dont la ville de l'employé comprend l'une des listes de villes 'Mumbai', 'Pune' et 'Jaipur' dans le tableau.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY > 60000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
Dans la déclaration ci-dessus, nous avons récupéré l'identifiant, le prénom, le nom, le salaire et la ville de l'employé à partir de la table des employés où le salaire de l'employé est supérieur à 60000 ou la ville de l'employé comprend l'une de ces listes de villes est 'Mumbai', 'Pune', ' Jaïpur'. La première partie de la clause WHERE de l'instruction SELECT est SALARY> 60000 et la dernière partie est CITY IN ('PUNE', 'MUMBAI', 'JAIPUR'), comme nous avons utilisé l'opérateur OR, le résultat proviendra des deux conditions.
Sortie :
ID EMPLOYEE | FIRST_NAME | LAST_NAME | SALAIRE | VILLE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50000 | Bombay |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | Bombay |
4001 | RAJESH | GOUD | 60500 | Bombay |
Il affiche seulement huit enregistrements de la table dont le salaire est supérieur à 60 000 ou les noms de ville correspondent à la liste des paramètres d'expression de l'opérateur IN.
Exemple 4 : Écrivez une requête pour récupérer l'identifiant de l'employé, le salaire, la ville et le service à partir de la table des employés où le service des employés comprend l'une des listes est « Oracle », « FMW » et également la ville comprend l'une des listes est « Delhi », « Noida », 'Puné'.
SELECT EMPLOYEEID, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW') AND CITY IN ('PUNE', 'NOIDA', 'DELHI');
Nous avons récupéré l'identifiant, le salaire, la ville et le service de l'employé à partir du tableau de l'employé dans la déclaration ci-dessus. Le service de l'employé comprend l'une des listes de services transmises au paramètre de l'opérateur IN. La ville de l'employé inclut l'une des listes de villes transmises au paramètre de l'opérateur IN, et le résultat inclut uniquement les détails de l'employé qui correspondent aux deux conditions.
Sortie :
ID EMPLOYEE | SALAIRE | VILLE | DÉPARTEMENT |
1001 | 65500 | PUNE | ORACLE |
2002 | 65500 | PUNE | FMW |
4003 | 60000 | DELHI | ORACLE |
Il n'y a que trois enregistrements de la table Employés dont la ville des employés inclut Pune, Delhi et Noida, et le Département inclut Oracle, FMW.
Exemple 5 : Écrivez une requête pour récupérer l'identifiant, le prénom, le nom, le salaire, la ville et le service de l'employé à partir de la table de l'employé où le salaire de l'employé est supérieur à 60000 et où la ville inclut l'une des listes à Pune, Jaipur, Mumbai ou le département inclut l'un des listes est 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#');
Dans l'instruction ci-dessus, nous avons utilisé l'opérateur OR, l'opérateur AND et plusieurs opérateurs IN avec l'instruction SELECT pour récupérer l'identifiant, le prénom, le nom, le salaire, la ville et le service de l'employé dans la table de l'employé. La requête SELECT récupère d'abord les enregistrements d'employés où salaire> 60000 AND City IN ("Pune", "Mumbai", Jaipur), uniquement ces employés. Les deux conditions sont vraies, et à la fin Department IN ('Java', 'Testing', 'C#'), cette requête recherchera dans la première phase le résultat que les enregistrements d'employés que nous avons récupérés ayant Department l'une des listes que nous avons transmises au Opérateur IN et accédez également au reste des enregistrements de la table si des enregistrements trouvés ayant le nom du département que nous avons passés au paramètre de l'opérateur IN, cet enregistrement sera ajouté au résultat.
Sortie :
ID EMPLOYEE | FIRST_NAME | LAST_NAME | SALAIRE | VILLE | DÉPARTEMENT |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE |
1002 | VAIBHAV | SHARMA | 60000 | NOÏDA | C# |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW |
2003 | RUCHIKA | JAIN | 50000 | Bombay | C# |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA |
3003 | DEEPAM | JAUHARI | 58500 | Bombay | JAVA |
4001 | RAJESH | GOUD | 60500 | Bombay | TEST |
4002 | ASHWINI | BAGHAT | 54500 | NOÏDA | JAVA |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TEST |
Il n'y a que 9 enregistrements d'employés dont le salaire est supérieur à 60 000. City inclut l'une des listes que nous avons transmises en tant que paramètre à l'opérateur City IN ou Department inclut l'une des listes que nous avons transmises à l'opérateur Department IN.
Exemple 6 : Écrivez une sous-requête pour récupérer les détails des employés de la table des employés où managerid est supérieur à 2 de la table des managers.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGERID > 2);
Dans l'instruction ci-dessus, la première sous-requête sera exécutée SELECT MANAGERID FROM MANAGER WHERE MANAGERID> 2 ; la sortie sera l'identifiant du responsable qui est supérieur à 2 passages en tant que paramètre dans la clause WHERE de la requête principale, et la sortie finale proviendra de la table des employés où l'identifiant du responsable de l'employé inclut l'une des listes qui est la sortie de la sous-requête.
Sortie :
ID EMPLOYEE | FIRST_NAME | LAST_NAME | SALAIRE | VILLE | DÉPARTEMENT | MANAGERID |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | Bombay | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOÏDA | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | Bombay | TEST | 4 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TEST | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOÏDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50000 | Bombay | C# | 5 |
Il n'y a que sept enregistrements de la table des employés dont l'ID de responsable est supérieur à 2.
Exemple 7 : Rédigez une sous-requête pour récupérer les détails de l'employé lorsque le service responsable inclut l'une des listes est un oracle, java et FMW.
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGER_DEPARTMENT IN ('ORACLE', 'FMW', 'JAVA'));
Dans l'instruction ci-dessus, nous récupérons d'abord l'identifiant du responsable dans la table des responsables où le département responsable inclut l'une des listes Oracle, FMW, Java. Ensuite, la requête principale récupérera les détails de l'employé à partir de la sortie de la sous-requête.
Sortie :
ID EMPLOYEE | FIRST_NAME | LAST_NAME | SALAIRE | VILLE | DÉPARTEMENT | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGAR | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | 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 | Bombay | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOÏDA | JAVA | 3 |
Exemple 8 : Écrivez une requête pour récupérer l'identifiant, le prénom, le nom, le salaire de l'employé, la ville de la table de l'employé où le salaire est compris entre 50000 et 65000 ou la ville inclut l'une des listes est Pune, Jaipur et Mumbai.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY BETWEEN 50000 AND 65000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
Dans la déclaration ci-dessus, nous avons récupéré l'identifiant, le prénom, le nom, le salaire et la ville de l'employé dans la table de l'employé où le salaire de l'employé est compris entre 50000 et 65000 ou la ville comprend l'une des listes est Pune, Mumbai, Jaipur.
Sortie :
ID EMPLOYEE | FIRST_NAME | LAST_NAME | SALAIRE | VILLE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1002 | VAIBHAV | SHARMA | 60000 | NOÏDA |
1003 | NIKHIL | VANI | 50500 | JAIPUR |
2001 | PRACHI | SHARMA | 55500 | CHANDIGAR |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | RUCHIKA | JAIN | 50000 | Bombay |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | JAIPUR |
3003 | DEEPAM | JAUHARI | 58500 | Bombay |
4001 | RAJESH | GOUD | 60500 | Bombay |
4002 | ASHWINI | BAGHAT | 54500 | NOÏDA |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI |
5001 | ARCHIT | SHARMA | 55500 | DELHI |