SQL : Extraction de données avec SELECT

Rappel

Table notes

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

FondamentalLa commande SELECT

La commande SELECT permet de sélectionner des colonnes d'une ou de plusieurs tables données en paramètres.

1
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 :

1
SELECT * FROM notes ;

renverra ceci dans un terminal SQLite3 :

1
Marion|15|16|14|18|14|13
2
Nicolas|12|12|15|14|15|16
3
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 :

1
sqlite> .headers ON
2
sqlite> .mode column
3
sqlite> SELECT * FROM notes;
4

pour obtenir finalement :

1
Nom         NSI         Mathématiques  Anglais     EPS         Philosophie  Histoire & Géographie
2
----------  ----------  -------------  ----------  ----------  -----------  ---------------------
3
Marion      15          16             14          18          14           13                   
4
Nicolas     12          12             15          14          15           16                   
5
Tom         10          15             18          19          14           11                   

FondamentalObtenir uniquement 1 ou des colonnes

1
SELECT nsi, nom FROM notes ;

renverra ceci :

1
NSI         Nom       
2
----------  ----------
3
15          Marion    
4
12          Nicolas   
5
10          Tom 

On remarquera 2 choses :

  1. l'affichage des colonnes respectent l'ordre demandé dans la requête : nsi puis nom ;

  2. SQLite n'est pas sensible à la casse des caractères.

FondamentalLa 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 :

1
SELECT Nom
2
FROM notes
3
WHERE NSI >= 15 AND Mathématiques >=15;

renverra :

1
Nom       
2
----------
3
Marion

Ainsi donc, on peut aussi utiliser les opérateurs logiques NOT, OR ou AND.

FondamentalLes 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 ?

1
SELECT COUNT(*) FROM notes WHERE EPS > 15 ;
2
SELECT AVG(NSI) FROM notes ;

Les 2 requêtes précédentes donnent ce résultat :

1
sqlite> SELECT COUNT(*) FROM notes WHERE EPS > 15 ;
2
COUNT(*)  
3
----------
4
2         
5
sqlite> SELECT AVG(NSI) FROM notes ;
6
AVG(NSI)        
7
----------------
8
12.3333333333333
9

ComplémentLe tri avec ORDER BY - Officiellement hors programme -

Le tri des résultats peut se faire avec la commande ORDER BY de la sorte :

1
SELECT Nom, NSI, Mathématiques
2
FROM notes
3
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 :

1
Nom         NSI         Mathématiques
2
----------  ----------  -------------
3
Tom         10          15           
4
Nicolas     12          12           
5
Marion      15          16

FondamentalDISTINCT : 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 :

1
SELECT Philosophie FROM notes ;
1
Philosophie
2
-----------
3
14         
4
15         
5
14         

On pourrait vouloir afficher que les notes différentes de Philosophie en utilisant DISTINCT :

1
SELECT DISTINCT Philosophie FROM notes ;

qui supprimer les doublons de notes de Philosophie :

1
Philosophie
2
-----------
3
14         
4
15         

Cette requête ne s'applique que sur une seule colonne !