Outils pour utilisateurs

Outils du site


les_fiches_revisions:bases_de_donnees:sql

Ceci est une ancienne révision du document !


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. Résumé

*CREATE TABLE* ⇒ Créer une relation

CREATE TABLE nom
(attribut1 domaine1, attribut2 domaine2);

*SELECT* ⇒ Montre la relation

SELECT attributs
FROM table1

*SELECT DISTINCT* ⇒ Montre la relation sans doublons

SELECT DISTINCT attribut
FROM nom_table

*WHERE* ⇒ Ajout de conditions (“filtre”) - Ajouté à SELECT, UPDATE et REMOVE

WHERE condition
 
WHERE condition1 AND condition2
 
WHERE condition1 OR condition2

Rappel: Les conditions sont sous cette forme: attribut=valeur

*ORDER BY* ⇒ Ajout à SELECT pour trier

ORDER BY attribut
 
ORDER BY attribut1, attribut2
 
ORDER BY attribut DESC

*INNER JOIN* ⇒ Jointure de deux bases de donnée - Ajout à SELECT

SELECT attributs
FROM table1
INNER JOIN table2 ON table1.attribut = table2.attribut

SELECT complexe - Exemple

SELECT attributs
FROM table1
INNER JOIN table2 ON table1.attribut = table2.attribut
WHERE condition1 AND (condition2 OR condition3)
ORDER BY table1.attribut, table2.attribut DESC

*INSERT* ⇒ Ajoute des lignes à une relation

INSERT INTO nom_table
(attribut1, attribut2, attribut3)
VALUES
("valeur1", "valeur2", "valeur3")

*UPDATE* ⇒ Change certaines lignes d'une relation

UPDATE nom_table
SET attribut1="valeur1", attribut2="valeur2"
WHERE condition

*DELETE* ⇒ Supprimes certaines lignes d'une relation

DELETE FROM nom_table
WHERE condition

II. Création d'une base de donnée (sur DB Browser for SQLite)

  1. Allumez DB Browser for SQLite
  2. Cliquez sur nouvelle base de donnée
  3. Donnez lui un nom
  4. Cette page devrais s'ouvrir:
  5. 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

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

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);

IV. 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 :explication 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 </code> ^ 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 <code sql> SELECT nom, prix FROM ABONNEMENT </code> ^ nom ^ prix ^ | Eco | 10 | | Famille | 15 | | Simple | 20 | | Pro | 40 | ====B) SELECT DISTINCT==== ===1. Code=== <code sql> SELECT DISTINCT attribut FROM nom_table </code> ===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 </code> ^ ville ^ | Paris | | Nantes | | Lyon | ====C) WHERE=== ===1. Code=== <code sql> SELECT attributs FROM nom_table WHERE condition </code> ===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. <code sql> condition1 AND condition2 </code> <code sql> condition1 OR condition2 </code> ===3. Exemple=== Pour voir les clients vivant à Paris qui ont 30 ans ou plus <code sql> SELECT * FROM CLIENTS WHERE ville=“Paris” AND age>=30 </code> ^ 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 <code sql> SELECT prenom, nom FROM CLIENTS WHERE age>50 OR ville=“Nantes” </code> ^ prenom ^ nom ^ | Jean | Simon | | Marc | Duval | | Paul | Ledoux | | Chloé | Olivier | ====D) ORDER BY==== ===1. Code simple=== <code sql> SELECT attributs FROM nom_table ORDER BY attribut </code> ===2. Plusieurs conditions=== ORDER BY va trier le tableau d'abbord par l'attribut1 puis par l'attribut2 puis enfin par l'attribut3 etc… <code sql> SELECT attributs FROM nom_table ORDER BY attribut1, attribut2, attribut3 </code> ===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 <code sql> SELECT attributs FROM nom_table ORDER BY attribut DESC </code> ASC <code sql> ORDER BY attribut ASC </code> Revient à écrire <code sql> ORDER BY attribut </code> ===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) <code sql> SELECT * FROM CLIENTS ORDER BY ville, nom, prenom </code> ^ 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 <code sql> SELECT nom, age FROM CLIENTS WHERE ville=“Paris” ORDER BY age DESC, nom </code> ^ 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 ===1. Code=== <code sql> SELECT attributs FROM table1 INNER JOIN table2 ON table1.attribut = table2.attribut </code> 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 <code sql> SELECT prenom, CLIENTS.nom, ABONNEMENT.nom, ABONNEMENT.prix FROM CLIENTS INNER JOIN ABONNEMENT ON CLIENTS.id_abonnement = ABONNEMENT.id </code> ^ 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== <code sql> SELECT * FROM CLIENTS INNER JOIN ABONNEMENT ON CLIENTS.id_abonnement = ABONNEMENT.id </code> ^ 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== <code sql> SELECT * FROM ABONNEMENT INNER JOIN CLIENTS ON ABONNEMENT.id= CLIENTS.id_abonnement WHERE condition </code> ^ 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 | =====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 (“valeur1”, “valeur2”, “valeur3”) </code> ===2. Exemple=== <code sql> INSERT INTO CLIENTS (id, prenom, nom, ville, age, id_abonnement) VALUES (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); </code> Cela rajoutera à la relation ceci (visible grace à SELECT): ^ 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 | ====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 à WHERE ===1. Code=== <code sql> UPDATE nom_table SET attribut1=“valeur1”, attribut2=“valeur2” WHERE condition </code> Si vous ne préciser pas WHERE toutes les lignes seront modifiés !!! ===2. Exemple=== Scénario: L'abonnement Simple à changé de prix, il est passé de 20€ à 15€ Si la relation ABONNEMENT ressemblait à ceci (visible grâce à : SELECT ^ 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 | Après ce code <code sql> UPDATE ABONNEMENT SET prix=15 WHERE id=3 </code> Elle ressemblera à ça ^ id ^ nom ^ prix ^ durée_mois ^ session ^ | 1 | Eco | 10 | 27 | 2 | | 2 | Famille | 15 | 27 | 5 | | 3 | Simple | 15 | 12 | 3 | | 4 | Pro | 40 | 24 | 20 | ====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 à WHERE ===1. Code=== <code sql> DELETE FROM nom_table WHERE condition </code> 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 à : SELECT ^ 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 | Après ce code <code sql> DELETE FROM CLIENTS WHERE id=2 </code> Elle ressemblera à ça: ^ id ^ prenom ^ nom ^ ville ^ age ^ id_abonnement ^ | 1 | Annie | Martin | Paris | 25 | 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 |

les_fiches_revisions/bases_de_donnees/sql.1674032030.txt.gz · Dernière modification: 2023/01/18 09:53 de hk