Contexte : des milliers/millions de données à manipuler.
Problème : les manipuler "à la main" est...
- chronophage : 35 jours pour un million de données (1 donnée/s et 8h/j).
- source d'erreurs : données comptées en double, sautées, etc.
- incomplet : données stockées à plusieurs endroits différents, certaines perdues.
Besoins : un logiciel permettant d'efficacement...
- stocker et organiser les données.
- manipuler les données : ajouter/modifier/supprimer des données.
- requêter les données : e.g. compter le nombre de ventes.
Solution : les Systèmes de Gestion de Bases de Données (SGBD) :
- créer, stocker, manipuler et requêter des bases de données.
- cohérence des données : garantie l'absence de données invalides.
- robustesse : résister aux pannes.
- contrôle d'accès : qui peut faire quoi sur quelles données ?
- logs : que s'est-il passé ? qui a fait quoi et quand ?
- accès concurrent : modifications simultanées de données.
SQL (Structured Query Language) : langage pour manipuler des SGBD.
Exemples de SGBD SQL :
- SQLite : léger (utilisé en TP)
- 1 base de donnée = 1 fichier.
- utilisation locale.
- pas d'accès concurrents.
- PostgreSQL, MySQL, et MariaDB : plus complets.
⚠ SQL est normalisé (ISO/CEI 9075) mais quelques différences entre SGBD.
Les SGBD (sauf SQLite) suivent une architecture client-serveur :
- serveur : stocke les données et exécute les requêtes.
- client : envoie les requêtes et réceptionne les résultats.
Plusieurs types de clients :
- API utilisée dans le langage de programmation de votre choix.
- application en ligne de commandes (e.g. psgl, mysql).
- interface graphique de gestion de bases de données (e.g. pgAdmin).
- interface graphique de requêtage (e.g. ???).
Une base de donnée est composée de tables SQL (tableau contenant les données) :
| ID | Nom | Prenom | Age |
|---|---|---|---|
| 1 | Doe | John | 32 |
| 2 | Durand | John | 64 |
- lignes : les entrées (ou enregistrements) ;
- colonnes : les propriétés des entrées.
💡 base de données ≈ fichier tableur ; tables ≈ feuilles de calculs.
💡 Les tables sont aussi appelées relations, d'où les bases de données relationnelles.
Schéma de table : décrit la structure de la table, e.g. le type des colonnes :
- : une chaîne de caractère (e.g. / ).
- / : un nombre entier.
- : un nombre décimal.
- : des données binaires.
- : accepte n'importe quelle valeur.
💡 Par défaut, chaque type accepte la valeur (= absence de données).
💡 D'autres types disponibles en fonction du SGBD utilisé.
💡 Vous trouver plus amples documentations via les liens suivants :
- SQL :
- SGBD :
- SQLite :https://www.sqlite.org
- PostgreSQL :https://www.postgresql.org/docs/
- MySQL :https://dev.mysql.com/doc/
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 nous concentrer sur et verrons les autres par la suite.
- : nom de la table SQL à requêter.
- : liste des colonnes à récupérer (séparées par ",").
💡 correspond à l'ensemble des colonnes.
⚠ Le nom de la colonne entre guillemets si caractères non-alphanumériques.
⚠ Ne récupérer que les colonnes nécessaires (réduire les données transférées).
💡 : donner (temporairement) un alias à une colonne :
- trier les lignes.
- Par ordre croissant () ou décroissant () ;
- Pour trier sur plusieurs colonnes, les séparer par une virgule.
Problème : retourne toutes les entrées.
- des milliers/millions d'entrées (pas forcément toutes pertinentes).
- consommation excessive de ressources Internet, processeur, RAM, disque, etc.
Solution : réduire la quantité d'entrées retournées.
- Filtrer ;
- Supprimer les doublons ;
- Limiter le nombre de lignes.
: les entrées où est vrai sont retournées.
- Opérateurs de comparaison : , , , , , ;
- Opérateurs logiques : , , ;
- : supprime les doublons.
- : récupère les premières entrées.
- 💡 Avec la clause génère des tops.
Problème :
- Récupérer et afficher des milliers de lignes => coûteux.
Solution :
- Découper la liste en plusieurs pages (e.g. lignes/page).
- : entrées par requêtes.
- : récupérer à partir de la -ième entrée (avec , la page).
- Indentez vos requêtes (e.g. aligner les clauses), + lisible + facile à modifier.
- Fermez immédiatement parenthèses/guillemets/etc. avant de les remplir.
- Évitez autant que possible d'écrire à la main :
- Utilisez l'auto-complétion (touche de tabulation ).
- Utilisez (/) pour remonter l'historique et (/) pour modifier une requête.
- Utilisez les copier/coller (/).
- Ne jamais tout écrire d'un coup, mais procédez par étapes :
- basique.
- afficher les colonnes pertinentes.
- ajoutez et testez les clauses une par une.
- idem pour les expressions, ajoutez les opérations au fur et à mesure.
Avantages :
- écriture + simple, rigoureux et méthodique.
- 1 problème complexe => petits problèmes simples.
- debug + simple : origine problème tout de suite connu.
- Récupère la table ().
- Alias de colonnes.
- Filtre les entrées ().
- Groupe les entrées ().
- Alias de colonnes d'agrégats.
- Filtre les lignes agrégées ().
- Supprime les doublons ().
- Trie les lignes ().
- Limite les lignes (/).
SELECT DISTINCT Date, Ref, Q as N
FROM Produits
WHERE Ref = "Gomme"
ORDER BY Q
LIMIT 2;