SQL : Extraction de données avec SELECT
Rappel :
Nom | NSI | Mathématiques | Anglais | EPS | Philosophie | Histoire & Géographie |
---|---|---|---|---|---|---|
Marion | 15 | 16 | 14 | 18 | 14 | 13 |
Nicolas | 12 | 12 | 15 | 14 | 15 | 16 |
Tom | 10 | 15 | 18 | 19 | 14 | 11 |
Fondamental : La commande SELECT
La commande SELECT permet de sélectionner des colonnes d'une ou de plusieurs tables données en paramètres.
SELECT colonne(s) FROM nom_tables(s)
Si l'on souhaite toutes les colonnes, on utilise le caractère générique *. Pour notre exemple ci-dessus, la commande :
SELECT * FROM notes ;
renverra ceci dans un terminal SQLite3 :
Marion|15|16|14|18|14|13
Nicolas|12|12|15|14|15|16
Tom|10|15|18|19|14|11
Complément :
On peut améliorer l'affichage avec ces 2 commandes précédant la commande SELECT :
sqlite> .headers ON
sqlite> .mode column
sqlite> SELECT * FROM notes;
pour obtenir finalement :
Nom NSI Mathématiques Anglais EPS Philosophie Histoire & Géographie
---------- ---------- ------------- ---------- ---------- ----------- ---------------------
Marion 15 16 14 18 14 13
Nicolas 12 12 15 14 15 16
Tom 10 15 18 19 14 11
Fondamental : Obtenir uniquement 1 ou des colonnes
SELECT nsi, nom FROM notes ;
renverra ceci :
NSI Nom
---------- ----------
15 Marion
12 Nicolas
10 Tom
On remarquera 2 choses :
l'affichage des colonnes respectent l'ordre demandé dans la requête : nsi puis nom ;
SQLite n'est pas sensible à la casse des caractères.
Fondamental : La commande WHERE
WHERE permet de spécifier des critères de sélection. Par exemple, savoir qui a au moins 15 en NSI et Mathématiques ? La commande ci-dessous :
SELECT Nom
FROM notes
WHERE NSI >= 15 AND Mathématiques >=15;
renverra :
Nom
----------
Marion
Ainsi donc, on peut aussi utiliser les opérateurs logiques NOT, OR ou AND.
Fondamental : Les fonctions de groupes - Agrégation
Avec la commande WHERE, nous pouvons obtenir des informations en travaillant sur les lignes. Avec les fonctions de groupe, on travaille cette fois-ci sur les colonnnes. Voici quelques exemples de telles fonctions :
AVG calcule la moyenne,
SUM calcule la somme d'une colonne,
MIN, MAX calculent le minimum et le maximum d'une colonne
COUNT donne le nombre de lignes d'une colonne.
2 exemples :
combien d'élèves ont plus de 15 en EPS ?
quelle est la moyenne de groupe en NSI ?
SELECT COUNT(*) FROM notes WHERE EPS > 15 ;
SELECT AVG(NSI) FROM notes ;
Les 2 requêtes précédentes donnent ce résultat :
sqlite> SELECT COUNT(*) FROM notes WHERE EPS > 15 ;
COUNT(*)
----------
2
sqlite> SELECT AVG(NSI) FROM notes ;
AVG(NSI)
----------------
12.3333333333333
Complément : Le tri avec ORDER BY - Officiellement hors programme -
Le tri des résultats peut se faire avec la commande ORDER BY de la sorte :
SELECT Nom, NSI, Mathématiques
FROM notes
ORDER BY NSI, Mathématiques ASC;
Cette requête retourne les lignes par ordre croissant (ASC, activé par défaut ; DESC pour décroissant) des notes de NSI, et en cas d'égalité, des notes de Mathématiques :
Nom NSI Mathématiques
---------- ---------- -------------
Tom 10 15
Nicolas 12 12
Marion 15 16
Fondamental : DISTINCT : Supprimer les doublons
L'utilisation de la commande SELECT en SQL permet de lire toutes les données d'une ou plusieurs colonnes. Cette commande peut potentiellement afficher des lignes en doubles. Pour éviter des redondances dans les résultats il faut simplement ajouter DISTINCT après le mot SELECT.
Reprenons notre exemple et affichons les notes de Philosophie :
SELECT Philosophie FROM notes ;
Philosophie
-----------
14
15
14
On pourrait vouloir afficher que les notes différentes de Philosophie en utilisant DISTINCT :
SELECT DISTINCT Philosophie FROM notes ;
qui supprimer les doublons de notes de Philosophie :
Philosophie
-----------
14
15
Cette requête ne s'applique que sur une seule colonne !