Voici des exemples d'instructions SQL courantes pour insérer et mettre à jour des données dans des bases de données.
Insertion avec mise à jour conditionnelle
Pour ajouter un enregistrement s'il n'existe pas, ou le modifier s'il est déjà présent, on utilise une clé unique.
-- Syntaxe de base pour l'insertion ou la mise à jour
INSERT INTO ma_table (colonne_unique, autre_colonne)
VALUES ('valeur_unique', 'valeur_initiale')
ON DUPLICATE KEY UPDATE autre_colonne = 'valeur_mise_a_jour';
Insertion à partir de données filtrées
Lorsque des conditions sur une table source déterminent l'insertion ou la mise à jour dans une table cible.
-- Insertion conditionnelle avec données d'une autre table
INSERT INTO utilisateurs (identifiant, cle_acces)
SELECT nom_utilisateur, 'cle_temporaire'
FROM comptes_admin
WHERE nom_utilisateur = 'exemple' AND mot_de_passe = 'secret'
ON DUPLICATE KEY UPDATE cle_acces = 'cle_modifiee';
Requête multi-tables avec filtres et regroupements
Combiner des données de plusieurs tables avec des jointures, des conditions, des tris et des agrégations.
-- Sélection complexe avec jointure et regroupement
SELECT p.id_element, p.libelle, p.horodatage, p.etat, COUNT(s.id_participant) AS total_participants
FROM evenements_principaux AS p
LEFT JOIN inscriptions_participants AS s ON s.id_evenement = p.id_element
WHERE p.actif = TRUE
AND EXISTS (SELECT id FROM sessions_valides WHERE cle_session = '' AND id_utilisateur = '' AND date_expiration > TIMESTAMPDIFF(SECOND, debut_session, NOW()))
GROUP BY p.id_element
ORDER BY p.horodatage DESC
LIMIT 0, 10;
Insertion avec transformatoin de données
Insérer des enregistrements dans une nouvelle table en appliuqant des transformations aux colonnes sources.
-- Suppression des données existantes avant insertion
DELETE FROM repartition_mobiles;
-- Insertion avec concaténation et découpage de chaînes
INSERT INTO repartition_mobiles (numero_complet, province, zone, type_operateur)
SELECT
CONCAT(tel.numero, tel.indicatif),
SUBSTRING(tel.localisation, 1, LOCATE(' ', tel.localisation) - 1),
SUBSTRING(tel.localisation, LOCATE(' ', tel.localisation) + 1),
tel.operateur
FROM donnees_telephoniques AS tel;
-- Vérification des longueurs de numéros
SELECT * FROM repartition_mobiles;
SELECT * FROM repartition_mobiles WHERE LENGTH(numero_complet) < 11;
-- Complétion des numéros courts avec des caractères de remplissage
UPDATE repartition_mobiles
SET numero_complet = LEFT(CONCAT(numero_complet, 'XXXXXXXXX'), 11)
WHERE LENGTH(numero_complet) < 11;
SELECT * FROM repartition_mobiles;