======================================= SQLite3 - Guide simplifié d'utilisation ======================================= Ce guide a pour objectif d'expliquer l'utilisation de SQLite3 à partir de la création de deux tables simples, l'importation de données, et l'exécution d'une requête SQL pour afficher des résultats en relation entre deux tables. Il inclut également une explication des différents types de données utilisés dans SQLite ainsi que des explications détaillées pour chaque commande. .. contents:: :depth: 2 :local: :backlinks: top Connexion à SQLite3 ------------------- Pour commencer, lancez SQLite3 en créant ou ouvrant une base de données. .. code-block:: bash sqlite3 **Explication :** - **`sqlite3`** : L'outil en ligne de commande pour manipuler des bases de données SQLite. - **``** : Remplacez cette variable par le nom de votre fichier de base de données. Si le fichier n'existe pas, il sera créé automatiquement. **Exemple :** .. code-block:: bash sqlite3 infra.db Création des tables ------------------- Dans cet exemple simplifié, nous allons créer deux tables : 1. **dns** : Contient des informations sur les adresses IP et les noms de domaines (FQDN). 2. **ip_ping** : Stocke le statut du ping pour chaque adresse IP (1 pour succès, 0 pour échec). Les types de colonnes dans SQLite ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Avant de passer à la création des tables, voici une explication des principaux types de colonnes que vous pouvez utiliser dans SQLite : - **TEXT** : Utilisé pour stocker des chaînes de caractères, comme des noms de domaines (FQDN) ou des descriptions. - **Exemple** : Un champ de type TEXT pourrait stocker "example.com". - **INTEGER** : Utilisé pour stocker des nombres entiers. Cela peut inclure des adresses IP (si elles sont converties en un format numérique) ou des états booléens (1 pour vrai, 0 pour faux). - **Exemple** : Un champ de type INTEGER pourrait stocker l'adresse IP sous forme de nombre comme `19216811` ou un statut de ping comme 1 (répond) ou 0 (ne répond pas). - **REAL** : Utilisé pour stocker des nombres à virgule flottante, comme des mesures précises. - **Exemple** : Une colonne `REAL` pourrait stocker une valeur de temps d'attente pour un ping, comme 0.123 secondes. - **BLOB** : Stocke des données binaires telles que des images ou des fichiers. - **Exemple** : Un fichier image ou un fichier binaire peut être stocké sous forme de BLOB. Création des tables dans SQLite ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Nous allons créer les deux tables suivantes : - **dns** : Cette table stocke l'IP sous forme d'entier (`INTEGER`) et le FQDN (Fully Qualified Domain Name) sous forme de texte (`TEXT`). - **ip_ping** : Cette table stocke l'IP (`INTEGER`) et un statut de ping (`INTEGER`) où 1 indique que l'IP répond et 0 indique qu'elle ne répond pas. **Commande pour créer les tables :** .. code-block:: sql CREATE TABLE dns ( ip INTEGER, fqdn TEXT ); CREATE TABLE ip_ping ( ip INTEGER, repond_ping INTEGER ); **Explication :** - **`CREATE TABLE`** : Crée une nouvelle table dans la base de données. - **`dns` et `ip_ping`** : Les noms des tables. - **`ip INTEGER`** : La colonne `ip` dans chaque table est un entier (`INTEGER`), qui représente l'adresse IP. - **`fqdn TEXT`** : La colonne `fqdn` dans la table `dns` stocke les noms de domaine en tant que texte (`TEXT`). - **`repond_ping INTEGER`** : La colonne `repond_ping` dans la table `ip_ping` est un entier (`INTEGER`) qui indique si l'adresse IP répond au ping (1 = répond, 0 = ne répond pas). Importation des données ----------------------- SQLite permet l'importation de données à partir de fichiers CSV. Vous pouvez utiliser la commande suivante pour importer des données dans vos tables. .. code-block:: sql .mode csv .headers on .separator ";" .import ; **Explication :** - **`.mode csv`** : Indique à SQLite que nous allons importer des données au format CSV (Comma-Separated Values). - **`.headers on`** : Indique que la première ligne du fichier CSV contient les en-têtes de colonnes. - **`.separator ";"`** : Définit le point-virgule comme séparateur de colonnes dans le fichier CSV. - **`.import `** : Importe les données du fichier CSV spécifié dans la table cible. Remplacez `` par le nom du fichier CSV et `` par le nom de la table dans laquelle vous voulez insérer les données. **Exemple :** .. code-block:: sql .import dns.csv dns; .import ip_ping.csv ip_ping; Affichage des données --------------------- Une fois les données importées, vous pouvez afficher le contenu des tables en exécutant la commande suivante : .. code-block:: sql SELECT * FROM ; **Explication :** - **`SELECT *`** : Sélectionne toutes les colonnes. - **`FROM `** : Indique la table à partir de laquelle vous voulez récupérer les données. Remplacez `` par le nom de votre table. **Exemple :** .. code-block:: sql SELECT * FROM dns; SELECT * FROM ip_ping; Requêtes SQL avancées --------------------- Nous pouvons maintenant exécuter une requête SQL pour obtenir une vue combinée des adresses IP, des FQDN, et du statut du ping, en joignant les deux tables sur la colonne `ip` : .. code-block:: sql SELECT dns.ip, dns.fqdn, ip_ping.repond_ping FROM dns JOIN ip_ping ON dns.ip = ip_ping.ip; **Explication :** - **`SELECT`** : Permet de choisir les colonnes à afficher. - **`dns.ip, dns.fqdn, ip_ping.repond_ping`** : Nous sélectionnons trois colonnes : l'IP depuis la table `dns`, le FQDN depuis `dns`, et le statut du ping depuis `ip_ping`. - **`FROM dns`** : La table principale de la requête est `dns`. - **`JOIN ip_ping ON dns.ip = ip_ping.ip`** : Nous faisons une jointure sur la colonne `ip` pour relier les tables `dns` et `ip_ping`. **Exemple de résultat** : .. list-table:: Résultat de la requête :header-rows: 1 * - ip - fqdn - repond_ping * - 19216811 - example.com - 1 * - 19216812 - test.com - 0 Dans cet exemple, l'IP `192.168.1.1` (représentée sous forme d'entier) répond au ping (1), tandis que `192.168.1.2` ne répond pas (0). Suppression des données ----------------------- Pour supprimer toutes les données des tables sans supprimer la structure de la table, utilisez la commande `DELETE` : .. code-block:: sql DELETE FROM ; **Explication :** - **`DELETE FROM `** : Supprime toutes les lignes de la table spécifiée. Remplacez `` par le nom de la table. **Exemple :** .. code-block:: sql DELETE FROM dns; DELETE FROM ip_ping; Suppression des tables ---------------------- Pour supprimer complètement une table de la base de données, utilisez la commande suivante : .. code-block:: sql DROP TABLE IF EXISTS ; **Explication :** - **`DROP TABLE IF EXISTS`** : Supprime la table spécifiée si elle existe dans la base de données, évitant ainsi une erreur si la table n'existe pas déjà. - **``** : Remplacez par le nom de la table que vous souhaitez supprimer. **Exemple :** .. code-block:: sql DROP TABLE IF EXISTS dns; DROP TABLE IF EXISTS ip_ping; **Meta** -------------- Auteur : Cbillet Date : /10/2024