Journée portes ouvertes - Découvrez les métiers de la data et comment vous y former le 8 janvier à 18h30
Journée portes ouvertes - Découvrez les métiers de la data et comment vous y former le 8 janvier à 18h30
Journée portes ouvertes - Découvrez les métiers de la data et comment vous y former le 8 janvier à 18h30
Je m'inscris
Mercredi 08 janvier de 18h30 à 19h
Journée portes ouvertes - Découvrez les métiers de la data et comment vous y former

Nouvelle année, nouvelles ambitions ! Prêt(e) à donner un nouveau tournant à votre carrière en 2025 ? Rejoignez-nous mercredi 8 janvier à 18h30 pour notre JPO en LIVE ! 🎁 En cadeau, repartez avec notre Data & IA Report pour tout savoir des tendances 2025 !

Je m'inscris

Apprendre SQL : Tutoriel étape par étape pour débutants

Apprenez SQL pas à pas avec ce tutoriel ultra-pédagogique et facile à suivre pour maîtriser les bases du langage SQL.

Antoine Grignola
Co-fondateur de DataBird
Mis à jour le
2/1/2025

Découvrez notre formation outil dédiée à SQL.

Découvrir

SQL, ou Structured Query Language, est l’outil clé pour interagir avec les bases de données.

Que vous soyez débutant en programmation ou que vous cherchiez à comprendre comment manipuler des informations dans un système de gestion de base de données (SGBD), ce tutoriel vous guidera étape par étape à travers les bases de SQL.

Ensemble, nous allons explorer les commandes les plus courantes, avec des exemples simples, pratiques et concrets pour vous aider à mieux comprendre pourquoi apprendre SQL peut être une bonne idée !

Qu’est-ce que SQL et pourquoi est-ce important ?

Définition de SQL

SQL est un langage qui vous permet de communiquer avec des bases de données relationnelles

Imaginons une base de données comme une bibliothèque géante. SQL serait alors comme un bibliothécaire qui vous aide à trouver des livres, les organiser, en ajouter de nouveaux ou en retirer, tout cela de manière ordonnée et logique.

Pourquoi utiliser SQL dans la gestion des données ?

SQL est un langage standardisé utilisé par la majorité des entreprises et des systèmes pour stocker et manipuler des informations, comme des informations clients, des commandes, ou des produits. 

Avec SQL, vous avez la possibilité de manipuler les données de manière très ciblée et précise

Par exemple, si vous souhaitez obtenir une liste de tous les clients résidant dans une ville spécifique, SQL permet de filtrer les résultats pour extraire uniquement ces informations

Cela devient particulièrement utile lorsque votre base de données contient de nombreux enregistrements, et que vous devez rapidement accéder à une sélection de données.

En plus de la consultation, SQL offre des moyens de mettre à jour les informations existantes. Imaginez qu’un client ait déménagé et que son adresse dans la base de données soit incorrecte. 

Avec SQL, vous pouvez modifier précisément cette donnée sans affecter le reste des informations de la base, en spécifiant le client et le champ à mettre à jour.

Enfin, SQL permet d’organiser et d’analyser les données selon des besoins spécifiques. Que ce soit pour trier les informations par date, regrouper les données similaires, ou calculer des statistiques (comme la moyenne des dépenses de chaque client), SQL offre des outils puissants pour structurer les informations et obtenir des réponses claires aux questions que vous vous posez.

Comment démarrer avec SQL : Premiers pas

Choisir un environnement SQL : Bases de données locales ou hébergées

Avant de commencer, choisissez où vous allez exécuter vos commandes SQL :

  • Localement : vous pouvez installer un logiciel de base de données comme MySQL sur votre ordinateur, ce qui est idéal pour les tests et l’apprentissage.
  • Sur le Cloud : si vous préférez une solution hébergée, des services comme Google BigQuery ou Amazon RDS permettent d’utiliser une base de données sans installation.

Installation de MySQL (ou autre SGBD) sur votre machine

  1. Téléchargez MySQL : rendez-vous sur le site officiel de MySQL et suivez les étapes d’installation.
  1. Lancez MySQL dans le terminal : Une fois installé, ouvrez le terminal, tapez mysql -u root -p, entrez votre mot de passe et vous pourrez commencer à exécuter vos premières requêtes SQL.

Exemple de Base de Données Relationnelle : Boutique en Ligne

Pour illustrer les prochains concepts avec des exemples concrets, imaginons une base de données pour une boutique en ligne

Cette base de données contient plusieurs tables reliées entre elles : clients, commandes, produits, et commandes_produits. 

Création de la Base de Données

Avant de créer les tables, commencez par créer la base de données où elles seront stockées :

CREATE DATABASE boutique_en_ligne;USE boutique_en_ligne;

La commande USE boutique_en_ligne; permet de sélectionner cette base de données pour exécuter les commandes suivantes à l'intérieur de celle-ci.

Création des tables 

La table clients stocke les informations des clients de la boutique en ligne. Chaque client a un identifiant unique (id), un nom, un email, une ville et une date d'inscription.

CREATE TABLE clients (
id INT PRIMARY KEY AUTO_INCREMENT,    
nom VARCHAR(50),    
email VARCHAR(100),    
ville VARCHAR(50),    
date_inscription DATE);

La table commandes enregistre chaque commande passée par les clients. Elle utilise une clé étrangère client_id pour référencer le client qui a passé la commande.

CREATE TABLE commandes (    
id INT PRIMARY KEY AUTO_INCREMENT,    
client_id INT,    date_commande DATE,    
montant_total DECIMAL(10, 2),    
FOREIGN KEY (client_id) REFERENCES clients(id));

La table produits stocke les informations sur les produits disponibles dans la boutique, y compris un identifiant unique, un nom et un prix.

CREATE TABLE produits (    
id INT PRIMARY KEY AUTO_INCREMENT,    
nom VARCHAR(50),    
prix DECIMAL(10, 2)
);

La table commandes_produits relie les commandes aux produits, permettant d’enregistrer chaque produit acheté dans chaque commande et la quantité commandée

Cette table utilise deux clés étrangères : commande_id pour référencer la table commandes et produit_id pour référencer la table produits.

CREATE TABLE commandes_produits (    
commande_id INT,    
produit_id INT,    
quantité INT,    
FOREIGN KEY (commande_id) REFERENCES commandes(id),    
FOREIGN KEY (produit_id) REFERENCES produits(id)
);

Insérer des données dans les tables

Pour tester les tables, insérez quelques données d'exemple.

INSERT INTO clients (nom, email, ville, date_inscription) VALUES ('Alice', 'alice@example.com', 'Paris', '2024-01-01');
INSERT INTO clients (nom, email, ville, date_inscription) VALUES ('Bob', 'bob@example.com', 'Lyon', '2024-02-15');

INSERT INTO produits (nom, prix) VALUES ('Produit A', 20.00);
INSERT INTO produits (nom, prix) VALUES ('Produit B', 35.00);

INSERT INTO commandes (client_id, date_commande, montant_total) VALUES (1, '2024-03-01', 55.00);

INSERT INTO commandes_produits (commande_id, produit_id, quantité) VALUES (1, 1, 1);
INSERT INTO commandes_produits (commande_id, produit_id, quantité) VALUES (1, 2, 1);

La première commande SQL : SELECT

Syntaxe de base de SELECT

La commande SELECT est l’outil principal pour consulter les données dans une base de données. Elle permet d'extraire des informations spécifiques d'une ou plusieurs tables.

Par exemple, pour voir tous les enregistrements dans la table clients :

SELECT * FROM clients;

Exemples pratiques pour sélectionner des données

Imaginons que vous gérez la boutique en ligne et que vous souhaitiez obtenir la liste des clients et leurs informations spécifiques.

Afficher toutes les informations sur les clients :

SELECT * FROM clients;

Afficher seulement les noms et les emails :

SELECT nom, email FROM clients;

Ces requêtes sont utiles pour extraire exactement les informations dont vous avez besoin.

Filtrer des données avec WHERE

Comment utiliser la clause WHERE ?

La clause WHERE permet de filtrer les résultats. Supposons que vous voulez voir uniquement les clients qui vivent à Paris.

SELECT * FROM clients WHERE ville = 'Paris';

Ajouter des conditions logiques : AND, OR

Vous pouvez combiner plusieurs conditions pour affiner encore plus les résultats :

Trouver les clients parisiens âgés de plus de 25 ans :

SELECT * FROM clients WHERE ville = 'Paris' AND email = alice@example.com;

Trouver les clients parisiens ou lyonnais :

SELECT * FROM clients WHERE ville = 'Paris' OR ville = 'Lyon';

Trier et organiser les résultats avec ORDER BY

Trier les données en fonction de différentes colonnes

Pour organiser les résultats par ordre alphabétique ou numérique, utilisez ORDER BY.

SELECT * FROM clients ORDER BY nom;

Exemples d’utilisation d’ORDER BY avec ASC et DESC

Vous pouvez aussi trier dans l’ordre décroissant pour afficher, par exemple, les clients les plus récents en premier.

SELECT * FROM clients ORDER BY date_inscription DESC;

Limiter le nombre de résultats avec LIMIT

Quand et pourquoi utiliser LIMIT ?

La commande LIMIT est idéale pour limiter le nombre de résultats renvoyés. Utile si vous ne voulez afficher qu’une partie des données, par exemple pour voir les 10 derniers achats.

Exemples pratiques pour extraire les 10 premiers résultats

SELECT * FROM commandes ORDER BY date_commande DESC LIMIT 10;

Regrouper les résultats avec GROUP BY

Utilisation de GROUP BY pour regrouper des résultats similaires

Supposons que vous voulez savoir combien de commandes chaque client a passées

GROUP BY permet de regrouper les enregistrements ayant la même valeur dans une colonne.

SELECT client_id, COUNT(*) FROM commandes GROUP BY client_id;

Cas pratique : Calculer le nombre de commandes par client

Pour chaque client, cette commande compte combien de fois leur identifiant apparaît dans la table commandes, ce qui représente le nombre de commandes qu’ils ont passées.

SELECT client_id, COUNT(*) AS nombre_commandes FROM commandes GROUP BY client_id;

Ce regroupement est utile pour savoir combien de commandes chaque client a passées.

Insérer des données avec INSERT INTO

Syntaxe de la commande INSERT

Pour ajouter de nouvelles informations dans votre table, utilisez la commande INSERT INTO.

INSERT INTO clients (nom, email, ville, date_inscription) VALUES ('Arthur', 'arthur@example.com', 'Lyon', '2022-03-01');

Exemples d'insertion de nouvelles lignes dans une table

Imaginons que vous venez d’inscrire un nouveau produit dans votre magasin :

INSERT INTO produits (nom, prix) VALUES ('Produit F', 40.00);

Mettre à jour des données avec UPDATE

Comment utiliser UPDATE pour modifier des enregistrements existants

Si un client déménage, utilisez UPDATE pour mettre à jour l’information dans votre base de données.

Cas d'usage : Mise à jour de l’adresse d’un client dans une table

Ici, nous changeons la ville d’un client qui a déménagé, en ciblant uniquement son nom dans la table clients.

UPDATE clients SET ville = 'Marseille' WHERE nom = 'Alice';

Supprimer des données avec DELETE

Syntaxe de la commande DELETE

La commande DELETE permet de supprimer des enregistrements

Attention : Utilisez toujours une condition WHERE pour éviter de supprimer toutes les données d'une table par accident.

DELETE FROM clients WHERE nom = 'Bob';

Précautions à prendre avant de supprimer des données

Comme dit précédemment, assurez-vous d’ajouter une condition, sinon tous les enregistrements de la table seront supprimés !

Les fonctions SQL utiles pour manipuler les données

Les fonctions d'agrégation de SQL, comme COUNT(), AVG(), et SUM(), sont des outils puissants pour effectuer des calculs rapides sur des ensembles de données

Voici un aperçu détaillé de leur utilisation avec des exemples concrets.

COUNT(), AVG(), SUM() : Fonctions d’agrégation

COUNT()

Cette fonction compte le nombre de lignes répondant à certains critères

Par exemple, dans une table commandes, si vous souhaitez connaître le nombre total de commandes :

SELECT COUNT(*) FROM commandes;

Vous pouvez aussi utiliser COUNT() pour compter uniquement les commandes d’un client spécifique, par exemple pour le client avec l’identifiant 1 :

SELECT COUNT(*) FROM commandes WHERE client_id = 1;

AVG()

Par exemple, calculons le prix moyen des produits :

SELECT AVG(prix) FROM produits;

SUM()

Si vous voulez calculer le montant total des ventes dans une table commandes :

SELECT SUM(montant_total) FROM commandes;

Joindre des tables avec JOIN

Dans une base de données relationnelle, il est fréquent de vouloir lier des données de plusieurs tables pour obtenir des informations complètes et croisées

C'est là qu'intervient la commande JOIN, qui permet de relier des tables entre elles en fonction de colonnes communes, généralement des clés primaires et étrangères.

Différences entre INNER JOIN, LEFT JOIN, RIGHT JOIN

INNER JOIN

Cette jointure affiche uniquement les enregistrements qui ont des correspondances dans les deux tables.

Si vous voulez voir uniquement les commandes passées par des clients existants, vous pouvez utiliser un INNER JOIN pour lier la table commandes avec clients sur la clé étrangère client_id.

SELECT clients.nom, commandes.date_commande, commandes.montant_total

FROM commandes

INNER JOIN clients ON commandes.client_id = clients.id;

Cette requête affiche le nom du client, la date de la commande, et le montant total, mais seulement pour les commandes avec un client valide associé.

LEFT JOIN

Ce type de jointure inclut tous les enregistrements de la table de gauche (ici, clients), même si certains n’ont pas de correspondance dans la table de droite (commandes). 

Si vous voulez afficher tous les clients, y compris ceux qui n'ont pas passé de commande, vous pouvez utiliser un LEFT JOIN.

SELECT clients.nom, commandes.date_commande, commandes.montant_total

FROM clients

LEFT JOIN commandes ON clients.id = commandes.client_id;

Avec cette requête, les clients sans commande auront des valeurs NULL dans les colonnes date_commande et montant_total.

RIGHT JOIN

Similaire au LEFT JOIN, mais il inclut tous les enregistrements de la table de droite (ici, commandes) même si certains n’ont pas de correspondance dans la table de gauche (clients). 

Cela peut être utile pour voir toutes les commandes, même si elles n’ont pas de client associé.

SELECT commandes.id, clients.nom, commandes.date_commande, commandes.montant_total

FROM commandes

RIGHT JOIN clients ON commandes.client_id = clients.id;

Cette requête est moins courante que LEFT JOIN, mais elle peut être utile pour s'assurer qu'aucune commande n'est laissée de côté.

Exemples d'utilisation pour lier des données de plusieurs tables

Afficher tous les produits commandés avec les noms des clients

Utilisez un JOIN pour lier commandes, clients, commandes_produits, et produits.

Cette requête liste chaque produit dans chaque commande avec le nom du client qui l’a commandé.

SELECT clients.nom AS client_nom, produits.nom AS produit_nom, commandes_produits.quantité, commandes.date_commande

FROM clients

JOIN commandes ON clients.id = commandes.client_id

JOIN commandes_produits ON commandes.id = commandes_produits.commande_id

JOIN produits ON produits.id = commandes_produits.produit_id;

Calculer le montant total des ventes par client

En liant clients et commandes, cette requête affiche le montant total dépensé par chaque client.

SELECT clients.nom, SUM(commandes.montant_total) AS total_depenses

FROM clients

JOIN commandes ON clients.id = commandes.client_id

GROUP BY clients.nom;

Cas pratique complet : Créer une base de données de A à Z

Cet exemple d’une base de données d’une bibliothèque illustre comment gérer les données liées aux livres, aux auteurs, aux genres, et aux emprunts réalisés par les membres de la bibliothèque

Créer une nouvelle base de données et une table

Créez la base de données :

CREATE DATABASE bibliotheque;

USE bibliotheque;

Créez les tables principales : livres, membres, et emprunts.

CREATE TABLE livres (

    id INT PRIMARY KEY AUTO_INCREMENT,

    titre VARCHAR(100),

    auteur VARCHAR(50),

    annee_publication YEAR,

    disponible BOOLEAN

);

CREATE TABLE membres (

    id INT PRIMARY KEY AUTO_INCREMENT,

    nom VARCHAR(50),

    prenom VARCHAR(50),

    date_inscription DATE

);

CREATE TABLE emprunts (

    id INT PRIMARY KEY AUTO_INCREMENT,

    membre_id INT,

    livre_id INT,

    date_emprunt DATE,

    date_retour DATE,

    FOREIGN KEY (membre_id) REFERENCES membres(id),

    FOREIGN KEY (livre_id) REFERENCES livres(id)

);

Insérer des données dans la table

Ajoutons des livres :

INSERT INTO livres (titre, auteur, annee_publication, disponible) VALUES 

('Le Vieil Homme et la Mer', 'Ernest Hemingway', 1952, TRUE),

('1984', 'George Orwell', 1949, TRUE);

Ajoutons des membres : 

INSERT INTO membres (nom, prenom, date_inscription) VALUES 

('Dupont', 'Marie', '2024-01-15'),

('Martin', 'Paul', '2024-02-20');

Enregistrons un emprunt de livre : 

INSERT INTO emprunts (membre_id, livre_id, date_emprunt, date_retour) 

VALUES (1, 1, '2024-03-01', NULL);

Effectuer des requêtes de sélection, d’insertion et de mise à jour

Affichons tous les livres disponibles:

SELECT titre, auteur FROM livres WHERE disponible = TRUE;

Enregistrons le retour d’un livre par un client :

Pour marquer le livre comme retourné, nous mettons à jour date_retour dans emprunts et disponible dans livres.

UPDATE emprunts SET date_retour = '2024-03-10' WHERE id = 1;

UPDATE livres SET disponible = TRUE WHERE id = 1;

Ajoutons un nouvel emprunt pour un autre membre :

INSERT INTO emprunts (membre_id, livre_id, date_emprunt, date_retour) 

VALUES (2, 2, '2024-04-01', NULL);

Exemples de requêtes SQL pour la gestion des données

Listons les emprunts en cours (livres non retournés) :

SELECT membres.nom, membres.prenom, livres.titre, emprunts.date_emprunt

FROM emprunts

JOIN membres ON emprunts.membre_id = membres.id

JOIN livres ON emprunts.livre_id = livres.id

WHERE emprunts.date_retour IS NULL;

Cette requête affiche les emprunts actifs, incluant les noms des membres et les titres des livres empruntés.

Cela indique que Paul n’a pas encore rendu le livre 1984.

Si nous souhaitons voir le nombre de livres empruntés par chaque membre :

SELECT membres.nom, membres.prenom, COUNT(emprunts.id) AS nombre_emprunts

FROM membres

LEFT JOIN emprunts ON membres.id = emprunts.membre_id

GROUP BY membres.nom, membres.prenom;

Nous voyons que que Marie et Paul ont chacun emprunté un seul livre.

Affichons l'historique des emprunts d’un livre spécifique, ici le livre ‘1984’ :

SELECT membres.nom, membres.prenom, emprunts.date_emprunt, emprunts.date_retour

FROM emprunts

JOIN membres ON emprunts.membre_id = membres.id

JOIN livres ON emprunts.livre_id = livres.id

WHERE livres.titre = '1984';

Ce résultat de requête indique que seul Paul a emprunté le livre ‘1984’ le 1er avril 2024, et qu’il ne l’a toujours pas rendu à la bibliothèque.

Apprendre SQL est un atout essentiel pour manipuler et interroger des bases de données

Ce tutoriel vous a permis d'explorer les fondamentaux, de la création de tables aux requêtes de sélection et d’agrégation. Vous devriez maintenant être à l’aise pour construire une base de données simple et interagir avec ses données.

Pour aller plus loin, découvrez d'autres ressources sur le blog DataBird, comme Introduction à SQL pour les débutants ou Les jointures SQL expliquées, et approfondissez vos compétences SQL !

Faites un premier pas dans la data avec nos cours gratuits
Démarrer
Difficulté :
Moyenne