Rappel : plusieurs types de commandes SQL pour différent types d'actions :
  • : lire des données ;
  • : modifier des entrées ;
  • : insérer des entrées ;
  • : supprimer des entrées.
Nous allons désormais nous intéresser aux 3 dernières.
  • : une entrée (valeurs séparées par une virgule).
  • 💡 pour représenter plusieurs entrées, les séparer par une virgule.
  • : les colonnes à remplir (les autres vaudront ).
Avant :
Après :
  • : les entrées à modifier.
  • : la colonne prend la valeur .
    💡 pour modifier plusieurs colonnes, les séparer par une virgule.
Avant :
Après :
💡 Vous pouvez calculer les nouvelles valeurs à partir des valeurs initiales de l'entrée.
⚠ La table peut contenir des homonymes. Utiliser les identifiants pour .
  • : les entrées à supprimer.
Avant :
Après :
⚠ La table peut contenir des homonymes. Utiliser les identifiants pour .
Problème :
  • Plusieurs manières de réprésenter une même information :
    • , ,
    • , , .
  • Mais... valeurs non égales (e.g. pour comparaisons).
Solution :
  • Pré-traiter les données pour garantir :
    • l'uniformité des données manipulées (e.g. dans conditions).
    • la cohérence et consistance de la base (e.g. lors ajouts/modifications).
💡 Pour tester les pré-traitements :
  • sans (ou pour certains SGBD).
  • avec .
⚠ Ne pas abuser des pré-traitements SQL sur les valeurs retournées par .
    Si possible, mise en forme en dehors de la requête SQL.
  • Données structurées plus faciles à manipuler (e.g. , ) :
    • //
    • /
  • Évite de ré-écrire plusieurs fois la "même" requête.
  • SGBD ont un système de cache pour les requêtes fréquemment exécutées.
  • Opérations mathématiques : Arrondis : Valeur absolue :

  • sur entiers = division entière.
  • //: arrondir à décimales.
  • 💡 Beaucoup d'autres fonctions existent, e.g. trigonométrie, logs, etc.
Les manipulations de dates complexes sont à effectuer :
  • durée des mois variable ;
  • années bissextiles ;
  • fuseaux horaires ;
  • heures d'été et d'hiver.
💡 Pour cela, les SGBD fournissent des fonctions ⚠ pas normalisées (dépend du SGBD).
  • Date et/ou heure actuelle : Formatter une date : Calculer la durée entre deux dates : Timestamp actuel : Convertir un timestamp en date :
  • 💡 dans certains SGBD.
  • Le timestamp unix représente une date par le nombre de secondes écoulées depuis le 1er janvier 1970. Il permet de faciliter les opérations sur les dates.
  • 💡 Beaucoup d'autres fonctions de manipulations de dates existent.
  • Transformer la casse : Taille : Formatter des données : Remplissage (ajouter des espaces en début/fin) : Retirer les espaces en début/fin :
  • À utiliser quand l'information stockée est indépendante de la casse (e.g. e-mail, nom, etc.) pour garantir l'uniformité des données manipulées.
  • : formate des données au format (cf TP2).
    ⚠ Pour SQLite < 3.38, cette fonction s'appelle .
  • Les chaînes de caractères sont usuellement de tailles variables.
    Pour des raisons de performances, on peut les stocker avec une taille fixe :
    : ajoute en début/fin de jusqu'à obtenir une longueur .
    ⚠ Cette fonction n'est pas disponible sur SQLite.
: agrège en une même ligne, les entrées de identiques.
  • Agrégation sur les dates : Agrégation sur les références :
  • Les lignes contiennent plusieurs entrées, i.e. plusieurs valeurs par colonne.
    • Par défaut, SQL retourne la première valeur.
    • fonction d'agrégation : prend la liste des valeurs et retourne une valeur.
  • 💡 Une fonction d'agrégation sans retourne une seule ligne.
  • Compter les entrées : Compter les valeurs non-nulles : Compter les valeurs non-nulles distinctes :

  • filtre les entrées avant agrégation.

  • ⚠ On ne peut utiliser de fonction d'agrégation dans la condition de .
  • filtre les lignes après agrégation.