Ceci est une ancienne révision du document !
Table des matières
Langage SQL : requêtes d’interrogation et de mise à jour d’une base de données
I. Création d'une base de donnée (sur DB Browser for SQLite)
- Allumez DB Browser for SQLite
- Cliquez sur
nouvelle base de donnée - Donnez lui un nom
- Cliquez alors sur
Annuler
Pour exécuter des commandes (pour les prochaines catégories) cliquez sur Exécuter le SQL
L'exemple utiliser tous au long de ce wiki est le suivant:
- Relation CLIENTS
On connait leur prénom, nom, ville, age, salaire et leur abonnement
| id | prenom | nom | ville | age | id_abonnement |
|---|---|---|---|---|---|
| 1 | Annie | Martin | Paris | 25 | 3 |
| 2 | Jean | Simon | Nantes | 34 | 3 |
| 3 | Marc | Duval | Paris | 56 | 1 |
| 4 | Margot | Fournier | Lyon | 24 | 2 |
| 5 | Paul | Ledoux | Nantes | 31 | 1 |
| 6 | Anne | Lacroix | Paris | 47 | 4 |
| 7 | Chloé | Olivier | Lyon | 67 | 3 |
| 8 | Marie | Arnaud | Paris | 33 | 4 |
| 9 | Frank | Guillet | Paris | 22 | 1 |
| 10 | John | Gilles | Lyon | 39 | 2 |
- Relation ABONEMENTS
On connait le tarif mensuel, durée de l'abonnement, nombres de session
| id | nom | prix | durée_mois | session |
|---|---|---|---|---|
| 1 | Eco | 10 | 27 | 2 |
| 2 | Famille | 15 | 27 | 5 |
| 3 | Simple | 20 | 12 | 3 |
| 4 | Pro | 40 | 24 | 20 |
II. Créer une relation
CREATE TABLE est la commande qui permet de créer un relation, en lui attribuant des attributs et leur domaine
A) Code
CREATE TABLE nom (attribut1 domaine1, attribut2 domaine2);
Attribut : Correspond au nom de la colone
Domaine : Type de l'attribut:
- INT : Entiers
- TEXT : Chaine de charactères
B) Exemple
Création de la relation CLIENTS
CREATE TABLE CLIENTS (id INT, prenom TEXT, nom INT, ville INT, age INT, id_abonnement INT);
III. Visualiser une relation
A) SELECT
Cette commande permet de voir une relation (sous forme de tableau). D'autres commandes peuvent être rajouter en plus pour rajouter des spécification sur quel élément à afficher
1. Code
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
SELECT * FROM ABONNEMENT
| id | nom | prix | durée_mois | session |
|---|---|---|---|---|
| 1 | Eco | 10 | 27 | 2 |
| 2 | Famille | 15 | 27 | 5 |
| 3 | Simple | 20 | 12 | 3 |
| 4 | Pro | 40 | 24 | 20 |
b) Avec le nom d'une des colones (attribut)
Pour voir la liste des abonnements et leur prix
SELECT nom, prix FROM ABONNEMENT
| nom | prix |
|---|---|
| Eco | 10 |
| Famille | 15 |
| Simple | 20 |
| Pro | 40 |
B) SELECT DISTINCT
En rajoutant DISTINCT après SELECT, on peut éviter d'avoir des doublons.
1. Code
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
SELECT DISTINCT ville FROM CLIENTS
| ville |
|---|
| Paris |
| Nantes |
| Lyon |
C) WHERE
Cette commande rajoute un/des filtre(s)
1. Code
SELECT attributs FROM nom_table WHERE condition
2. Conditions
a) Les opérateurs
| Opérateur | Description |
|---|---|
| = | Egal |
| != | Pas egal |
| < | Inférieur à |
| > | Supérieur à |
| <= | Inférieur ou égale à |
| >= | Supérieur ou égale à |
b) Plusieurs conditions
En utilisant AND et OR il possible de préciser plusieurs conditions.
AND
Les deux conditions doit être vraie
condition1 AND condition2
OR
Soit:
Au moins une condition doit être vraie
condition1 OR condition2
3. Exemple
Pour voir les clients vivant à Paris qui ont 30 ans ou plus
SELECT * FROM CLIENTS WHERE ville="Paris" AND age>=30
| id | prenom | nom | ville | age | id_abonnement |
|---|---|---|---|---|---|
| 3 | Marc | Duval | Paris | 56 | 1 |
| 6 | Anne | Lacroix | Paris | 47 | 4 |
| 8 | Marie | Arnaud | Paris | 33 | 4 |
Pour voir le nom et prénom des clients qui ont plus 50 ans ou qui vive à Nantes
SELECT prenom, nom FROM CLIENTS WHERE age>50 OR ville="Nantes"
| prenom | nom |
|---|---|
| Jean | Simon |
| Marc | Duval |
| Paul | Ledoux |
| Chloé | Olivier |
D) ORDER BY
Permet de mettre de trier le tableau affiché selon les attributs précisé
1. Code simple
SELECT attributs FROM nom_table ORDER BY attribut
2. Plusieurs conditions
ORDER BY va trier le tableau d'abbord par l'attribut1 puis par l'attribut2 puis enfin par l'attribut3 etc…
SELECT attributs FROM nom_table ORDER BY attribut1, attribut2, attribut3
3. Sens de "triage"
En rajoutant DESC ou ASC
En rajoutant DESC après l'attribut il est possible de trier le tableau dans l'ordre inverse.
Si l'attribut à pour domaine INT alors ce sera trié par ordre décroissant.
Si l'attribut à pour domaine TEXT alors ce sera trié de Z à A.
DESC
SELECT attributs FROM nom_table ORDER BY attribut DESC
ASC
ORDER BY attribut ASC
Revient à écrire
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'ordre alphabétique)
SELECT * FROM CLIENTS ORDER BY ville, nom, prenom
| id | prenom | nom | ville | age | id_abonnement |
|---|---|---|---|---|---|
| 4 | Margot | Fournier | Lyon | 24 | 2 |
| 10 | John | Gilles | Lyon | 39 | 2 |
| 7 | Chloé | Olivier | Lyon | 67 | 3 |
| 5 | Paul | Ledoux | Nantes | 31 | 1 |
| 2 | Jean | Simon | Nantes | 34 | 3 |
| 8 | Marie | Arnaud | Paris | 33 | 4 |
| 3 | Marc | Duval | Paris | 56 | 1 |
| 9 | Frank | Guillet | Paris | 22 | 1 |
| 6 | Anne | Lacroix | Paris | 47 | 4 |
| 1 | Annie | Martin | Paris | 25 | 3 |
b) Avec DESC
Affiche le tableau des clients vivant à Paris en les trieant, par leur age décroissant puis par leur nom
SELECT nom, age FROM CLIENTS WHERE ville="Paris" ORDER BY age DESC, nom
| nom | age |
|---|---|
| Duval | 56 |
| Lacroix | 47 |
| Arnaud | 33 |
| Martin | 25 |
| Guillet | 22 |
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
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'appelle pareil
* Dans ce cas ou pour voire un attribut de la table2 il faut alors le présenter comme ce ci: table.attribut
2. Exemples
a) Exemple concret
Voire le prénom, nom, l'abonnement et le prix qu'il paye pour
SELECT prenom, CLIENTS.nom, ABONNEMENT.nom, ABONNEMENT.prix FROM CLIENTS INNER JOIN ABONNEMENT ON CLIENTS.id_abonnement = ABONNEMENT.id
| prenom | nom | nom | prix |
|---|---|---|---|
| Frank | Guillet | Eco | 10 |
| Marc | Duval | Eco | 10 |
| Paul | Ledoux | Eco | 10 |
| John | Gilles | Famille | 15 |
| Margot | Fournier | Famille | 15 |
| Annie | Martin | Simple | 20 |
| Chloé | Olivier | Simple | 20 |
| Jean | Simon | Simple | 20 |
| Anne | Lacroix | Pro | 40 |
| Marie | Arnaud | Pro | 40 |
b) Dans un sens
SELECT * FROM CLIENTS INNER JOIN ABONNEMENT ON CLIENTS.id_abonnement = ABONNEMENT.id
| id | prenom | nom | ville | age | id_abonnement | id | nom | prix | durée_mois | session |
|---|---|---|---|---|---|---|---|---|---|---|
| 3 | Marc | Duval | Paris | 56 | 1 | 1 | Eco | 10 | 27 | 2 |
| 5 | Paul | Ledoux | Nantes | 31 | 1 | 1 | Eco | 10 | 27 | 2 |
| 9 | Frank | Guillet | Paris | 22 | 1 | 1 | Eco | 10 | 27 | 2 |
| 4 | Margot | Fournier | Lyon | 24 | 2 | 2 | Famille | 15 | 27 | 5 |
| 10 | John | Gilles | Lyon | 39 | 2 | 2 | Famille | 15 | 27 | 5 |
| 1 | Annie | Martin | Paris | 25 | 3 | 3 | Simple | 20 | 12 | 3 |
| 2 | Jean | Simon | Nantes | 34 | 3 | 3 | Simple | 20 | 12 | 3 |
| 7 | Chloé | Olivier | Lyon | 67 | 3 | 3 | Simple | 20 | 12 | 3 |
| 6 | Anne | Lacroix | Paris | 47 | 4 | 4 | Pro | 40 | 24 | 20 |
c) Dans l'autre
SELECT * FROM ABONNEMENT INNER JOIN CLIENTS ON ABONNEMENT.id= CLIENTS.id_abonnement WHERE condition
| id | nom | prix | durée_mois | session | id | prenom | nom | ville | age | id_abonnement |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Eco | 10 | 27 | 2 | 3 | Marc | Duval | Paris | 56 | 1 |
| 1 | Eco | 10 | 27 | 2 | 5 | Paul | Ledoux | Nantes | 31 | 1 |
| 1 | Eco | 10 | 27 | 2 | 9 | Frank | Guillet | Paris | 22 | 1 |
| 2 | Famille | 15 | 27 | 5 | 4 | Margot | Fournier | Lyon | 24 | 2 |
| 2 | Famille | 15 | 27 | 5 | 10 | John | Gilles | Lyon | 39 | 2 |
| 3 | Simple | 20 | 12 | 3 | 1 | Annie | Martin | Paris | 25 | 3 |
| 3 | Simple | 20 | 12 | 3 | 2 | Jean | Simon | Nantes | 34 | 3 |
| 3 | Simple | 20 | 12 | 3 | 7 | Chloé | Olivier | Lyon | 67 | 3 |
| 4 | Pro | 40 | 24 | 20 | 6 | Anne | Lacroix | Paris | 47 | 4 |
| 4 | Pro | 40 | 24 | 20 | 8 | Marie | Arnaud | Paris | 33 | 4 |


