Aller au contenu

MySQL : requêtes SQL

Requêtes courantes sur les tables clients et commandes de la page Bases et tables.

INSERT INTO clients (nom, email, ville) VALUES ('Alice Martin', 'alice@exemple.com', 'Lyon');
INSERT INTO clients (nom, email, ville) VALUES
('Bruno Durand', 'bruno@exemple.com', 'Paris'),
('Chloé Petit', 'chloe@exemple.com', 'Lyon'),
('David Moreau', 'david@exemple.com', NULL);
INSERT INTO commandes (client_id, montant, statut) VALUES
(1, 49.90, 'payee'),
(1, 120.00, 'nouvelle'),
(2, 15.50, 'payee'),
(3, 300.00, 'expediee');
SELECT LAST_INSERT_ID(); -- identifiant de la dernière insertion
SELECT * FROM clients;
SELECT nom, ville FROM clients WHERE ville = 'Lyon';
SELECT nom FROM clients WHERE ville IS NULL;
SELECT nom FROM clients WHERE nom LIKE 'A%'; -- commence par A
SELECT nom FROM clients WHERE ville IN ('Lyon', 'Paris');
SELECT id, montant FROM commandes WHERE montant BETWEEN 20 AND 200;
SELECT DISTINCT ville FROM clients;
SELECT nom FROM clients ORDER BY nom DESC LIMIT 2;
SELECT nom FROM clients ORDER BY nom LIMIT 2 OFFSET 2; -- pagination
SELECT COUNT(*) AS nb FROM clients;
UPDATE clients SET ville = 'Marseille' WHERE email = 'david@exemple.com';
UPDATE commandes SET statut = 'payee' WHERE id = 2;
DELETE FROM commandes WHERE statut = 'annulee';
-- INNER JOIN : uniquement les clients qui ont des commandes
SELECT c.nom, o.montant, o.statut
FROM clients c
JOIN commandes o ON o.client_id = c.id
ORDER BY c.nom;
-- LEFT JOIN : tous les clients, même sans commande
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;
SELECT statut, COUNT(*) AS nb, SUM(montant) AS total, ROUND(AVG(montant), 2) AS moyenne
FROM commandes
GROUP BY statut
ORDER BY total DESC;
SELECT client_id, SUM(montant) AS total
FROM commandes
GROUP BY client_id
HAVING SUM(montant) > 100; -- HAVING filtre après regroupement
SELECT nom FROM clients
WHERE id IN (SELECT client_id FROM commandes WHERE montant > 100);
WITH totaux AS (
SELECT client_id, SUM(montant) AS total FROM commandes GROUP BY client_id
)
SELECT c.nom, t.total
FROM totaux t
JOIN clients c ON c.id = t.client_id
ORDER BY t.total DESC;
SELECT id, client_id, montant,
SUM(montant) OVER (PARTITION BY client_id ORDER BY id) AS cumul_client,
RANK() OVER (ORDER BY montant DESC) AS rang
FROM commandes;
SELECT NOW(), CURDATE(), DATE_FORMAT(NOW(), '%d/%m/%Y %H:%i');
SELECT * FROM commandes WHERE passee_le >= NOW() - INTERVAL 7 DAY;
SELECT UPPER(nom), CONCAT(nom, ' <', email, '>') FROM clients;
SELECT COALESCE(ville, 'inconnue') AS ville FROM clients; -- remplace NULL
INSERT INTO clients (nom, email, ville) VALUES ('Alice Martin', 'alice@exemple.com', 'Nice')
ON DUPLICATE KEY UPDATE ville = VALUES(ville);

Si l’e-mail existe déjà (clé unique), la ville est mise à jour au lieu de provoquer une erreur.

Un groupe d’opérations qui réussit ou échoue en bloc :

START TRANSACTION;
UPDATE commandes SET statut = 'payee' WHERE id = 2;
INSERT INTO commandes (client_id, montant, statut) VALUES (2, 10.00, 'nouvelle');
COMMIT; -- valide
-- ROLLBACK; -- annule tout depuis START TRANSACTION

Hors transaction, chaque instruction est validée immédiatement (autocommit).

EXPLAIN SELECT * FROM commandes WHERE statut = 'payee';

Voir Index et performances.