Today SQL Course
Today SQL Course
Today SQL Course
1
Maintenant que nous avons vu la théorie, nous allons passer à la
pratique et voir comment traduire ces opérations en SQL. Nous allons
donc étudier la sous-portion du SQL qui permet de manipuler des
tables : y insérer des données, les sélectionner, etc. Cette portion du
SQL est appelée le SQL DML : Data Manipulation Language.
Grosso-modo, celui-ci définit plusieurs instructions relativement
simples, et nous allons nous concentrer sur :
•SELECT : Sélection de données,
•JOIN : Jointure de plusieurs sources,
•INSERT : Insertion de données,
•DELETE : Suppression de données,
•UPDATE : Mise à jour de données existantes
SELECT
Dans le cas le plus simple, la syntaxe de SELECT est la suivante :
SELECT nom_colonnes : /* les noms des colonnes sont séparés par des virgules */ FROM nom_table ;
Le SELECT effectue une projection : les noms des colonnes indiqués après le SELECT correspondent
aux colonnes qui seront conservées, les autres étant éliminées par la projection. Le FROM indique dans quelle
table il faut effectuer la projection et la sélection. On peut se limiter à faire une projection, ce qui fait que la
syntaxe suivante est parfaitement possible :
SELECT nom, prénom FROM personne ;
Doublons
On peut préciser qu'il est possible que certaines lignes donnent des doublons dans la table. Par exemple,
rien n’empêche que plusieurs personnes différentes aient le même nom :
une projection de la colonne nom dans une table de personne donnera fatalement quelques doublons.
Mais il est possible d'éliminer ces doublons en utilisant un mot-clé. Ce mot-clé
DISTINCT doit être placé entre le SELECT et les noms des colonnes.
SELECT DISTINCT nom_colonnes FROM nom_table ;
Voici la requête SQL pour obtenir une table dans laquelle on ne récupérerait que les noms des
animaux (sans doublons) :
SELECT DISTINCT nom FROM Animal
Voici la requête SQL pour obtenir une table dans laquelle on ne récupérerait que les noms et les dates de
naissance des animaux (sans doublons) :
SELECT DISTINCT nom , date_naissance FROM Animal
Si jamais vous souhaitez conserver toutes les colonnes lors d'une projection, vous devez utiliser la
syntaxe suivante :
SELECT * FROM Nom_table WHERE condition
Par exemple, la requête SELECT suivante sélectionne toutes les lignes de la table personne où l'attribut
prenom vaut "Jean", sans faire de projection.
SELECT * FROM personne WHERE (prenom = "Jean")
Agrégations
Dans le SELECT, il est possible d'utiliser certaines fonctions qui permettent respectivement de :
•faire la somme de tous les attributs d'une colonne (leur somme) ;
•déterminer quelle est la plus petite valeur présente dans la colonne (son minimum) ;
•déterminer quelle est la plus grande valeur présente dans la colonne (son maximum) ;
•déterminer quelle est la moyenne de la colonne ;
•déterminer quelle est le nombre de lignes de la colonne projetée.
Ces fonctions sont respectivement nommées :
•SUM (somme d'une colonne) ;
•AVG (moyenne d'une colonne) ;
•MIN (minimum d'une colonne) ;
•MAX (maximum d'une colonne) ;
•COUNT (nombre de lignes d'une colonne).
Par exemple, imaginons que vous ayez une table Personne contenant une liste de personnes,
avec un attribut/colonne age et un autre attribut pour le nom. Supposons que vous souhaitiez calculer la
moyenne d'âge des personnes de cette liste : vous pouvez le faire en utilisant cette requête :
SELECT AVG(age) FROM Personne ;
Comme autre exemple, vous pouvez prendre la personne la plus âgée en utilisant la requête suivante :
SELECT MAX(age) FROM Personne ;
De même, vous pouvez savoir combien de noms différents contient la table en utilisant cette requête :
SELECT DISTINCT COUNT(nom) FROM Personne ;
WHERE
Si on veut effectuer une sélection, c'est cette syntaxe qu'il faut utiliser
SELECT nom_colonnes FROM nom_table WHERE condition_selection ;
Comparaisons de baseLe WHERE, facultatif, permet de faire une sélection : il précise la condition que les
lignes doivent respecter pour être conservées dans la table résultat.
Les tests autorisés en SQL sont les conditions les plus basiques :
a<b;
•a > b ;
•a <= b ;
•a >= b ;
•a = b ;
•a <> b.
De plus, les opérateurs booléens AND, OR et NOT sont possibles (avec le XOR en plus).
Les comparaisons vues plus haut ne permettent pas de vérifier si le contenu d'une colonne est NULL. Ainsi,
une condition du type age = NULL ne sera tout simplement pas accepté par le SGBD. Pour vérifier si une
colonne contient ou non la valeur NULL, il faut utiliser des conditions spéciales, notées respectivement :
•IS NULL ;
•IS NOT NULL.
Pour donner un exemple, la requête suivante renvoie toutes les personnes dont l'âge est inconnu :
* FROM Personne WHERE age IS NULL ;
SELECT
Comme autre exemple, la requête suivante renvoie toutes les personnes dont l'adresse est connue :
Par exemple, cette requête renvoie les lignes de la table personne qui comprend les personnes dont l'âge
est compris entre 18 et 62 ans (les personnes en âge de travailler) :
SELECT * FROM Personne WHERE age BETWEEN 18 AND 62 ;
Cela fonctionne aussi avec les chaines de caractère ou les dates. Par exemple, la requête suivante renvoie toutes les personnes qui sont nées entre le 2 juillet 2000 et
le 3 octobre 20014 :