- Langage de Manipulation de Données (DML)
1.1 Insertion de données
Syntaxe : INSERT INTO nom_table [champs] VALUES (liste_de_valeurs);
Insérer une seule ligne
Première méthode avec spécification des champs : INSERT INTO employes (identifiant, nom, age) VALUES (1, 'Alice', 28);
Deuxième méthode sans spécification des champs : INSERT INTO employes VALUES (1, 'Alice', 28);
Insérer plusieurs lignes
INSERT INTO employes (identifiant, nom, age) VALUES (1, 'Alice', 28), (2, 'Bob', 34), (3, 'Claire', 42);
Remarque : Pour éviter les erreurs causées par les changements de structure, il est préférable de lister explicitement les champs.
1.2 Mise à jour de données
Syntaxe : UPDATE nom_table SET champ1=valeur1, champ2=valeur2, ..., champN=valeurN [WHERE condition];
-- Exemple : Modifier l'âge de l'employé avec identifiant 5
UPDATE employes SET age = 32 WHERE identifiant = 5;
Remarque : Utilisez des virgules pour séparer les colonnes et ajoutez tuojours une clause WHERE pour cibler les enregistrements.
1.3 Suppression de données
Syntaxe : DELETE FROM nom_table [WHERE condition];
-- Exemple : Supprimer tous les employés (la table reste)
DELETE FROM employes;
-- Exemple : Supprimer l'employé avec identifiant 10
DELETE FROM employes WHERE identifiant = 10;
1.4 Vidage de table
Syntaxe : TRUNCATE TABLE nom_table;
-- Exemple : Vider la table des journaux (les données sont supprimées, la structure reste)
TRUNCATE TABLE journaux;
-- Note : TRUNCATE ne supporte pas la clause WHERE, donc des conditions comme ci-dessous provoquent une erreur
TRUNCATE TABLE journaux WHERE id = 1;
- Langage de Requête de Données (DQL)
DQL (Data Query Language) est utilisé pour interroger les bases de données. Voici les concepts clés.
2.1 Requêtes de base
Syntaxe : SELECT colonnes FROM nom_table;
-- Exemple : Afficher tous les produits
SELECT * FROM produits;
-- Exemple : Afficher uniquement le nom et le prix des produits
SELECT nom, prix FROM produits;
2.2 Opérateurs
Opérateurs arithmétiques : + - * / %
Opérateurs de comparaison : > < = <> >= <= !=
Opérateurs logiques : AND OR NOT (&& || !)
2.3 Requêtes avec conditions
Syntaxe : SELECT colonnes FROM nom_table WHERE condition
-- Exemple : Afficher le produit avec référence 101
SELECT nom, prix FROM produits WHERE reference = 101;
-- Exemple : Trouver le produit nommé 'Souris'
SELECT * FROM produits WHERE nom = 'Souris';
2.4 Requêtes avec conditions multiples
Syntaxe : SELECT colonnes FROM nom_table WHERE condition1 operateur condition2
-- Exemple : Afficher les produits de catégorie 'Électronique' et avec un prix inférieur à 100
SELECT * FROM produits WHERE categorie = 'Électronique' AND prix < 100;
-- Exemple : Afficher les employés du département 'IT' ou 'Ventes'
SELECT * FROM employes WHERE departement = 'IT' OR departement = 'Ventes';
2.5 Requêtes avec LIKE (recherche floue)
Syntaxe : SELECT colonnes FROM nom_table WHERE champ LIKE 'motif'
-- Exemple : Trouver les produits dont le nom contient 'USB'
SELECT * FROM produits WHERE nom LIKE '%USB%';
2.6 Requêtes avec IN
Syntaxe : SELECT colonnes FROM nom_table WHERE champ IN (valeur1, valeur2, ...);
-- Exemple : Afficher les employés avec identifiants 1, 5, ou 10
SELECT * FROM employes WHERE identifiant IN (1, 5, 10);
-- Exemple : Exclure certains employés
SELECT * FROM employes WHERE identifiant NOT IN (2, 3, 4);
2.7 Requêtes avec BETWEEN
Syntaxe : SELECT colonnes FROM nom_table WHERE champ BETWEEN valeur1 AND valeur2;
-- Exemple : Afficher les ventes entre 100 et 500 euros
SELECT * FROM ventes WHERE montant BETWEEN 100 AND 500;
2.8 Requêtes avec DISTINCT (élimintaion des doublons)
Syntaxe : SELECT DISTINCT champ1, champ2, ... FROM nom_table;
-- Exemple : Afficher les catégories uniques de produits
SELECT DISTINCT categorie FROM produits;
-- Exemple : Compter les départements distincts
SELECT DISTINCT departement FROM employes;
2.9 Requêtes avec ORDER BY (tri)
Syntaxe : SELECT colonnes FROM nom_table [WHERE condition] [ORDER BY colonne_tri] [ASC|DESC]
-- Exemple : Trier les produits par prix ascendant
SELECT * FROM produits ORDER BY prix; -- ASC par défaut
-- Exemple : Trier les employés par salaire descendant
SELECT * FROM employes ORDER BY salaire DESC;
2.10 Requêtes avec LIMIT (pagination)
Syntaxe : SELECT colonnes FROM nom_table [WHERE condition] [ORDER BY colonne_tri ASC|DESC] [LIMIT départ, nombre_lignes];
-- Exemple : Afficher les 5 premiers produits
SELECT * FROM produits LIMIT 5;
-- Exemple : Afficher les produits de la ligne 6 à 10
SELECT * FROM produits LIMIT 5, 5; -- Le premier paramètre est l'offset (départ)
- Jointures de tables
Les jointures permettent de combiner des enregistrements de plusieurs tables selon des conditions spécifiques. Une condition commune est que les champs joints doivent être une clé primaire dans une table et une clé étrangère dans l'autre.
3.1 Jointure interne (INNER JOIN)
3.1.1 Jointure explicite
Syntaxe : SELECT champs FROM table1 INNER JOIN table2 ON condition_jointure [WHERE condition]
-- Exemple : Afficher les employés avec leur département
SELECT e.nom AS 'Employé', d.nom AS 'Département'
FROM employes e INNER JOIN departements d ON e.departement_id = d.identifiant;
-- Exemple : Jointure avec filtre sur le département 'IT'
SELECT e.nom 'Employé', d.nom 'Département'
FROM employes e INNER JOIN departements d ON e.departement_id = d.identifiant AND d.nom = 'IT';
3.1.2 Jointure implicite
Syntaxe : SELECT champs FROM table1, table2 WHERE table1.champ = table2.champ
-- Exemple : Afficher les employés avec leur département (style implicite)
SELECT e.nom, d.nom
FROM employes e, departements d
WHERE e.departement_id = d.identifiant;
3.2 Jointures externes
3.2.1 Jointure gauche (LEFT JOIN)
Syntaxe : SELECT champs FROM table1 LEFT JOIN table2 ON condition_jointure [WHERE condition]
-- Exemple : Afficher tous les employés, même ceux sans projet assigné
SELECT e.nom 'Employé', p.nom 'Projet'
FROM employes e LEFT JOIN projets p ON e.projet_id = p.identifiant;
3.2.2 Jointure droite (RIGHT JOIN)
Syntaxe : SELECT champs FROM table1 RIGHT JOIN table2 ON condition_jointure [WHERE condition]
-- Exemple : Afficher tous les projets, même ceux sans employé assigné
SELECT p.nom 'Projet', e.nom 'Employé'
FROM employes e RIGHT JOIN projets p ON e.projet_id = p.identifiant;
3.3 Fonctions d'agrégation
Syntaxe : SELECT fonction_agrégation(champ) FROM nom_table [WHERE condition] [GROUP BY champ]
Fonctions courantes : COUNT() pour compter, SUM() pour sommer, MAX() pour le maximum, MIN() pour le minimum, AVG() pour la moyenne.
-- Exemple : Calculer le salaire moyen des employés
SELECT AVG(salaire) FROM employes;
-- Exemple : Compter le nombre de produits dans chaque catégorie
SELECT categorie, COUNT(*) AS 'Nombre' FROM produits GROUP BY categorie;
3.4 Sous-requêtes
Une sous-requête est une requête imbriquée dans une autre requête.
3.4.1 Sous-requête simple
-- Exemple : Trouver les employés du même département que 'Alice'
SELECT nom FROM employes WHERE departement_id = (SELECT departement_id FROM employes WHERE nom = 'Alice');
3.4.2 Sous-requête avec ANY/SOME
-- Exemple : Afficher les employés dont le salaire est supérieur à au moins un salaire dans le département 'IT'
SELECT * FROM employes WHERE salaire > ANY (SELECT salaire FROM employes WHERE departement = 'IT');
3.4.3 Sous-requête avec ALL
-- Exemple : Trouver les employés avec un salaire supérieur à tous ceux du département 'Support'
SELECT * FROM employes WHERE salaire > ALL (SELECT salaire FROM employes WHERE departement = 'Support');
3.4.4 Sous-requête avec EXISTS
-- Exemple : Afficher les départements qui ont au moins un employé
SELECT * FROM departements d WHERE EXISTS (SELECT * FROM employes e WHERE e.departement_id = d.identifiant);
3.4.5 Sous-requête avec NOT EXISTS
-- Exemple : Créer une table seulement si elle n'existe pas
CREATE TABLE IF NOT EXISTS archives (id INT PRIMARY KEY, description VARCHAR(255));
-- Exemple : Afficher les départements sans employés
SELECT * FROM departements d WHERE NOT EXISTS (SELECT * FROM employes e WHERE e.departement_id = d.identifiant);