MariaDB : requêtes
Les exemples reposent sur les tables clients et commandes de Bases et tables.
INSERT INTO clients (nom, email) VALUES ('Alice', 'alice@exemple.com');INSERT INTO clients (nom, email) VALUES ('Bob', 'bob@exemple.com'), ('Chloé', 'chloe@exemple.com');INSERT INTO clients (nom, email) VALUES ('Alice', 'alice@exemple.com') ON DUPLICATE KEY UPDATE nom = VALUES(nom);SELECT LAST_INSERT_ID();SELECT * FROM clients;SELECT nom, email FROM clients WHERE actif = TRUE ORDER BY nom LIMIT 10;SELECT * FROM clients WHERE nom LIKE 'A%';SELECT * FROM clients WHERE id IN (1, 2, 3);SELECT * FROM commandes WHERE passee_le BETWEEN '2026-01-01' AND '2026-01-31';SELECT DISTINCT statut FROM commandes;SELECT * FROM clients WHERE email IS NULL;Modifier et supprimer
Section intitulée « Modifier et supprimer »UPDATE clients SET actif = FALSE WHERE id = 3;DELETE FROM clients WHERE id = 3;Agrégats
Section intitulée « Agrégats »SELECT COUNT(*) FROM commandes;SELECT statut, COUNT(*) AS nb, SUM(total) AS montant, AVG(total) AS moyenne FROM commandes GROUP BY statut ORDER BY montant DESC;SELECT client_id, SUM(total) AS depense FROM commandes GROUP BY client_id HAVING SUM(total) > 100;WHERE filtre les lignes avant le regroupement, HAVING filtre les groupes.
Jointures
Section intitulée « Jointures »SELECT c.nom, o.id, o.total FROM clients c INNER JOIN commandes o ON o.client_id = c.id;
SELECT c.nom, COUNT(o.id) AS nb_commandes FROM clients c LEFT JOIN commandes o ON o.client_id = c.id GROUP BY c.id, c.nom;| Jointure | Résultat |
|---|---|
INNER JOIN |
Lignes présentes des deux côtés |
LEFT JOIN |
Toutes les lignes de gauche, même sans correspondance |
RIGHT JOIN |
Toutes les lignes de droite |
Sous-requêtes et expressions de table
Section intitulée « Sous-requêtes et expressions de table »SELECT nom FROM clients WHERE id IN (SELECT client_id FROM commandes WHERE total > 100);
WITH depenses AS ( SELECT client_id, SUM(total) AS total FROM commandes GROUP BY client_id)SELECT c.nom, d.total FROM clients c JOIN depenses d ON d.client_id = c.id ORDER BY d.total DESC;Fonctions de fenêtrage
Section intitulée « Fonctions de fenêtrage »SELECT client_id, total, RANK() OVER (PARTITION BY client_id ORDER BY total DESC) AS rang FROM commandes;Dates et textes
Section intitulée « Dates et textes »SELECT NOW(), CURDATE();SELECT DATE_FORMAT(passee_le, '%Y-%m') AS mois, SUM(total) FROM commandes GROUP BY mois;SELECT CONCAT(nom, ' <', email, '>') FROM clients;SELECT UPPER(nom), LENGTH(nom) FROM clients;Transactions
Section intitulée « Transactions »START TRANSACTION;UPDATE commandes SET statut = 'payee' WHERE id = 10;INSERT INTO clients (nom, email) VALUES ('Dan', 'dan@exemple.com');COMMIT; -- ou ROLLBACK; pour annulerLes tables InnoDB sont transactionnelles. Sans START TRANSACTION, chaque requête est validée immédiatement (autocommit).
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
ERROR 1054 Unknown column |
Nom de colonne erroné : DESCRIBE table; |
ERROR 1052 Column is ambiguous |
Préfixer par l’alias de table |
ERROR 1064 syntax error |
Syntaxe : lire le texte après « near » |
ERROR 1213 Deadlock found |
Relancer la transaction ; accéder aux tables dans le même ordre |
| Requête lente | EXPLAIN : voir Index et performances |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »Les requêtes de cette page fonctionnent sur MariaDB 10.11 et 11.8.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Référence SQL
- Suite : Utilisateurs et droits