Fiche de révision

Le langage SQL


Nous allons voir les principales commandes SQL permettant d'interagir avec une base de données. Nous travaillons avec sqlite3.

ICréation d'une table et insertion d'enregistrements

À titre d'exemple, nous allons créer la table suivante :

Tableau de 4 lignes, 5 colonnes ;Corps du tableau de 4 lignes ;Ligne 1 : ; Nom; Maths; Anglais; Info; Ligne 2 : ; ----------; ----------; ----------; ----------; Ligne 3 : ; Joe; 16; 17; 18; Ligne 4 : ; Zoe; 19; 15; 17;

On commence par créer la table avec CREATE TABLE en indiquant ici la clé primaire.

Tableau de 5 lignes, 2 colonnes ;Corps du tableau de 5 lignes ;Ligne 1 : ; CREATE TABLE IF NOT EXISTS `Table_notes` (; Ligne 2 : ;     `Nom` TEXT PRIMARY KEY,; Ligne 3 : ;     `Maths` INTEGER,; Ligne 4 : ;     `Anglais` INTEGER,; Ligne 5 : ;     `Info` INTEGER );;

À noter

SQLite n'est pas sensible à la casse.

On insère ensuite les valeurs avec :

Tableau de 2 lignes, 2 colonnes ;Corps du tableau de 2 lignes ;Ligne 1 : ; INSERT INTO [la table les attributs]; Ligne 2 : ; VALUES [les tuples correspondant aux lignes à insérer];

On peut enregistrer une valeur à la fois ou plusieurs séparées par des virgules.

Tableau de 2 lignes, 2 colonnes ;Corps du tableau de 2 lignes ;Ligne 1 : ; INSERT INTO Table_notes (Nom, Maths, Anglais, Info); Ligne 2 : ; VALUES ('Joe', 14, 17, 18), ('Zoe', 19, 15, 17);;

Il se peut que certains enregistrements n'existent pas. Par exemple Anne peut avoir été absente lors du devoir d'anglais. On met alors NULL :

Tableau de 1 lignes, 2 colonnes ;Corps du tableau de 1 lignes ;Ligne 1 : ; INSERT INTO `Table_notes` VALUES ('Anne', 18, NULL, 19);;

Si l'on essaye d'insérer une valeur pour une clé déjà existante, ce qui va à l'encontre des contraintes d'intégrité, on obtient alors une erreur de type IntegrityError.

On peut créer un fichier d'extension sql pour plus de confort. Il doit commencer par BEGIN TRANSACTION et finir par COMMIT;. On enregistre ce fichier par exemple sous le nom notes.sql.

IIUtilisation de SQLite avec le terminal

On rappelle qu'avec SQLite les bases de données sont stockées en un seul fichier. On ouvre un terminal pour créer une BDD dans le fichier les_notes.db à partir du fichier notes.sql créé à l'exemple précédent en lançant sqlite3 avec ces arguments :

Tableau de 1 lignes, 2 colonnes ;Corps du tableau de 1 lignes ;Ligne 1 : ; $ sqlite3 les_notes.db < notes.sql;

À noter

Il faut bien différencier les rôles de ces deux fichiers. Le fichier .sql contient des instructions écrites en langage SQL et est lisible par un humain, le fichier .db est créé par SQLite et contient les données, les tables, les indices sous une forme peu lisible.

On peut ensuite travailler avec SQLite. On lance cette fois sqlite3 avec comme argument le fichier contenant la base de données :

Tableau de 2 lignes, 2 colonnes ;Corps du tableau de 2 lignes ;Ligne 1 : ; $ sqlite3 les_notes.db; Ligne 2 : ; sqlite> ;

sqlite> est l'invite de commande indiquant que SQLite est en attente des requêtes de l'utilisateur.

IIIL'extraction de données avec la commande SELECT

La commande SELECT permet, comme son nom le suggère, de sélectionner des colonnes d'une ou de plusieurs tables données en paramètres. Comme souvent, l'étoile * indique que l'on sélectionne toutes les colonnes. La syntaxe est :

Tableau de 1 lignes, 2 colonnes ;Corps du tableau de 1 lignes ;Ligne 1 : ; SELECT colonne(s) FROM nom table(s);

Pour obtenir l'en-tête des colonnes et un affichage plus lisible, on commence par indiquer en préambule :

Tableau de 2 lignes, 2 colonnes ;Corps du tableau de 2 lignes ;Ligne 1 : ; sqlite> .headers ON; Ligne 2 : ; sqlite> .mode column;

à noter

Les commandes commençant par un point (dot commands) sont spécifiques au CLI. Par exemple les deux proposées ci-dessus permettent d'affiner l'affichage dans le terminal (https://www.w3resource.com/sqlite/sqlite-dot-commands.php).

Puis on demande toute la table Table_notes :

Tableau de 1 lignes, 2 colonnes ;Corps du tableau de 1 lignes ;Ligne 1 : ; sqlite> SELECT * FROM Table_notes;;

On obtient :

Tableau de 4 lignes, 5 colonnes ;Corps du tableau de 4 lignes ;Ligne 1 : ; Nom; Maths; Anglais; Info; Ligne 2 : ; ----------; ----------; ----------; ----------; Ligne 3 : ; Joe; 14; 17; 18; Ligne 4 : ; Zoe; 19; 15; 17;

Si l'on ne veut que certaines colonnes :

Tableau de 1 lignes, 2 colonnes ;Corps du tableau de 1 lignes ;Ligne 1 : ; sqlite> SELECT Maths, Nom FROM Table_notes;; Tableau de 4 lignes, 3 colonnes ;Corps du tableau de 4 lignes ;Ligne 1 : ; Maths; Nom; Ligne 2 : ; ----------; ----------; Ligne 3 : ; 14; Joe; Ligne 4 : ; 19; Zoe;

Pour lire la suite

Je m'abonne

Et j'accède à l'ensemble
des contenus du site