SQL
Structured Query
Language
Le langage standard pour interagir avec les bases de données relationnelles.
SQL : Trois langages en un
SQL regroupe en réalité trois sous-langages complémentaires, chacun ayant un rôle précis dans la gestion des données.
LDD — Langage de Définition de LMD — Manipulation de Données Langage de Requêtes
Données
• INSERT — insérer des tuples • SELECT … FROM … WHERE
• CREATE TABLE — créer une table • UPDATE — mettre à jour des tuples • Interrogation et extraction des données
• ALTER TABLE — modifier une table • DELETE — supprimer des tuples • Jointures, agrégations, sous-requêtes
• DROP TABLE — supprimer une table
• CREATE VIEW — créer une vue
CHAPITRE 2
SQL — Un langage de
manipulation de données
Le LMD (Langage de Manipulation de Données) permet d'insérer, de modifier et de
supprimer les données contenues dans les tables.
Les commandes DML
Le langage de manipulation de données comprend trois commandes fondamentales pour gérer le contenu des tables :
INSERT INTO UPDATE DELETE FROM
Ajouter un ou plusieurs tuples dans une Modifier les valeurs de colonnes dans des Éliminer des tuples d'une table ou d'une
table ou une vue. tuples existants, selon une condition. vue selon une condition.
Ces trois commandes modifient les données de façon permanente (sauf si vous utilisez des transactions). Vérifiez toujours votre clause
WHERE avant d'exécuter.
INSERT INTO — Syntaxe
La commande INSERT INTO permet d'ajouter un ou plusieurs enregistrements dans une table. La liste des colonnes est optionnelle si vous
fournissez les valeurs dans l'ordre de définition.
INSERT INTO {nom_table | nom_vue}
[(nom_col (, nom_col)*)]
{ VALUES (valeur (, valeur)*) | sous-requête };
Avec liste de colonnes Sans liste de colonnes Via sous-requête
Recommandé — plus lisible, ordre flexible, Toutes les colonnes doivent être fournies Insérer des données provenant d'une autre
colonnes omissibles. dans l'ordre exact de la table. table avec un SELECT.
Insertion sans préciser les colonnes
Nous travaillons sur la table Emprunteur composée de 4 colonnes : id, nom, prenom, annee_insc.
-- Insertion avec toutes les valeurs explicites
INSERT INTO Emprunteur
VALUES (1, 'Buard', 'Jeremy', '2018');
-- Utilisation de NULL pour l'id (AUTO_INCREMENT) et l'année
INSERT INTO Emprunteur
VALUES (NULL, 'Zuckerberg', 'Mark', NULL);
-- → Insère un tuple avec id=2 et annee_insc=NULL
Passer NULL pour un champ AUTO_INCREMENT demande à MySQL de générer automatiquement la prochaine valeur disponible.
Insertion en précisant les colonnes
Il est recommandé de toujours préciser les colonnes : cela rend le code plus lisible et permet d'omettre les colonnes ayant une valeur par défaut.
-- Insertion avec toutes les colonnes précisées
INSERT INTO Emprunteur (nom, prenom, annee_insc)
VALUES ('Chan', 'Priscilla', '2018');
-- Omission de annee_insc → valeur DEFAULT = 2018
INSERT INTO Emprunteur (nom, prenom)
VALUES ('Gates', 'Bill');
-- → Insère un tuple avec annee_insc = 2018
Préciser les colonnes protège votre code contre les changements de structure de la table (ajout ou réorganisation de colonnes).
Insertion multiple
MySQL permet d'insérer plusieurs tuples en une seule commande INSERT INTO, ce qui est bien plus efficace que plusieurs requêtes séparées :
INSERT INTO Emprunteur (nom, prenom, annee_insc)
VALUES
('Jobs', 'Steve', '2010'),
('Moskovitz', 'Dustin', '2011'),
('Musk', 'Elon', '2013');
L'insertion multiple est beaucoup plus performante que des INSERT individuels, car elle réduit le nombre d'allers-retours avec le serveur de
base de données. À privilégier pour les insertions en lot.
UPDATE — Mettre à jour des données
La commande UPDATE modifie les valeurs de colonnes pour les tuples qui satisfont la condition WHERE.
-- Syntaxe
UPDATE {nom_table | nom_vue}
SET nom_col = {valeur | (sous-requête)} [, ...]
WHERE condition;
-- Exemple 1 : modifier l'année d'un emprunteur spécifique
UPDATE Emprunteur
SET annee_insc = '2019'
WHERE nom = 'Musk';
-- Exemple 2 : incrémenter l'année des premiers emprunteurs
UPDATE Emprunteur
SET annee_insc = annee_insc + 2
WHERE id < 3;
Sans clause WHERE, tous les tuples de la table seront modifiés ! Toujours vérifier sa condition avant d'exécuter.
DELETE FROM — Supprimer des données
La commande DELETE FROM supprime les tuples qui satisfont la condition spécifiée.
-- Syntaxe
DELETE FROM {nom_table | nom_vue}
WHERE condition;
-- Exemple : supprimer les emprunteurs inscrits avant 2000
DELETE FROM Emprunteur
WHERE annee_insc < 2000;
Danger ! Un DELETE FROM Emprunteur sans WHERE supprime toutes les lignes de la table (la structure reste, mais les données
disparaissent). Utilisez TRUNCATE si c'est votre intention.