Vous souhaitez utiliser le langage SQL, par exemple avec MySQL ? La manipulation d’une base de données n’est pas forcément complexe (son administration, c’est autre chose), je me suis fait un petit guide de base des principales commandes, peut-être que cela pourra être utile pour d’autres.
Les bases de données sont le fondement invisible de notre monde numérique moderne. Elles jouent un rôle essentiel dans la gestion de l’information, le stockage des données, et l’accès aux informations cruciales pour les entreprises, les applications, les sites web, et bien plus encore. Cette section est spécialement conçue pour vous guider dans la compréhension des bases de données, depuis les concepts fondamentaux jusqu’aux compétences avancées.
SELECT : Extraire des donnéesLIMIT : sélectionner un nombre limité de lignes
WHERE : sélectionner des lignes selon des conditions
BETWEEN … AND : sélectionner dans une plage de valeur
IN : sélectionner parmi des données prédéfinies
LIKE : rechercher du texte / ou une partie avec SQL
ORDER BY : Trier les données
GROUP BY : Regrouper les données
HAVING : sélectionner des données après un regroupement
JOINTURES : regrouper les lignes de plusieurs tables
SOUS REQUETES : créer une requête dans une requête
UNION : combiner les résultats de deux requêtes SQL
INSERT : Insérer des données dans la base de données MySQL
UPDATE : Mettre à jour des données dans MySQL
DELETE : Supprimer des données dans MySQL
Ci-dessous, vous trouverez un guide de base concernant le langage SQL avec les principales commandes que l’on va retrouver, mais avant cela, il faudra mettre en place votre base de données, je vous propose trois vidéos sur ma chaîne YouTube qui vous présentent comment procéder.
SELECT : Extraire des données
Un des principales commandes SQL à connaître. Comme son nom l’indique elle permet de faire des sélection de données dans une table. j’ai d’ailleurs fait un article complet sur la requête SELECT dans MySQL.
-- Sélectionner toutes les colonnes de tous les enregistrements SELECT * FROM clients; -- Sélectionner uniquement les colonnes nom, prenom, et email de tous les enregistrements SELECT nom, prenom, email FROM clients;
LIMIT : sélectionner un nombre limité de lignes
L’utilisation de la clause LIMIT dans une requête SELECT permet de limiter le nombre d’enregistrements retournés par la requête. C’est particulièrement utile lorsque vous travaillez avec de grandes bases de données et que vous souhaitez obtenir un sous-ensemble de résultats pour, par exemple, implémenter une pagination ou simplement réduire la charge sur le serveur en ne récupérant qu’une partie des données.
-- Sélectionner les 2 premiers enregistrements SELECT * FROM clients LIMIT 2;
WHERE : sélectionner des lignes selon des conditions
La clause WHERE en SQL est utilisée pour filtrer les enregistrements selon une condition spécifique. Lorsqu’elle est combinée avec LIMIT, vous pouvez non seulement filtrer les enregistrements mais aussi limiter le nombre d’enregistrements retournés après le filtrage. Cela est particulièrement utile pour récupérer un petit nombre d’enregistrements qui répondent à une condition spécifique.
-- Sélectionner tous les enregistrements où le nom est 'Dupont' SELECT * FROM clients WHERE nom = 'Dupont';
BETWEEN … AND : sélectionner dans une plage de valeur
La clause BETWEEN … AND en SQL est utilisée pour filtrer les enregistrements selon une plage de valeurs. Elle est utile pour spécifier une condition où une colonne doit avoir une valeur entre deux valeurs inclusives. Cette clause peut être utilisée pour des types de données numériques, des dates, et même des chaînes de caractères, en fonction du contexte.
-- Exemple avec des Nombres: Sélectionner les clients ayant un ID entre 10 et 20 SELECT * FROM clients WHERE client_id BETWEEN 10 AND 20; -- Exemple avec des Dates: Sélectionner les clients inscrits entre le 1er janvier 2023 et le 31 mars 2023 SELECT * FROM clients WHERE date_inscription BETWEEN '2023-01-01' AND '2023-03-31'; -- Exemple avec des Caractères: Sélectionner les clients dont le nom commence par une lettre entre 'A' et 'D' SELECT * FROM clients WHERE nom BETWEEN 'A' AND 'Dzzzz';
IN : sélectionner parmi des données prédéfinies
La clause IN en SQL est utilisée pour spécifier un ensemble de valeurs dans une clause WHERE, permettant de sélectionner les lignes qui ont une des valeurs spécifiées. Cela est particulièrement utile pour filtrer les données selon plusieurs valeurs pour une même colonne sans avoir besoin d’écrire de multiples conditions OR.
-- Exemple avec des Nombres: Sélectionner les clients ayant un ID de 1, 2, 5 ou 7 SELECT * FROM clients WHERE client_id IN (1, 2, 5, 7); -- Exemple avec des Dates: Sélectionner les clients inscrits le 1er janvier 2023, le 15 mars 2023, ou le 30 avril 2023 SELECT * FROM clients WHERE date_inscription IN ('2023-01-01', '2023-03-15', '2023-04-30'); -- Exemple avec des Caractères: Sélectionner les clients dont le nom est "Dupont", "Durand" ou "Martin" SELECT * FROM clients WHERE nom IN ('Dupont', 'Durand', 'Martin');
LIKE : rechercher du texte / ou une partie avec SQL
La clause LIKE en SQL est utilisée pour filtrer les enregistrements en fonction de motifs de correspondance. Elle est particulièrement utile pour rechercher des chaînes de caractères qui correspondent à un modèle spécifié, où % représente zéro ou plusieurs caractères et _ représente un seul caractère.
-- Sélectionner les clients dont le nom commence par "Du" SELECT * FROM clients WHERE nom LIKE 'Du%'; -- Sélectionner les clients dont le prénom commence par "Ma" et contient exactement 5 lettres SELECT * FROM clients WHERE prenom LIKE 'Ma___'; -- Sélectionner les clients dont l'email contient "email.com" SELECT * FROM clients WHERE email LIKE '%email.com%';
ORDER BY : Trier les données
La clause ORDER BY en SQL est utilisée pour trier les résultats d’une requête selon une ou plusieurs colonnes, soit en ordre ascendant (ASC) par défaut, soit en ordre descendant (DESC).
-- Trier les clients par nom de famille dans l'ordre ascendant SELECT * FROM clients ORDER BY nom ASC; -- Trier les clients par date d'inscription dans l'ordre descendant SELECT * FROM clients ORDER BY date_inscription DESC; -- Trier les clients d'abord par nom de famille dans l'ordre ascendant, puis par prénom dans l'ordre ascendant SELECT * FROM clients ORDER BY nom ASC, prenom ASC; -- Trier les clients par nom de famille dans l'ordre descendant, puis par date d'inscription dans l'ordre ascendant SELECT * FROM clients ORDER BY nom DESC, date_inscription ASC; -- Trier les clients par identifiant de client (client_id) dans l'ordre descendant SELECT * FROM clients ORDER BY client_id DESC;
GROUP BY : Regrouper les données
La clause GROUP BY en SQL est utilisée pour regrouper les lignes qui ont les mêmes valeurs dans des colonnes spécifiées en un résumé de lignes, souvent avec des fonctions d’agrégation (COUNT, MAX, MIN, SUM, AVG, etc.).
-- Regrouper les clients par nom de famille et compter le nombre de clients par nom SELECT nom, COUNT(*) AS nombre_de_clients_par_nom FROM clients GROUP BY nom; -- Regrouper les clients par mois d'inscription et compter le nombre de clients inscrits par mois SELECT YEAR(date_inscription) AS annee, MONTH(date_inscription) AS mois, COUNT(*) AS nombre_de_clients_par_mois FROM clients GROUP BY YEAR(date_inscription), MONTH(date_inscription); -- Regrouper les clients par première lettre du prénom et compter le nombre de clients par lettre SELECT LEFT(prenom, 1) AS premiere_lettre_prenom, COUNT(*) AS nombre_de_clients_par_lettre FROM clients GROUP BY LEFT(prenom, 1);
HAVING : sélectionner des données après un regroupement
La clause HAVING en SQL est utilisée en combinaison avec GROUP BY pour filtrer les groupes de résultats selon une condition spécifique, généralement en utilisant des fonctions d’agrégation. Alors que WHERE filtre les lignes avant le regroupement, HAVING filtre les groupes après le regroupement.
-- Filtrer les groupes de clients par nom ayant plus d'un client SELECT nom, COUNT(*) AS nombre_de_clients_par_nom FROM clients GROUP BY nom HAVING COUNT(*) > 1; -- Filtrer les groupes de clients par mois d'inscription ayant au moins 5 inscriptions SELECT YEAR(date_inscription) AS annee, MONTH(date_inscription) AS mois, COUNT(*) AS nombre_de_clients_par_mois FROM clients GROUP BY YEAR (date_inscription), MONTH(date_inscription) HAVING COUNT(*) >= 5; -- Filtrer les groupes de clients par première lettre du prénom ayant plus de 10 clients SELECT LEFT (prenom, 1) AS premiere_lettre_prenom, COUNT(*) AS nombre_de_clients_par_lettre FROM clients GROUP BY LEFT (prenom, 1) HAVING COUNT(*) > 10;
JOINTURES : regrouper les lignes de plusieurs tables
L es jointures en SQL sont utilisées pour combiner les lignes de deux ou plusieurs tables, basées sur une colonne liée entre elles. Voici des exemples illustrant différents types de jointures (INNER JOIN, LEFT JOIN, RIGHT JOIN).
Supposons que nous ayons deux tables, clients et commandes, où chaque client peut avoir zéro ou plusieurs commandes. La table clients contient les informations des clients, et la table commandes contient les informations des commandes passées par les clients.
-- INNER JOIN -- Sélectionner tous les clients et leurs commandes correspondantes SELECT clients.nom, clients.prenom, commandes.details FROM clients INNER JOIN commandes ON clients.client_id = commandes.client_id; -- LEFT JOIN -- Sélectionner tous les clients et leurs commandes, y compris ceux sans commandes SELECT clients.nom, clients.prenom, commandes.details FROM clients LEFT JOIN commandes ON clients.client_id = commandes.client_id; -- RIGHT JOIN -- Sélectionner toutes les commandes et les informations des clients correspondants, y compris les commandes sans client identifié SELECT clients.nom, clients.prenom, commandes.details FROM clients RIGHT JOIN commandes ON clients.client_id = commandes.client_id;
SOUS REQUETES : créer une requête dans une requête
Les sous-requêtes en SQL permettent d’effectuer une requête à l’intérieur d’une autre requête. Elles offrent ainsi plus de flexibilité pour créer des requêtes complexes et pour filtrer, comparer ou évaluer des données sur plusieurs niveaux.
-- Sélectionner les clients ayant passé au moins une commande SELECT nom, prenom FROM clients WHERE client_id IN ( SELECT client_id FROM commandes ); -- Sélectionner le nom et le prénom des clients ainsi que le total de leurs commandes SELECT c.nom, c.prenom, ( SELECT COUNT(*) FROM commandes WHERE client_id = c.client_id ) AS nombre_de_commandes FROM clients c; -- Sélectionner les clients qui ont dépensé plus que la moyenne des dépenses de tous les clients SELECT nom, prenom FROM clients WHERE client_id IN ( SELECT client_id FROM commandes GROUP BY client_id HAVING SUM(montant) > ( SELECT AVG(total) FROM ( SELECT SUM(montant) AS total FROM commandes GROUP BY client_id ) AS moyennes ) ); -- Sélectionner les clients et le montant total de leurs commandes, pour ceux ayant passé des commandes uniquement en 2023 SELECT c.nom, c.prenom, ( SELECT SUM(montant) FROM commandes WHERE client_id = c.client_id AND YEAR(date_commande) = 2023 ) AS total_depenses FROM clients c WHERE EXISTS ( SELECT 1 FROM commandes WHERE client_id = c.client_id AND YEAR(date_commande) = 2023 );
UNION : combiner les résultats de deux requêtes SQL
La commande UNION en SQL est utilisée pour combiner les résultats de deux ou plusieurs requêtes SELECT en un seul ensemble de résultats, en éliminant les doublons. Toutes les requêtes combinées avec UNION doivent avoir le même nombre de colonnes dans les résultats, avec des types de données compatibles.
-- Sélectionner tous les noms uniques des clients et des employés (SELECT nom FROM clients) UNION (SELECT nom FROM employes); -- Sélectionner tous les noms et prénoms des clients et des employés, en les distinguant par un label (SELECT 'Client' AS Type, nom, prenom FROM clients) UNION (SELECT 'Employé' AS Type, nom, prenom FROM employes); -- Combiner les villes des clients et des fournisseurs sans doublons (SELECT ville FROM clients) UNION (SELECT ville FROM fournisseurs); -- Sélectionner les adresses email des clients et des employés, en s'assurant qu'il n'y a pas de doublons (SELECT email FROM clients WHERE email IS NOT NULL) UNION (SELECT email FROM employes WHERE email IS NOT NULL);
INSERT : Insérer des données dans la base de données MySQL
La commande INSERT en SQL est utilisée pour ajouter une ou plusieurs nouvelles lignes à une table dans une base de données. Voici comment différentes utilisations de INSERT peuvent être illustrées dans une unique démonstration, en gardant à l’esprit que ces commandes seraient normalement exécutées séparément selon le besoin spécifique d’ajout de données.
-- Insérer une nouvelle ligne dans la table des clients INSERT INTO clients (nom, prenom, email, ville) VALUES ('Dupont', 'Jean', 'jean.dupont@email.com', 'Paris'); -- Insérer plusieurs nouvelles lignes dans la table des clients en une seule commande INSERT INTO clients (nom, prenom, email, ville) VALUES ('Durand', 'Marie', 'marie.durand@email.com', 'Lyon'), ('Leroy', 'Marc', 'marc.leroy@email.com', 'Marseille'); -- Insérer une nouvelle ligne dans la table des commandes en utilisant des valeurs spécifiques pour les colonnes INSERT INTO commandes (client_id, details, montant, date_commande) VALUES (1, 'Commande de livres', 150, '2024-02-01'); -- Insérer une nouvelle ligne avec une sélection de valeurs à partir d'une autre table INSERT INTO log_activites (utilisateur_id, action, date_heure) SELECT client_id, 'Inscription', NOW() FROM clients WHERE nom = 'Dupont' AND prenom = 'Jean';
UPDATE : Mettre à jour des données dans MySQL
La commande UPDATE en SQL est utilisée pour modifier les données existantes dans une ou plusieurs lignes d’une table. Elle permet de mettre à jour les valeurs dans une table basée sur des conditions spécifiques.
-- Mettre à jour l'adresse email d'un client spécifique UPDATE clients SET email = 'jean.dupontnouveau@email.com' WHERE nom = 'Dupont' AND prenom = 'Jean'; -- Augmenter le montant de toutes les commandes de 10% UPDATE commandes SET montant = montant * 1.10; -- Mettre à jour la ville d'un client et marquer son compte comme vérifié UPDATE clients SET ville = 'Nice', est_verifie = TRUE WHERE client_id = 1; -- Mettre à jour les informations de plusieurs clients en une seule commande en utilisant des conditions complexes UPDATE clients SET email = CASE WHEN nom = 'Durand' THEN 'marie.durandnouveau@email.com' WHEN nom = 'Leroy' THEN 'marc.leroyupdate@email.com' ELSE email END WHERE nom IN ('Durand', 'Leroy');
DELETE : Supprimer des données dans MySQL
La commande DELETE en SQL est utilisée pour supprimer une ou plusieurs lignes d’une table selon des conditions spécifiées.
-- Supprimer un client spécifique par son identifiant DELETE FROM clients WHERE client_id = 1; -- Supprimer tous les clients de la ville de 'Lyon' DELETE FROM clients WHERE ville = 'Lyon'; -- Supprimer les commandes qui ont plus d'un an DELETE FROM commandes WHERE date_commande < DATE_SUB(NOW(), INTERVAL 1 YEAR); -- Supprimer tous les clients qui n'ont pas passé de commande DELETE FROM clients WHERE client_id NOT IN ( SELECT DISTINCT client_id FROM commandes );