Retour à la liste des articles Articles
14 minutes de lecture

SQL pour l'analyse de données : 15 exercices pratiques avec solutions

Vous êtes nouveau dans le monde du SQL et vous souhaitez découvrir la puissance de l'analyse des données ? Dans cet article, nous allons améliorer nos compétences en SQL grâce à 15 exercices pratiques conçus spécialement pour les débutants. Car en matière de SQL, c'est en forgeant qu'on devient forgeron !

Nous allons mettre en lumière le domaine critique de l'analyse des données, où le langage SQL occupe une place centrale. SQL, ou Structured Query Language, joue un rôle essentiel dans l'analyse des données. Il fournit un cadre solide pour l'interrogation, la transformation et l'extraction d'informations inestimables à partir de bases de données. Si vous souhaitez approfondir votre connaissance du langage SQL et devenir un maître de l'analyse des données, vous pouvez consulter des informations et des ressources supplémentaires dans notre article Apprendre le langage SQL pour l'analyse des données.

Nous n'allons pas vous ennuyer avec de la théorie. Au contraire, nous croyons fermement au pouvoir de l'apprentissage par l'expérience pratique. C'est pourquoi nous avons rassemblé une collection de 15 exercices SQL pour débutants qui vous plongent dans l'art de l'analyse de données, tout en utilisant un ensemble de données réelles provenant d'un magasin.

Ces exercices sont tirés de notre cours complet, Basic La pratique du SQL: A Store, qui propose un total de 169 exercices interactifs en ligne. Les exercices de l'article sont regroupés en différents thèmes : requêtes sur une seule table, requêtes JOIN, requêtes ORDER BY, exercices GROUP BY et autres fonctionnalités. Si vous appréciez ces exercices, vous voudrez sans aucun doute explorer le cours pour une expérience d'apprentissage plus approfondie.

Maintenant, préparez-vous à retrousser vos manches et à vous immerger complètement dans le domaine de l'analyse de données à l'aide de SQL !

Présentation de la base de données du magasin

La base de données du magasin se compose de six tables, chacune ayant un but unique et étant structurée pour des fonctions spécifiques. Ces tables sont essentielles pour les exercices SQL en cours, et il est important d'acquérir une compréhension complète de leurs composants. Vous trouverez ci-dessous une brève description de chaque table.

SQL pour l'analyse des données
  • employee: Contient les détails de l'employé comme l'ID, le nom, la date de naissance, l'adresse, la ville, le pays et le superviseur immédiat.
  • customer: Stocke les informations relatives aux clients, notamment l'identifiant, le nom, la société, l'adresse électronique, l'adresse, la ville et le pays du client.
  • purchase: Enregistre les détails de la commande, y compris l'identifiant de la commande, l'identifiant du client (qui a passé la commande), l'employé (qui a assuré le service après-vente), le prix total et les détails de l'achat et de l'expédition.
  • purchase_item: relie les achats aux produits par l'intermédiaire de l'ID, du produit, du prix unitaire et de la quantité.
  • category: Fournit des informations sur les catégories de produits à l'aide de l'ID de la catégorie, du nom, de la description et de l'ID de la catégorie parente.
  • product: Liste les produits du magasin et inclut l'ID du produit, le nom du produit, l'ID de la catégorie, la quantité par unité, le prix unitaire, les unités en stock et l'état du produit.

Maintenant que nous avons une meilleure compréhension des tables de la base de données du magasin, nous allons nous plonger dans quelques exercices SQL pour vous aider à affiner vos compétences en matière d'analyse de données.

Exercices SQL d'analyse de données

La pratique étant essentielle pour développer et affiner vos compétences en SQL, ces exercices vous seront d'une aide précieuse. Nous avons même créé une feuille de contrôle SQL pour l'analyse de données afin de vous faciliter la tâche ! Vous pouvez la garder à portée de main pendant que vous parcourez les 15 exercices SQL suivants.

Requêtes sur une seule table

Dans cette section, nous allons nous concentrer sur les requêtes SQL impliquant une seule table. Ces exercices vous aideront à maîtriser l'art fondamental de la récupération, du filtrage et de l'utilisation des données d'un seul ensemble de données.

Exercice 1 : Tous les produits

Exercice: Affichez toutes les données présentes dans la table product table.

Solution :

SELECT *
FROM product;

Explication de la solution : Cette requête simple permet de récupérer toutes les données de la product table. L'astérisque (*) est utilisé pour indiquer que nous voulons sélectionner toutes les colonnes disponibles dans la table, c'est-à-dire récupérer toutes les données. Après le mot-clé FROM, nous indiquons le nom de la table à partir de laquelle nous effectuons la sélection (ici, la table product).

Exercice 2 : Produits dont le prix unitaire est supérieur à 3,5

Exercice : Afficher les noms des produits dont le prix unitaire est supérieur ou égal à 3,5.

Solution :

Explication de la solution : En utilisant la clause WHERE, nous filtrons les produits product_names dont le prix unitaire est supérieur ou égal à 3,5. La clause WHERE limite les lignes renvoyées par la requête à celles qui répondent aux critères spécifiés.

Exercice 3 : Produits avec des conditions spécifiques pour la catégorie et le prix

Exercice : Afficher les données de tous les produits des catégories dont l'ID est 1 (Aliments) ou 5 (Fruits et légumes) et dont le prix unitaire est supérieur à 3,5.

Solution :

SELECT *
FROM product
WHERE (category_id = 1 OR category_id = 5)
  AND unit_price > 3.5;

Explication de la solution : Cette requête utilise les opérateurs AND et OR pour créer des conditions complexes qui filtrent les produits en fonction de la catégorie et de unit_price.

L'opérateur OR autorise les produits de la catégorie 1 (aliments) ou de la catégorie 5 (fruits et légumes), tandis que l'opérateur AND garantit que les produits sélectionnés doivent avoir un prix unitaire supérieur à 3,5. L'utilisation de parenthèses améliore la lisibilité de la requête.

Requêtes JOIN

Les jointures sont un concept fondamental du langage SQL. Elles sont essentielles pour l'analyse des données car elles vous permettent de combiner et d'analyser des données provenant de différentes sources, ce qui vous permet d'obtenir des informations complètes sur vos ensembles de données. Pour plus d'exercices d'entraînement impliquant des jointures, reportez-vous à notre article SQL Joins : 12 questions d'entraînement avec des réponses détaillées.

Exercice 4 : Produits et catégories

Exercice : Sélectionnez des noms de produits ainsi que leurs catégories. Affichez deux colonnes : product_name et category_name.

Solution :

SELECT
  product_name,
  category.name AS category_name
FROM product
JOIN category
  ON product.category_id = category.category_id;

Explication de la solution : Dans cet exercice, un site INNER JOIN combine des données provenant de la base de données product et category . Un INNER JOIN ne sélectionne que les lignes qui ont des valeurs correspondantes dans les deux tables. Cela permet de s'assurer que seuls les produits ayant les catégories correspondantes sont récupérés, créant ainsi un résultat significatif et précis.

La partie ON de la requête définit la relation entre les deux tables. En outre, l'utilisation d'alias (AS category_name) nous permet de renommer les colonnes selon les besoins de la question.

Exercice 5 : Achats et produits

Exercice : Pour chaque achat, affichez l'identifiant de l'achat, le nom du produit, le prix unitaire au moment de l'achat et la quantité des articles de chaque produit.

La solution :

SELECT
  purchase_id,
  product_name,
  purchase_item.unit_price,
  quantity
FROM purchase_item
JOIN product
  ON purchase_item.product_id = product.product_id;

Explication de la solution : Cette requête combine des données provenant des bases de données purchase_item et product ce qui nous permet d'afficher des informations pertinentes sur les achats. En SQL, les termes INNER JOIN et JOIN sont souvent utilisés de manière interchangeable, mais ils servent le même objectif : récupérer les lignes correspondantes des deux tables.

Exercice 6 : Achats et catégories

Exercice : Pour chaque achat, affichez toutes les catégories de produits achetés lors de cet achat. N'affichez chaque catégorie qu'une seule fois pour chaque achat.

Solution :

SELECT DISTINCT
  purchase_id,
  category.name AS category_name
FROM purchase_item
JOIN product
  ON purchase_item.product_id = product.product_id
JOIN category
  ON product.category_id = category.category_id;

Explication de la solution : Dans cet exercice, nous joignons trois tables : purchase_item, product, et category. La jointure de plus de deux tables est réalisée en connectant séquentiellement chaque table à travers leurs colonnes associées. Pour en savoir plus sur la jointure de plusieurs tables, lisez Comment joindre 3 tables (ou plus) en SQL.

L'utilisation du mot-clé DISTINCT permet de s'assurer que chaque catégorie de produit n'apparaît qu'une seule fois pour chaque achat, ce qui permet d'obtenir une liste claire et concise des catégories associées à chaque achat. Cela peut s'avérer particulièrement utile lorsque vous souhaitez éviter les informations redondantes dans votre ensemble de résultats.

Requêtes ORDER BY

Le tri des données est une étape cruciale de l'analyse des données car il permet d'organiser les informations de manière structurée et significative. Les exercices suivants vous apprendront à organiser les données de manière pertinente à des fins de rapport et d'analyse.

Exercice 7 : Catégories triées

Exercice : Affichez les données de toutes les catégories. Triez les catégories par nom dans l'ordre croissant (de A à Z).

Solution :

SELECT *
FROM category
ORDER BY name ASC;

Explication de la solution : Dans cet exercice, nous utilisons la clause ORDER BY pour trier les résultats du tableau par ordre croissant en fonction de la colonne . category par ordre croissant sur la base de la colonne name. Cette disposition vous permet d'afficher les catégories par ordre alphabétique. Le mot-clé ASC est ici facultatif ; il représente l'ordre de tri par défaut, c'est-à-dire l'ordre croissant.

Exercice 8 : Employés triés par date de naissance

Exercice : Affichez les noms, prénoms et dates de naissance des employés. Triez les résultats en fonction de l'âge de l'employé par ordre croissant(Astuce : utilisez la colonnebirth_date ).

Solution :

SELECT
  last_name,
  first_name,
  birth_date
FROM employee
ORDER BY birth_date DESC;

Explication de la solution : Comme il n'y a pas de colonne d'âge dans notre tableau, nous trions les employés par birth_date dans l'ordre décroissant en utilisant le mot-clé DESC. Le tri par birth_date dans l'ordre décroissant vous permet d'afficher les employés du plus jeune au plus âgé.

L'utilisation de DESC est cruciale ici, car elle inverse l'ordre de tri ascendant par défaut et permet d'obtenir le résultat souhaité.

Exercice 9 : Produits triés par nombre d'unités

Exercice : Afficher les données de tous les produits, en triant les résultats par nombre d'unités en ordre décroissant et par nom de produit en ordre croissant.

Solution :

SELECT *
FROM product
ORDER BY units_in_stock DESC, product_name ASC;

Explication de la solution : Cette requête ordonne les produits d'abord par units_in_stock dans l'ordre décroissant, puis par product_name dans l'ordre croissant. La première condition de tri garantit que les produits ayant le plus grand nombre d'unités en stock apparaissent en tête ; les produits ayant le même nombre d'unités sont ensuite triés par ordre alphabétique de leur nom.

Requêtes GROUP BY

Dans cette section, nous explorons les requêtes SQL qui impliquent le regroupement de données à des fins d'analyse. GROUP BY est essentiel pour agréger et résumer des informations sur la base de critères spécifiques. Pour plus d'informations, consultez la section GROUP BY dans SQL Explained.

Exercice 10 : le prix unitaire moyen pour chaque catégorie

Exercice : Pour chaque catégorie de produit, affichez son nom et trouvez le prix unitaire moyen. Affichez deux colonnes : nom et average_unit_price.

Solution :

SELECT
  category.name,
  AVG(unit_price) AS average_unit_price
FROM product
JOIN category
  ON product.category_id = category.category_id
GROUP BY category.name;

Explication de la solution : Dans cet exercice, nous calculons le prix unitaire moyen pour chaque catégorie de produit. La requête joint les colonnes product et category pour associer les produits à leurs catégories respectives. La clause GROUP BY est ensuite utilisée pour regrouper les données par category_name. En utilisant AVG(), nous pouvons calculer le prix unitaire moyen dans chaque catégorie - ce qui nous donne un aperçu de la distribution des prix dans les différentes catégories de produits.

Exercice 11 : Le nombre de clients dans les villes

Exercice : Comptez le nombre de clients vivant dans chaque ville, à l'exception de Knoxville et Stockton. Triez les résultats en fonction du nom de la ville, par ordre croissant. Affichez deux colonnes : city et customers_quantity.

Solution :

SELECT
  city,
  COUNT(customer_id) AS customers_quantity
FROM customer
WHERE city <> 'Knoxville'
  AND city <> 'Stockton'
GROUP BY city
ORDER BY city;

Explication de la solution : Dans cette requête, nous utilisons la clause WHERE avec l'opérateur <> (qui signifie différent de) pour filtrer les enregistrements dont le nom de ville est Knoxville ou Stockton. Ce filtrage garantit que l'analyse couvre toutes les villes à l'exception de celles spécifiées.

La fonction COUNT() calcule ensuite le nombre de clients pour chacune des villes restantes. La clause GROUP BY regroupe les données par nom de ville, ce qui nous permet de compter les clients pour chaque ville.

Enfin, les résultats sont classés par ordre croissant de ville, ce qui permet d'obtenir une vue claire et organisée de la répartition des clients dans les différentes villes.

Exercice 12 : Le nombre de produits abandonnés

Exercice : Pour chaque catégorie, trouvez le nombre de produits abandonnés. N'affichez que les catégories comportant au moins trois produits abandonnés. Triez les lignes par ordre décroissant du nombre de produits abandonnés. Affichez deux colonnes : name (le nom de la catégorie) et discontinued_products_number.

Solution :

SELECT
  category.name,
  COUNT(product_id) AS discontinued_products_number
FROM product
JOIN category
  ON product.category_id = category.category_id
WHERE discontinued IS TRUE
GROUP BY category.name
HAVING COUNT(product_id) >= 3
ORDER BY COUNT(product_id) DESC;

Explication de la solution : Dans cette requête, nous utilisons la clause HAVING pour filtrer les catégories ayant au moins trois produits abandonnés. La clause HAVING est appliquée après l'opération GROUP BY et nous permet de filtrer les résultats agrégés sur la base d'une condition spécifique. Pour plus d'informations sur l'utilisation de HAVING, lisez nos articles La clause SQL HAVING expliquée et HAVING vs. WHERE en SQL : Ce qu'il faut savoir.

En outre, vous remarquerez l'utilisation de la fonction COUNT() dans la clause ORDER BY. Cette fonction nous permet de trier les lignes en fonction du nombre de produits abandonnés, dans l'ordre décroissant.

La clause ORDER BY est flexible et peut inclure des fonctions d'agrégation, ce qui en fait un outil puissant pour organiser les données sur la base de valeurs agrégées.

Autres fonctions SQL

Dans cette section, nous examinerons d'autres fonctionnalités SQL afin d'élargir votre boîte à outils. Nous explorerons le travail avec les valeurs NULL et le nettoyage des données à l'aide de la fonction ROUND(). Ces fonctionnalités sont essentielles pour gérer des scénarios d'analyse de données complexes.

Exercice 13 : Employés dont la date d'embauche est inconnue

Exercice : Afficher le nom et le prénom des employés dont la date d'embauche est inconnue.

Solution :

SELECT
  last_name,
  first_name
FROM employee
WHERE hire_date IS NULL;

Explication de la solution : Dans cette requête, la clause WHERE avec hire_date IS NULL nous permet de filtrer et de sélectionner les enregistrements où la date d'embauche est manquante. Ce type de requête peut constituer une analyse cruciale pour identifier les enregistrements d'employés incomplets ou les erreurs de saisie dans l'ensemble de données.

Exercice 14 : Nombre d'employés dont les dates de naissance et d'embauche sont inconnues

Exercice : Comptez le nombre d'employés dont les dates de naissance et d'embauche sont inconnues.

Solution :

SELECT
  COUNT(*) AS employees_number
FROM employee
WHERE birth_date IS NULL
  AND hire_date IS NULL;

Explication de la solution : Dans cette requête, nous utilisons à nouveau la condition IS NULL pour filtrer les lignes où birth_date et hire_date sont toutes deux manquantes. Cela nous permet de n'envoyer à COUNT() que les employés dont les dates de naissance et d'embauche ne sont pas connues.

Exercice 15 : Pourcentage de l'argent dépensé par le client lors de l'achat

Exercice : Pour chaque client ayant effectué un achat, affichez l'ID de chaque achat effectué par ce client et le pourcentage d'argent dépensé pour cet achat par rapport à l'ensemble de l'argent dépensé par ce client.

Solution :

SELECT
  contact_name,
  purchase_id,
  ROUND(total_price * 100.0 / (SELECT SUM(total_price) FROM purchase WHERE customer_id = p.customer_id)) AS percentage
FROM purchase p
JOIN customer 
  ON p.customer_id = customer.customer_id;

Explication de la solution : Dans cette solution, nous utilisons deux requêtes. La requête principale intègre une sous-requête dans l'instruction SELECT pour calculer le SUM() des prix totaux des achats effectués par le même client.

Le pourcentage est ensuite calculé à l'aide de la formule fournie et la fonction ROUND() est appliquée pour arrondir le résultat. Cette requête est un outil puissant pour obtenir des informations sur le comportement d'achat de chaque client.

Prêt pour d'autres exercices SQL ?

La maîtrise du langage SQL est une compétence essentielle pour l'analyse des données - et la meilleure façon de l'apprendre est de le faire. Dans cet article, nous avons passé en revue une sélection de 15 exercices SQL pour débutants, tirés de notre cours complet, Basic La pratique du SQL: A Store.

Mais ces exercices ne sont qu'un début. Si vous souhaitez une expérience d'apprentissage plus approfondie, nous vous invitons à explorer notre cours complet qui comprend 169 exercices interactifs. Pour ceux qui souhaitent relever des défis encore plus grands, ce cours n'est qu'un des neuf cours disponibles sur le parcours d'apprentissage La pratique du SQL chacun offrant un format attrayant.

Nous avons également notre piste de pratique mensuelle SQL, qui est régulièrement mise à jour avec de nouveaux exercices pour garder vos compétences aiguisées et à jour avec les derniers développements SQL.

Plongez dans d'autres exercices SQL et vous maîtriserez l'art de l'analyse des données. Votre parcours pour devenir un expert SQL commence par une pratique continue. Alors, continuez à explorer et à perfectionner vos compétences. Le succès est à portée de main !