Bonjour les amis ! Dans ce post, nous verrons certaines des requêtes SQL les plus courantes demandées en entretien. Ces questions et réponses d’entretien sur les requêtes SQL sont conçues pour les débutants et les expérimentés.
En fait, on m’a posé la plupart de ces questions lors d’entretiens dans les différentes phases de ma carrière.
Si vous voulez sauter les questions de base et commencer par des requêtes SQL délicates, alors vous pouvez directement passer à nos questions d’entretien sur les requêtes SQL pour la section expérimentée.
Considérez les deux tableaux ci-dessous comme référence lorsque vous essayez de créer des requêtes pour les questions posées ici.
Table – EmployeeDetails
EmpId | Nom complet | ManagerId | DateOfJoining | City |
---|---|---|---|---|
121 | John Snow | 321 | 01/31/2014 | Toronto |
321 | Walter White | 986 | 01/30/2015 | Californie |
421 | Kuldeep Rana | 876 | 27/11/2016 | New Delhi |
Table – EmployeeSalary
EmpId | Projet | Salaire | Variable |
---|---|---|---|
121 | P1 | 8000 | 500 |
321 | P2 | 10000 | 1000 |
421 | P1 | 12000 | 0 |
Pour votre commodité, j’ai compilé les 10 meilleures questions pour vous. Vous pouvez essayer de résoudre ces questions et cliquer sur les liens pour aller à leurs réponses respectives.
- Recherche SQL pour récupérer les enregistrements qui sont présents dans une table mais pas dans une autre table.
- Recherche SQL pour récupérer tous les employés qui ne travaillent sur aucun projet.
- Recherche SQL pour récupérer tous les employés de EmployeeDetails qui ont rejoint l’année 2020.
- Retrouver tous les employés de EmployeeDetails qui ont un enregistrement de salaire dans EmployeeSalary.
- Ecrire une requête SQL pour retrouver le compte des employés par projet.
- Retrouver les noms des employés et le salaire même si la valeur du salaire n’est pas présente pour l’employé.
- Ecrire une requête SQL pour retrouver tous les employés qui sont aussi des managers.
- Ecrire une requête SQL pour récupérer les enregistrements en double de EmployeeDetails.
- Ecrire une requête SQL pour récupérer uniquement les lignes impaires de la table.
- Ecrire une requête pour trouver le 3e salaire le plus élevé d’une table sans mot-clé top ou limit.
Or, vous pouvez également sauter à nos deux sections ci-dessous sur les questions d’entretien pour les nouveaux et les professionnels expérimentés.
Contenu
Questions d’entretien sur les requêtes SQL pour les nouveaux venus
Voici une liste des meilleures questions d’entretien sur les requêtes SQL et des réponses pour les candidats nouveaux venus qui les aideront dans leurs entretiens. Dans ces requêtes, nous nous concentrerons uniquement sur les commandes SQL de base.
Questions.1. Ecrivez une requête SQL pour récupérer l’EmpId et le FullName de tous les employés travaillant sous Manager avec l’id – ‘986’.
Ans. Nous pouvons utiliser la table EmployeeDetails pour récupérer les détails de l’employé avec une clause where pour le manager-
SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;
Ques.2.
Écrivez une requête SQL pour récupérer les différents projets disponibles dans la table EmployeeSalary.
Ans. En se référant à la table EmployeeSalary, nous pouvons voir que cette table contient des valeurs de projet correspondant à chaque employé, ou nous pouvons dire que nous aurons des valeurs de projet en double en sélectionnant les valeurs de projet de cette table.
Donc, nous utiliserons la clause distinct pour obtenir les valeurs uniques du Projet.
SELECT DISTINCT(Project)FROM EmployeeSalary;
Ques.3. Écrivez une requête SQL pour récupérer le compte des employés travaillant dans le projet ‘P1’.
Ans. Ici, nous utiliserions la fonction agrégée count() avec la clause SQL where-
SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';
Ques.4.Ecrivez une requête SQL pour trouver le salaire maximum, minimum et moyen des employés.
Ans. Nous pouvons utiliser la fonction agrégée de SQL pour récupérer les valeurs maximum, minimum et moyenne-
SELECT Max(Salary), Min(Salary), AVG(Salary) FROM EmployeeSalary;
Ques.5Ecrivez une requête SQL pour trouver l’id de l’employé dont le salaire se trouve dans la plage de 9000 et 15000.
Ans. Ici, nous pouvons utiliser l’opérateur ‘Between’ avec une clause where.
SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;
Ques.6. Ecrivez une requête SQL pour récupérer les employés qui vivent à Toronto et travaillent sous le manager avec ManagerId – 321.
Ans. Puisque nous devons satisfaire les deux conditions – les employés vivant à ‘Toronto’ et travaillant dans le projet ‘P2’. Donc, nous utiliserons l’opérateur AND ici-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='Toronto' AND ManagerId='321';
Questions.7. Écrire une requête SQL pour récupérer tous les employés qui soit vivent en Californie, soit travaillent sous un manager avec ManagerId – 321.
Ans. Cette question d’entretien nous demande de satisfaire l’une ou l’autre des conditions – employés vivant en ‘Californie’ et travaillant sous un manager avec ManagerId ‘321’. Nous utiliserons donc l’opérateur OR ici-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='California' OR ManagerId='321';
Ques.8.. écrivez une requête SQL pour récupérer tous les employés qui travaillent sur un projet autre que P1.
Ans. Ici, nous pouvons utiliser l’opérateur NOT pour récupérer les lignes qui ne satisfont pas la condition donnée.
SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';
Ou utiliser l’opérateur non égal à-
SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';
Pour connaître la différence entre les opérateurs NOT et <> SQL, consultez ce lien – Différence entre les opérateurs NOT et !=.
Questions.9.. écrivez une requête SQL pour afficher le salaire total de chaque employé en ajoutant le salaire avec la valeur variable.
Ans. Ici, nous pouvons simplement utiliser l’opérateur ‘+’ en SQL.
SELECT EmpId,Salary+Variable as TotalSalary FROM EmployeeSalary;
Ques.10Écrire une requête SQL pour récupérer les employés dont le nom commence par deux caractères quelconques, suivis d’un texte « hn » et se terminant par une séquence quelconque de caractères.
Ans. Pour cette question, nous pouvons créer une requête SQL en utilisant l’opérateur like avec les caractères génériques ‘_’ et ‘%’, où ‘_’ correspond à un seul caractère et ‘%’ correspond à ‘0 ou plusieurs caractères’.
SELECT FullNameFROM EmployeeDetailsWHERE FullName LIKE '__hn%';
Ques.11Ecrivez une requête SQL pour récupérer tous les ID d’employés qui sont présents dans l’une ou l’autre des tables – ‘EmployeeDetails’ et ‘EmployeeSalary’.
Ans. Afin d’obtenir des ID d’employés uniques à partir des deux tables, nous pouvons utiliser la clause Union qui peut combiner les résultats des deux requêtes SQL et retourner des lignes uniques.
SELECT EmpId FROM EmployeeDetailsUNION SELECT EmpId FROM EmployeeSalary;
Ques.12Ecrivez une requête SQL pour récupérer des enregistrements communs entre deux tables.
Ans. SQL Server – Utilisation de l’opérateur INTERSECT-
SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;
MySQL – Puisque MySQL n’a pas d’opérateur INTERSECT, nous pouvons utiliser la sous-requête-
SELECT *FROM EmployeeSalaryWHERE EmpId IN (SELECT EmpId from ManagerSalary);
Ques.13Ecrivez une requête SQL pour récupérer les enregistrements qui sont présents dans une table mais pas dans une autre table.
Ans. SQL Server – Utilisation de l’opérateur MINUS-
SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;
MySQL – Puisque MySQL n’a pas l’opérateur MINUS, nous pouvons utiliser la jointure LEFT-
SELECT EmployeeSalary.*FROM EmployeeSalaryLEFT JOINManagerSalary USING (EmpId)WHERE ManagerSalary.EmpId IS NULL;
Ques.14Ecrivez une requête SQL pour récupérer les EmpIds qui sont présents dans les deux tables – ‘EmployeeDetails’ et ‘EmployeeSalary.
Ans. en utilisant une sous-requête-
SELECT EmpId FROM EmployeeDetails where EmpId IN (SELECT EmpId FROM EmployeeSalary);
Ques.15 Ecrivez une requête SQL pour récupérer les EmpIds qui sont présents dans EmployeeDetails mais pas dans EmployeeSalary.
Ans. en utilisant une sous-requête-
SELECT EmpId FROM EmployeeDetails where EmpId Not IN (SELECT EmpId FROM EmployeeSalary);
Ques.16Ecrire une requête SQL pour récupérer les noms complets des employés et remplacer l’espace par ‘-‘.
Ans. Utiliser la fonction ‘Replace’-
SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;
Ques.17. Ecrire une requête SQL pour récupérer la position d’un ou plusieurs caractères donnés dans un champ.
Ans. Utiliser la fonction ‘Instr’-
SELECT INSTR(FullName, 'Snow')FROM EmployeeDetails;
Ques.18.Ecrivez une requête SQL pour afficher à la fois l’EmpId et le ManagerId ensemble.
Ans. Ici, nous pouvons utiliser la commande CONCAT.
SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;
Ques.19. Ecrivez une requête pour récupérer seulement le premier nom(chaîne avant l’espace) de la colonne FullName de la table EmployeeDetails.
Ans. Dans cette question, nous devons d’abord récupérer l’emplacement du caractère espace dans le champ FullName et ensuite extraire le premier nom du champ FullName.
Pour trouver l’emplacement, nous utiliserons la méthode LOCATE dans MySQL et CHARINDEX dans SQL SERVER et pour récupérer la chaîne de caractères avant l’espace, nous utiliserons la méthode SUBSTRING OU MID.
MySQL – utiliser MID
SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;
SQL Server – utiliser SUBSTRING
SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;
Questions.20.Écrire une requête SQL pour mettre en majuscule le nom de l’employé et en minuscule les valeurs de la ville.
Ans. Nous pouvons utiliser les fonctions SQL Upper et Lower pour obtenir les résultats escomptés.
SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;
Ques.21. Ecrivez une requête SQL pour trouver le compte des occurrences totales d’un caractère particulier – ‘n’ dans le champ FullName.
Ans. Ici, nous pouvons utiliser la fonction ‘Longueur’. Nous pouvons soustraire la longueur totale du champ FullName avec une longueur du FullName après avoir remplacé le caractère – ‘n’.
SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', ''))FROM EmployeeDetails;
Questions.22. Ecrire une requête SQL pour mettre à jour les noms des employés en supprimant les espaces avant et arrière.
Ans. En utilisant la commande ‘Update’ avec la fonction ‘LTRIM’ et ‘RTRIM’.
UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));
Ques.23. Récupérer tous les employés qui ne travaillent sur aucun projet.
Ans. C’est l’une des questions d’entretien très basiques dans laquelle l’interviewer veut voir si la personne connaît l’opérateur – Is NULL – couramment utilisé.
SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;
Ques.24.Ecrivez une requête SQL pour récupérer les noms des employés ayant un salaire supérieur ou égal à 5000 et inférieur ou égal à 10000.
Ans. Ici, nous utiliserons BETWEEN dans la clause ‘where’ pour retourner l’EmpId des employés dont le salaire satisfait aux critères requis et ensuite l’utiliser comme sous-requête pour trouver le nom complet de l’employé à partir de la table EmployeeDetails.
SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);
Ques.25. Ecrivez une requête SQL pour trouver la date-heure actuelle.
Ans. MySQL-
SELECT NOW();
SQL Server-
SELECT getdate();
Oracle-
SELECT SYSDATE FROM DUAL;
Ques.26.Écrire une requête SQL pour récupérer tous les détails des employés de la table EmployeeDetails qui ont rejoint l’année 2020.
Ans. Utiliser BETWEEN pour la plage de dates ’01-01-2020′ ET ’31-12-2020′-
SELECT * FROM EmployeeDetailsWHERE DateOfJoining BETWEEN '2020/01/01'AND '2020/12/31';
Aussi, nous pouvons extraire la partie année de la date de jonction (en utilisant YEAR dans mySQL)-
SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';
Ques.27.Ecrire une requête SQL pour récupérer tous les enregistrements d’employés de la table EmployeeDetails qui ont un enregistrement de salaire dans la table EmployeeSalary.
Ans. Utiliser ‘Exists’-
SELECT * FROM EmployeeDetails EWHERE EXISTS(SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);
Ques.28. Ecrivez une requête SQL pour récupérer le nombre d’employés par projet trié par le nombre de projets dans l’ordre décroissant.
Ans. La requête a deux exigences – d’abord pour récupérer le nombre par projet et ensuite pour trier le résultat par ce nombre.
Pour le comptage par projet, nous utiliserons la clause GROUP BY et pour le tri, nous utiliserons la clause ORDER BY sur l’alias du comptage par projet.
SELECT Project, count(EmpId) EmpProjectCountFROM EmployeeSalaryGROUP BY ProjectORDER BY EmpProjectCount DESC;
Questions.29. Écrivez une requête pour récupérer les noms des employés et les enregistrements de salaire. Affichez les détails de l’employé même si l’enregistrement de salaire n’est pas présent pour l’employé.
Ans. C’est encore une des questions d’entretien très courantes dans laquelle l’interviewer veut juste vérifier les connaissances de base des JOINS SQL.
Ici, nous pouvons utiliser la jointure gauche avec la table EmployeeDetail sur le côté gauche de la table EmployeeSalary.
SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary SON E.EmpId = S.EmpId;
Ques.30. Ecrivez une requête SQL pour joindre 3 tables.
Ans. Considérant 3 tables TableA, TableB, et TableC, nous pouvons utiliser 2 clauses de jointure comme ci-dessous-
SELECT column1, column2FROM TableAJOIN TableB ON TableA.Column3 = TableB.Column3JOIN TableC ON TableA.Column4 = TableC.Column4;
Pour plus de questions sur les jointures SQL, vous pouvez également consulter notre top des questions d’entretien sur les jointures SQL.
Questions d’entretien sur les requêtes SQL pour les expérimentés
Voici la liste de certaines des questions d’entretien sur les requêtes SQL les plus fréquemment posées aux professionnels expérimentés. Ces questions couvrent les requêtes SQL sur les concepts avancés de JOIN SQL, la récupération des lignes en double, les lignes paires et impaires, le nième salaire le plus élevé, etc.
Questions. 31. Ecrivez une requête SQL pour récupérer tous les employés qui sont également des managers à partir de la table EmployeeDetails.
Ans. Ici, nous devons utiliser Self-Join car l’exigence veut que nous analysions la table EmployeeDetails comme deux tables. Nous utiliserons différents alias ‘E’ et ‘M’ pour la même table EmployeeDetails.
SELECT DISTINCT E.FullNameFROM EmployeeDetails EINNER JOIN EmployeeDetails MON E.EmpID = M.ManagerID;
Pour en savoir plus sur le Self Join ainsi que quelques autres requêtes, vous pouvez regarder la vidéo ci-dessous qui explique le concept de self join de manière très simple.
Ques.32. Ecrivez une requête SQL pour récupérer les enregistrements en double de EmployeeDetails (sans tenir compte de la clé primaire – EmpId).
Ans. Afin de trouver les enregistrements en double de la table, nous pouvons utiliser GROUP BY sur tous les champs et ensuite utiliser la clause HAVING pour retourner uniquement les champs dont le compte est supérieur à 1 c’est-à-dire les lignes ayant des enregistrements en double.
SELECT FullName, ManagerId, DateOfJoining, City, COUNT(*)FROM EmployeeDetailsGROUP BY FullName, ManagerId, DateOfJoining, CityHAVING COUNT(*) > 1;
Ques.33. Ecrivez une requête SQL pour supprimer les doublons d’une table sans utiliser une table temporaire.
Ans. Ici, nous pouvons utiliser delete avec alias et inner join. Nous allons vérifier l’égalité de tous les enregistrements correspondants et ils suppriment la ligne avec EmpId plus élevé.
DELETE E1 FROM EmployeeDetails E1INNER JOIN EmployeeDetails E2 WHERE E1.EmpId > E2.EmpId AND E1.FullName = E2.FullName AND E1.ManagerId = E2.ManagerIdAND E1.DateOfJoining = E2.DateOfJoiningAND E1.City = E2.City;
Ques.34. Ecrire une requête SQL pour récupérer seulement les lignes impaires de la table.
Ans. Dans le cas où nous avons un champ d’auto-incrémentation par exemple EmpId alors nous pouvons simplement utiliser la requête ci-dessous-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;
Dans le cas où nous n’avons pas un tel champ alors nous pouvons utiliser les requêtes ci-dessous.
Utilisation de Row_number dans le serveur SQL et vérification que le reste lorsqu’il est divisé par 2 est égal à 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 1;
Utilisation d’une variable définie par l’utilisateur dans MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 1;
Questions.35.. Écrire une requête SQL pour récupérer seulement les lignes paires de la table.
Ans. Dans le cas où nous avons un champ d’auto-incrémentation par exemple EmpId alors nous pouvons simplement utiliser la requête ci-dessous-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;
Dans le cas où nous n’avons pas un tel champ alors nous pouvons utiliser les requêtes ci-dessous.
Utilisation de Row_number dans le serveur SQL et vérification que le reste lorsqu’il est divisé par 2 est 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 0;
Utilisation d’une variable définie par l’utilisateur dans MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;
Questions.36.. Écrire une requête SQL pour créer une nouvelle table avec des données et une structure copiées à partir d’une autre table.
Ans.
CREATE TABLE NewTable SELECT * FROM EmployeeSalary;
Ques.37. Écrire une requête SQL pour créer une table vide avec la même structure qu’une autre table.
Ans. Ici, nous pouvons utiliser la même requête que ci-dessus avec une condition ‘WHERE’ fausse-
CREATE TABLE NewTable SELECT * FROM EmployeeSalary where 1=0;
Ques.38. Ecrire une requête SQL pour récupérer les n premiers enregistrements ?
Ans. Dans MySQL en utilisant LIMIT-
SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;
Dans le serveur SQL en utilisant la commande TOP-
SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;
Ques.39. Ecrivez une requête SQL pour trouver le nième salaire le plus élevé de la table.
Ans, en utilisant le mot clé Top (SQL Server)-
SELECT TOP 1 SalaryFROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC )ORDER BY Salary ASC;
En utilisant la clause limite(MySQL)-
SELECT SalaryFROM EmployeeORDER BY Salary DESC LIMIT N-1,1;
Ques.40. Écrivez une requête SQL pour trouver le 3e salaire le plus élevé d’une table sans utiliser le mot-clé TOP/limit.
Ans. C’est l’une des questions d’entretien les plus fréquemment posées. Pour cela, nous allons utiliser une sous-requête corrélée.
Pour trouver le 3e salaire le plus élevé, nous allons trouver la valeur du salaire jusqu’à ce que la requête interne renvoie un compte de 2 lignes ayant le salaire supérieur aux autres salaires distincts.
SELECT SalaryFROM EmployeeSalary Emp1WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Pour le nième salaire le plus élevé-
SELECT SalaryFROM EmployeeSalary Emp1WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Ceci conclut notre post sur les questions et réponses d’entretien sur les requêtes SQL fréquemment posées. J’espère que ces questions vous aideront lors de vos entretiens sur les bases de données.
Si vous pensez, que nous avons manqué l’une des questions d’entretien courantes, alors faites-le nous savoir dans les commentaires et nous ajouterons ces questions à notre liste.
Vérifiez notre article sur – Les questions d’entretien sur les bases de données, en vous concentrant sur les questions d’entretien théoriques basées sur le SGBD et les concepts SQL.
Kuldeep est le fondateur et l’auteur principal d’ArtOfTesting. Il est compétent en matière d’automatisation des tests, de tests de performance, de big data et de CI-CD. Il apporte sa décennie d’expérience à son rôle actuel où il se consacre à l’éducation des professionnels de l’assurance qualité. Vous pouvez vous connecter avec lui sur LinkedIn.
.