Instructions SQL pour la gestion des enregistrements

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;

Étiquettes: SQL MySQL Insertion Duplication requête

Publié le 20 juillet à 00h01