Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
les_fiches_revisions:bases_de_donnees:sql [2021/12/26 14:32] ma |
les_fiches_revisions:bases_de_donnees:sql [2023/01/18 10:27] (Version actuelle) hk ancienne révision (2022/01/08 16:43) restaurée |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ======Langage SQL : requêtes d’interrogation et de mise à jour d’une base de données====== | ======Langage SQL : requêtes d’interrogation et de mise à jour d’une base de données====== | ||
| + | Si vous ne comprenez pas le résumé, cliquez sur la commande qui vous conduira a sa page sur ce wiki. | ||
| - | =====I. Création d'une base de donnée (sur DB Browser for SQLite)===== | + | |
| + | =====I. Résumé===== | ||
| + | |||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | CREATE TABLE nom | ||
| + | (attribut1 domaine1, attribut2 domaine2); | ||
| + | </ | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM table1 | ||
| + | </ | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | SELECT DISTINCT attribut | ||
| + | FROM nom_table | ||
| + | </ | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | WHERE condition | ||
| + | |||
| + | WHERE condition1 AND condition2 | ||
| + | |||
| + | WHERE condition1 OR condition2 | ||
| + | </ | ||
| + | |||
| + | Rappel: Les // | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | ORDER BY attribut | ||
| + | |||
| + | ORDER BY attribut1, attribut2 | ||
| + | |||
| + | ORDER BY attribut DESC | ||
| + | </ | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM table1 | ||
| + | INNER JOIN table2 ON table1.attribut = table2.attribut | ||
| + | </ | ||
| + | |||
| + | **SELECT complexe** - Exemple | ||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM table1 | ||
| + | INNER JOIN table2 ON table1.attribut = table2.attribut | ||
| + | WHERE condition1 AND (condition2 OR condition3) | ||
| + | ORDER BY table1.attribut, | ||
| + | </ | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | INSERT INTO nom_table | ||
| + | (attribut1, attribut2, attribut3) | ||
| + | VALUES | ||
| + | (" | ||
| + | </ | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | UPDATE nom_table | ||
| + | SET attribut1=" | ||
| + | WHERE condition | ||
| + | </ | ||
| + | |||
| + | [[les_fiches_revisions: | ||
| + | <code sql> | ||
| + | DELETE FROM nom_table | ||
| + | WHERE condition | ||
| + | </ | ||
| + | |||
| + | |||
| + | =====II. Création d'une base de donnée (sur DB Browser for SQLite)===== | ||
| - Allumez //DB Browser for SQLite// | - Allumez //DB Browser for SQLite// | ||
| Ligne 37: | Ligne 118: | ||
| - | =====II. Créer une relation===== | + | =====III. Créer une relation===== |
| **CREATE TABLE** est la commande qui permet de créer un relation, en lui attribuant des attributs et leur domaine | **CREATE TABLE** est la commande qui permet de créer un relation, en lui attribuant des attributs et leur domaine | ||
| Ligne 62: | Ligne 143: | ||
| + | =====IV. Visualiser une relation===== | ||
| + | |||
| + | |||
| + | ====A) SELECT==== | ||
| + | |||
| + | Cette commande permet de voir une relation (sous forme de tableau). | ||
| + | D' | ||
| + | |||
| + | ===1. Code=== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT attribut1, attribut2 | ||
| + | FROM nom_table | ||
| + | </ | ||
| + | |||
| + | __Attribut :__ Le nom des attributs qu'il faut affiché\\ | ||
| + | Peut également être remplacé par *\\ | ||
| + | Cela montrera toutes les colones de la relation | ||
| + | |||
| + | __nom_table :__ Le nom de la relation qui sera affiché | ||
| + | |||
| + | |||
| + | ===2. Exemples=== | ||
| + | |||
| + | ==a) Avec *== | ||
| + | |||
| + | Pour voir toutes les charactéristiques des abonnements | ||
| + | <code sql> | ||
| + | SELECT * | ||
| + | FROM ABONNEMENT | ||
| + | </ | ||
| + | |||
| + | ^ id ^ nom ^ prix ^ durée_mois | ||
| + | | 1 | ||
| + | | 2 | ||
| + | | 3 | ||
| + | | 4 | ||
| + | |||
| + | ==b) Avec le nom d'une des colones (attribut)== | ||
| + | |||
| + | Pour voir la liste des abonnements et leur prix | ||
| + | <code sql> | ||
| + | SELECT nom, prix | ||
| + | FROM ABONNEMENT | ||
| + | </ | ||
| + | |||
| + | ^ nom ^ prix ^ | ||
| + | | Eco | | ||
| + | | Famille | ||
| + | | Simple | ||
| + | | Pro | | ||
| + | |||
| + | ====B) SELECT DISTINCT==== | ||
| + | |||
| + | En rajoutant **DISTINCT** après **SELECT**, on peut éviter d' | ||
| + | |||
| + | ===1. Code=== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT DISTINCT attribut | ||
| + | FROM nom_table | ||
| + | </ | ||
| + | |||
| + | ===2. Exemple=== | ||
| + | |||
| + | |||
| + | Pour voir la liste de toutes les villes dans lequel habite les clients sans les avoir en double | ||
| + | <code sql> | ||
| + | SELECT DISTINCT ville | ||
| + | FROM CLIENTS | ||
| + | </ | ||
| + | |||
| + | ^ ville ^ | ||
| + | | Paris | | ||
| + | | Nantes | ||
| + | | | ||
| + | |||
| + | ====C) WHERE=== | ||
| + | |||
| + | Cette commande rajoute un/des filtre(s) | ||
| + | |||
| + | ===1. Code=== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM nom_table | ||
| + | WHERE condition | ||
| + | </ | ||
| + | |||
| + | ===2. Conditions=== | ||
| + | |||
| + | ==a) Les opérateurs== | ||
| + | |||
| + | ^ Opérateur | ||
| + | | = | Egal | | ||
| + | | | ||
| + | | < | Inférieur à | | ||
| + | | > | Supérieur à | | ||
| + | | | ||
| + | | > | ||
| + | |||
| + | ==b) Plusieurs conditions== | ||
| + | |||
| + | En utilisant **AND** et **OR** il possible de préciser plusieurs conditions. | ||
| + | |||
| + | **AND**\\ | ||
| + | Les deux conditions doit être vraie | ||
| + | |||
| + | <code sql> | ||
| + | condition1 AND condition2 | ||
| + | </ | ||
| + | |||
| + | **OR**\\ | ||
| + | Soit: | ||
| + | Au moins une condition doit être vraie | ||
| + | |||
| + | <code sql> | ||
| + | condition1 OR condition2 | ||
| + | </ | ||
| + | |||
| + | ===3. Exemple=== | ||
| + | |||
| + | Pour voir les clients vivant à Paris qui ont 30 ans ou plus | ||
| + | <code sql> | ||
| + | SELECT * | ||
| + | FROM CLIENTS | ||
| + | WHERE ville=" | ||
| + | </ | ||
| + | |||
| + | ^ id ^ prenom | ||
| + | | 3 | ||
| + | | 6 | ||
| + | | 8 | ||
| + | |||
| + | |||
| + | Pour voir le nom et prénom des clients qui ont plus 50 ans ou qui vive à Nantes | ||
| + | <code sql> | ||
| + | SELECT prenom, nom | ||
| + | FROM CLIENTS | ||
| + | WHERE age>50 OR ville=" | ||
| + | </ | ||
| + | |||
| + | ^ prenom | ||
| + | | | ||
| + | | | ||
| + | | | ||
| + | | Chloé | ||
| + | |||
| + | ====D) ORDER BY==== | ||
| + | |||
| + | Permet de mettre de trier le tableau affiché selon les attributs précisé | ||
| + | |||
| + | ===1. Code simple=== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM nom_table | ||
| + | ORDER BY attribut | ||
| + | </ | ||
| + | |||
| + | ===2. Plusieurs conditions=== | ||
| + | |||
| + | **ORDER BY** va trier le tableau d' | ||
| + | |||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM nom_table | ||
| + | ORDER BY attribut1, attribut2, attribut3 | ||
| + | </ | ||
| + | |||
| + | ===3. Sens de " | ||
| + | |||
| + | En rajoutant **DESC** ou **ASC** | ||
| + | |||
| + | En rajoutant **DESC** après l' | ||
| + | Si l' | ||
| + | Si l' | ||
| + | |||
| + | **DESC** | ||
| + | |||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM nom_table | ||
| + | ORDER BY attribut DESC | ||
| + | </ | ||
| + | |||
| + | **ASC** | ||
| + | |||
| + | <code sql> | ||
| + | ORDER BY attribut ASC | ||
| + | </ | ||
| + | |||
| + | Revient à écrire | ||
| + | |||
| + | <code sql> | ||
| + | ORDER BY attribut | ||
| + | </ | ||
| + | |||
| + | ===4. Exemples=== | ||
| + | |||
| + | ==a) Plusieurs conditions== | ||
| + | |||
| + | Affiche le tableau des clients en les trieant, par leur ville, puis leur nom et enfin leur prénom (tous dans l' | ||
| + | <code sql> | ||
| + | SELECT * | ||
| + | FROM CLIENTS | ||
| + | ORDER BY ville, nom, prenom | ||
| + | </ | ||
| + | |||
| + | ^ id ^ prenom | ||
| + | | 4 | ||
| + | | 10 | | ||
| + | | 7 | ||
| + | | 5 | ||
| + | | 2 | ||
| + | | 8 | ||
| + | | 3 | ||
| + | | 9 | ||
| + | | 6 | ||
| + | | 1 | ||
| + | |||
| + | |||
| + | ==b) Avec DESC== | ||
| + | |||
| + | Affiche le tableau des clients vivant à Paris en les trieant, par leur age décroissant puis par leur nom | ||
| + | <code sql> | ||
| + | SELECT nom, age | ||
| + | FROM CLIENTS | ||
| + | WHERE ville=" | ||
| + | ORDER BY age DESC, nom | ||
| + | </ | ||
| + | |||
| + | ^ nom ^ age ^ | ||
| + | | | ||
| + | | Lacroix | ||
| + | | Arnaud | ||
| + | | Martin | ||
| + | | Guillet | ||
| + | |||
| + | ====E) JOIN==== | ||
| + | |||
| + | Il est possible de joindre deux relations ensemble grâce à **JOIN**.\\ | ||
| + | En réalité il y a plusieurs type de jointure possible mais pour le bac on ne voit que **INNER JOIN** | ||
| + | |||
| + | **INNER JOIN** permet de rajouter une autre table via un attribut.\\ | ||
| + | En général une des deux tables aura un clé étrangère qui pourra être relier à la table pour lequel la clé étrangère correspond. | ||
| + | |||
| + | ===1. Code=== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT attributs | ||
| + | FROM table1 | ||
| + | INNER JOIN table2 ON table1.attribut = table2.attribut | ||
| + | </ | ||
| + | |||
| + | Sur la première ligne: | ||
| + | |||
| + | * Pour voire un attribut de la //table1// il suffit de mettre son nom | ||
| + | * **__SAUF__** si il y a un attribut dans la //table2// qui s' | ||
| + | * Dans ce cas ou pour voire un attribut de la //table2// il faut alors le présenter comme ce ci: '' | ||
| + | |||
| + | ===2. Exemples=== | ||
| + | |||
| + | ==a) Exemple concret== | ||
| + | |||
| + | Voire le prénom, nom, l' | ||
| + | <code sql> | ||
| + | SELECT prenom, CLIENTS.nom, | ||
| + | FROM CLIENTS | ||
| + | INNER JOIN ABONNEMENT ON CLIENTS.id_abonnement = ABONNEMENT.id | ||
| + | </ | ||
| + | |||
| + | ^ prenom | ||
| + | | Frank | ||
| + | | | ||
| + | | | ||
| + | | | ||
| + | | Margot | ||
| + | | Annie | ||
| + | | Chloé | ||
| + | | | ||
| + | | | ||
| + | | Marie | ||
| + | |||
| + | |||
| + | ==b) Dans un sens== | ||
| + | <code sql> | ||
| + | SELECT * | ||
| + | FROM CLIENTS | ||
| + | INNER JOIN ABONNEMENT ON CLIENTS.id_abonnement = ABONNEMENT.id | ||
| + | </ | ||
| + | |||
| + | ^ id ^ prenom | ||
| + | | 3 | ||
| + | | 5 | ||
| + | | 9 | ||
| + | | 4 | ||
| + | | 10 | | ||
| + | | 1 | ||
| + | | 2 | ||
| + | | 7 | ||
| + | | 6 | ||
| + | |||
| + | ==c) Dans l' | ||
| + | |||
| + | <code sql> | ||
| + | SELECT * | ||
| + | FROM ABONNEMENT | ||
| + | INNER JOIN CLIENTS ON ABONNEMENT.id= CLIENTS.id_abonnement | ||
| + | WHERE condition | ||
| + | </ | ||
| + | |||
| + | ^ id ^ nom ^ prix ^ durée_mois | ||
| + | | 1 | ||
| + | | 1 | ||
| + | | 1 | ||
| + | | 2 | ||
| + | | 2 | ||
| + | | 3 | ||
| + | | 3 | ||
| + | | 3 | ||
| + | | 4 | ||
| + | | 4 | ||
| + | |||
| + | |||
| + | =====V. Modifier une relation===== | ||
| + | |||
| + | ====A) INSERT==== | ||
| + | |||
| + | **INSERT INTO** permet de rajouter des lignes à une relation | ||
| + | |||
| + | ===1. Code=== | ||
| + | |||
| + | <code sql> | ||
| + | INSERT INTO nom_table | ||
| + | (attribut1, attribut2, attribut3) | ||
| + | VALUES | ||
| + | (" | ||
| + | </ | ||
| + | |||
| + | ===2. Exemple=== | ||
| + | |||
| + | <code sql> | ||
| + | INSERT INTO CLIENTS | ||
| + | (id, prenom, nom, ville, age, id_abonnement) | ||
| + | VALUES | ||
| + | (1, ' | ||
| + | (2, ' | ||
| + | (3, ' | ||
| + | (4, ' | ||
| + | (5, ' | ||
| + | (6, ' | ||
| + | (7, ' | ||
| + | (8, ' | ||
| + | (9, ' | ||
| + | (10, ' | ||
| + | </ | ||
| + | |||
| + | Cela rajoutera à la relation ceci (visible grace à [[les_fiches_revisions: | ||
| + | ^ id ^ prenom | ||
| + | | 1 | ||
| + | | 2 | ||
| + | | 3 | ||
| + | | 4 | ||
| + | | 5 | ||
| + | | 6 | ||
| + | | 7 | ||
| + | | 8 | ||
| + | | 9 | ||
| + | | 10 | | ||
| + | |||
| + | |||
| + | ====B) UPDATE==== | ||
| + | |||
| + | Update est un mot anglais qui veut dire mettre à jour.\\ | ||
| + | **UPDATE** permet de changer certaines valeurs d'une relation en précisant une condition grâce à [[les_fiches_revisions: | ||
| + | |||
| + | ===1. Code=== | ||
| + | |||
| + | <code sql> | ||
| + | UPDATE nom_table | ||
| + | SET attribut1=" | ||
| + | WHERE condition | ||
| + | </ | ||
| + | |||
| + | Si vous ne préciser pas WHERE toutes les lignes seront modifiés !!! | ||
| + | |||
| + | ===2. Exemple=== | ||
| + | |||
| + | Scénario: L' | ||
| + | |||
| + | Si la relation ABONNEMENT ressemblait à ceci (visible grâce à : [[les_fiches_revisions: | ||
| + | ^ id ^ nom ^ prix ^ durée_mois | ||
| + | | 1 | ||
| + | | 2 | ||
| + | | 3 | ||
| + | | 4 | ||
| + | |||
| + | Après ce code | ||
| + | <code sql> | ||
| + | UPDATE ABONNEMENT | ||
| + | SET prix=15 | ||
| + | WHERE id=3 | ||
| + | </ | ||
| + | |||
| + | Elle ressemblera à ça | ||
| + | ^ id ^ nom ^ prix ^ durée_mois | ||
| + | | 1 | ||
| + | | 2 | ||
| + | | 3 | ||
| + | | 4 | ||
| + | |||
| + | ====C) DELETE==== | ||
| + | |||
| + | Delete est un mot anglais qui veut dire supprimer.\\ | ||
| + | **DELETE FROM** permet de supprimer certaines lignes d'une relation en précisant lesquels grâce à [[les_fiches_revisions: | ||
| + | |||
| + | ===1. Code=== | ||
| + | |||
| + | <code sql> | ||
| + | DELETE FROM nom_table | ||
| + | WHERE condition | ||
| + | </ | ||
| + | |||
| + | Si une condition n'est pas préciser, alors toutes les lignes seront supprimée.\\ | ||
| + | |||
| + | ===2. Exemple=== | ||
| + | |||
| + | Scénario: Le client //Jean Simon// n'a pas renouvelé son abonnement donc il est supprimé de la relation | ||
| + | |||
| + | Si la relation ABONNEMENT ressemblait à ceci (visible grâce à : [[les_fiches_revisions: | ||
| + | ^ id ^ prenom | ||
| + | | 1 | ||
| + | | 2 | ||
| + | | 3 | ||
| + | | 4 | ||
| + | | 5 | ||
| + | | 6 | ||
| + | | 7 | ||
| + | | 8 | ||
| + | | 9 | ||
| + | | 10 | | ||
| + | |||
| + | Après ce code | ||
| + | <code sql> | ||
| + | DELETE FROM CLIENTS | ||
| + | WHERE id=2 | ||
| + | </ | ||
| + | |||
| + | Elle ressemblera à ça: | ||
| + | ^ id ^ prenom | ||
| + | | 1 | ||
| + | | 3 | ||
| + | | 4 | ||
| + | | 5 | ||
| + | | 6 | ||
| + | | 7 | ||
| + | | 8 | ||
| + | | 9 | ||
| + | | 10 | | ||