27th Feb 2025 8 minutes de lecture 10 exercices NULL pour les débutants Ekre Ceannmor pratique sql Table des matières Connaître les données Exercices SQL NULL 1. Chefs d'équipe 2. Départements établis 3. Bonus manquants 4. Petites primes 5. Employés en ligne 6. Employés et régions 7. Effectifs régionaux 8. Ratio primes/salaires 9. Effectifs départementaux 10. Rôles par département Vous avez soif d'autres exercices pratiques SQL NULL ? Vous voulez vous entraîner à manipuler les valeurs NULL dans vos requêtes ? Découvrez ces 10 nouveaux exercices d'entraînement NULL ! La maîtrise du langage SQL nécessite beaucoup de pratique. Bien que l'apprentissage de la théorie soit important, la pratique est l'un des meilleurs moyens de maintenir vos compétences SQL à jour. Dans cet article, nous vous présentons 10 exercices NULL à analyser, accompagnés de solutions et d'explications. Les débutants en SQL peuvent être pris au dépourvu lorsqu'ils ont affaire à des NULL. NULL ne se comporte pas comme une donnée normale ; il représente l'absence totale d'information, ce qui peut le rendre difficile à comprendre au début. Les exercices SQL suivants vous aideront à affiner vos compétences sur le sujet des NULL. Nous couvrirons toutes les subtilités du travail avec les NULL et nous pratiquerons un large éventail de cas d'utilisation impliquant des données manquantes. Et si vous souhaitez vous entraîner davantage, non seulement avec les NULL, mais aussi avec l'ensemble du langage SQL, essayez notre pisteLa pratique du SQL . Il contient plus de 1250 exercices pratiques pour vous aider à maîtriser SQL. Et comme tout se passe dans votre navigateur, il n'y a rien à installer ou à télécharger. Prêt pour des exercices d'entraînement SQL NULL ? Plongeons dans le vif du sujet ! Connaître les données Pour cet exercice, nous utiliserons deux tables : employee et department. Examinez quelques exemples de données de chaque table : employee idnamesalarybonuspositiondepartment_idmanager_id 1John Doe55001250CEO1NULL 2Jane Doe47501100CTO1NULL 3Mike Johnson2900NULLHead Accountant2NULL 4Sarah Brown23500Accountant23 5James Clark2500NULLHead of Marketing3NULL 6Emily Davis3100NULLSoftware Developer42 Dans la table employés, certaines colonnes peuvent avoir des valeurs manquantes (NULL). Par exemple, manager_id est NULL pour tous les employés qui ne sont pas supervisés par un autre employé (c'est-à-dire le manager lui-même). Les informations salary et bonus peuvent être manquantes si elles ne s'appliquent pas à l'employé concerné. department idnameregion 1Executive TeamCentral Hub 2AccountingNorthwest 3SalesWest Coast 4DevelopmentNULL Dans le tableau department seule la région peut être NULL. Cela indique que le département opère en ligne. Nous y reviendrons dans les exercices. Exercices SQL NULL 1. Chefs d'équipe Exercice : Afficher des informations sur tous les chefs d'équipe (c'est-à-dire les employés qui n'ont pas de manager_id). Solution : SELECT * FROM employee WHERE manager_id IS NULL; Explication : Pour filtrer les employés qui n'ont pas de manager_id, nous devons utiliser l'opérateur IS NULL. L'utilisation d'opérateurs ordinaires tels que = ou != avec des NULL ne fonctionne pas comme prévu en SQL. Si vous les utilisez, le résultat sera toujours NULL et la condition WHERE échouera. Si nous voulions afficher tous les employés qui ne sont pas chefs d'équipe, la condition de filtrage serait WHERE manager_id IS NOT NULL. Pour en savoir plus sur les NULL et leur fonctionnement, consultez la rubrique NULL et gestion des données manquantes dans SQL. 2. Départements établis Exercice : Affichez tous les départements physiques (c'est-à-dire ceux qui ont une valeur de région). Les départements sans région fonctionnent en ligne. Solution : SELECT * FROM department WHERE region IS NOT NULL; Explication : Utilisez le même principe de filtrage que dans l'exercice précédent. Dans ce cas, vous devez utiliser l'opérateur IS NOT NULL. 3. Bonus manquants Exercice : Afficher le nombre d'employés qui ont une prime manquante. Solution : SELECT COUNT(*) FROM employee WHERE bonus IS NULL; Explication : Filtrez les employés sans prime à l'aide de l'opérateur IS NULL. Utilisez la fonction d'agrégation COUNT() pour compter le nombre d'employés sans prime. Remarque : veillez à utiliser l'argument approprié pour la fonction COUNT(), car COUNT(bonus) WHERE bonus IS NULL renvoie toujours 0. 4. Petites primes Exercice : Affichez tous les employés qui ont reçu une prime inférieure à 300, y compris les employés qui n'ont pas de prime enregistrée. Affichez d'abord les employés qui n'ont pas de prime enregistrée, puis classez les employés de la plus petite à la plus grande prime. Solution : SELECT * FROM employee WHERE bonus < 300 OR bonus IS NULL ORDER BY bonus NULLS FIRST; Explication : Ici, la condition est divisée en deux parties : Primes inférieures à 300, et Primes manquantes. Nous pouvons utiliser l'opérateur < (moins que) dans la première partie, mais la seconde partie nécessitera l'opérateur IS NULL. N'oubliez pas que NULL n'est ni "plus grand" ni "plus petit" que 300. Vous devez donc utiliser spécifiquement IS NULL. Joignez les deux conditions à l'aide de l'opérateur OR. Pour trier les lignes par bonus, utilisez une clause ORDER BY. Par défaut, les lignes seront triées par ordre croissant (c'est-à-dire du plus petit au plus grand bonus). Pour spécifier explicitement que les lignes NULL doivent être placées en premier dans le résultat, utilisez la clause NULLS FIRST. 5. Employés en ligne Exercice : Trouvez tous les employés qui travaillent dans des départements éloignés (c'est-à-dire ceux dont la région est NULL). Affichez le nom de l'employé et le nom du département. Solution : SELECT employee.name AS employee, department.name AS department FROM employee JOIN department ON employee.department_id = department.id WHERE department.region IS NULL; Explication : Rejoignez les champs employee et department pour accéder à la fois au nom de l'employé et au nom du service name. Renommez les colonnes avec le mot-clé AS pour éviter les noms en double. Filtrez ensuite le résultat en fonction du département region, en ne conservant que les lignes contenant la région IS NULL. 6. Employés et régions Exercice : Pour chaque employé, affichez son nom, le nom du service auquel il est affecté et la région dans laquelle son service est basé. Pour les employés des départements dont la région est manquante, affichez ‘Online’ comme région. Solution : SELECT employee.name AS employee, department.name AS department, COALESCE(region, ‘Online’) AS region FROM employee JOIN department ON employee.department_id = department.id; Explication : Pour afficher à la fois le nom de l'employé, le nom du service et la région, joignez les tables. Les employés des départements sans région auront NULL comme valeur de cette colonne. Pour remplacer cette valeur, nous pouvons utiliser la fonction COALESCE(): elle conservera les valeurs non nulles, mais remplacera les NULLdans le résultat par une nouvelle valeur que nous fournissons (‘Online’). Si vous souhaitez en savoir plus sur le fonctionnement de cette fonction, consultez notre article sur la fonction COALESCE(). 7. Effectifs régionaux Exercice : Affichez chaque région de la base de données ainsi que le nombre d'employés travaillant dans cette région. Affichez ‘Online’ comme région pour les employés qui n'en ont pas. Solution : SELECT COALESCE(region, ‘Online’) AS region, COUNT(*) FROM employee JOIN department ON employee.department_id = department.id GROUP BY region; Explication : Joignez les éléments employee et department tables. Comme dans le dernier exercice, utilisez la fonction COALESCE() pour remplacer les régions manquantes par "En ligne". Ajoutez la fonction d'agrégation COUNT() pour obtenir le nombre d'employés dans chaque région, puis regroupez le résultat par la colonne région. Remarque : il n'est pas nécessaire d'utiliser COALESCE() dans la clause GROUP BY. COALESCE() remplace tous les NULLpar la même valeur, de sorte que le nombre de groupes et les lignes qu'ils contiennent restent inchangés. 8. Ratio primes/salaires Exercice : Pour chaque employé, affichez son nom et le rapport entre sa prime et son salaire. Si la prime est de 0, affichez NULL à la place. Solution : SELECT name, NULLIF(bonus, 0) / salary AS ratio FROM employee; Explication : Lorsque l'on calcule le rapport entre le salaire et la prime, il faut se rappeler que la prime peut être égale à 0 et que l'on ne veut pas afficher 0 dans le résultat final. Pour éviter cela, nous pouvons utiliser la fonction NULLIF() avec la colonne des primes. Cette fonction vérifie si le bonus est 0; si c'est le cas, elle remplace le 0 par NULL. Toutes les opérations arithmétiques qui incluent NULL se traduiront par le retour de NULL. Ainsi, si le bonus est NULL, le ratio sera également NULL. 9. Effectifs départementaux Exercice : Pour chaque département, comptez le nombre d'employés qui y travaillent. Incluez tous les départements, même ceux auxquels aucun employé n'est affecté. Ne tenez pas compte des employés sans département. Solution : SELECT department.name AS department, COUNT(employee.id) AS employees FROM department LEFT JOIN employee ON department.id = employee.department_id GROUP BY department.name, department.id; Explication : Rejoignez les department et employee et les tables. Pour s'assurer que les départements sans employés apparaissent dans le résultat, utilisez LEFT JOIN et placez la table department en premier. Comptez les ID des employés pour éviter de compter les lignes NULL, et regroupez le résultat par le nom du département et id (au cas où deux départements auraient le même nom). 10. Rôles par département Exercice : Affichez le nom de chaque département, la région et le nombre de rôles différents au sein de celui-ci. Veillez à ce qu'il y ait une section "non assigné" pour les employés qui n'ont pas de département assigné. Solution : SELECT COALESCE(department.name, ‘unassigned’) AS department, region, COUNT(DISTINCT position) AS different_positions FROM department FULL OUTER JOIN employee ON employee.department_id = department.id GROUP BY department.region, department.name, department.id Explication : Joignez les sections department et employee à l'aide d'une adresse FULL OUTER JOIN pour vous assurer que les départements sans employés et les employés sans départements sont affichés. L'ordre des tables n'a pas d'importance ici. Pour traiter les employés sans département, utilisez la fonction COALESCE() pour remplacer le nom du département par ‘unassigned’. Comptez le nombre de postes différents dans chaque département à l'aide de la fonction COUNT(DISTINCT position). Pour en savoir plus sur l'utilisation du mot-clé DISTINCT, consultez notre article sur le livre de recettes. Regroupez les résultats en fonction de la région, du nom et de l'identifiant du département. Notez que 'unassigned' est l'un des groupes résultants. Vous avez soif d'autres exercices pratiques SQL NULL ? C'est bien joué ! Vous avez appris pas mal de choses sur la manipulation des NULL en SQL ! Si vous voulez d'autres exercices pratiques, consultez notre pisteLa pratique du SQL . En plus des NULL, elle couvre tous les sujets possibles pour vous aider à maintenir vos compétences SQL à jour. Bonne pratique ! Tags: pratique sql