Sélection de données

Sélection de données

8 May 2021

L'utilisation la plus répandue en SQL est la sélection d'informations dans une table SQL, que ce soit pour extraire une ou plusieurs données.

Table d'exemple

La table ci-dessous nous servira d'exemple dans l'article suivant :

Nom de la table : users.

id prenom age ville
1 Sylvie 34 Metz
2 Paul 56 Troyes
3 Léo 18 Troyes
4 Sarah 27 Mulhouse

Sélectionner tous les enregistrements

SELECT * FROM users

Cette commande est la plus simple en termes de sélection. Cette requête SQL permet de sélectionner tous les enregistrements au sein de la table users grâce au joker étoile *.

Résultat :

id prenom age ville
1 Sylvie 34 Metz
2 Paul 56 Troyes
3 Léo 18 Troyes
4 Sarah 27 Mulhouse

Sélectionner les enregistrements d'une seule ou plusieurs colonnes

Si vous souhaitez obtenir toutes les données venant d'une table en ne gardant que les informations stockées dans une colonne de la table, il vous suffit de la spécifier dans la requête :

SELECT prenom FROM users

Résultat :

prenom
Sylvie
Paul
Léo
Sarah

Pour avoir plusieurs colonnes :

SELECT id, ville FROM users

L'ordre d'appel des colonnes n'a pas d'importance, listez simplement le nom des colonnes voulues en les séparant par une virgule. Les résultats vous seront restitués en respectant l'ordre que vous avez choisi au moment de l'appel.

Résultat :

id ville
1 Metz
2 Troyes
3 Troyes
4 Mulhouse

Filtrer les résultats

Il est tout à fait possible de filtrer les résultats voulus selon un ou plusieurs conditions. Pour cela, nous utiliserons la commande WHERE :

Pour obtenir les utilisateurs habitant à Troyes, voilà la requête SQL à écrire :

SELECT * FROM users WHERE ville = 'Troyes'

Résultat :

id prenom age ville
2 Paul 56 Troyes
3 Léo 18 Troyes

Nous pourrions demander l'inverse, c'est-à-dire de n'avoir que les utilisateurs ne venant pas de Troyes :

SELECT * FROM users WHERE ville != 'Troyes'

Résultat :

id prenom age ville
1 Sylvie 34 Metz
4 Sarah 27 Mulhouse

Cumuler les filtres

Opérateur AND

L'opérateur AND permet de cumuler différentes conditions dans la commande WHERE. Toutes doivent être respectées et vraies pour avoir un résultat.

SELECT * FROM users WHERE ville = 'Troyes' AND age > 20

Dans ma requête, je demande à récupérer les utilisateurs venant de Troyes et dont l'âge est supérieur à 20.

Résultat :

id prenom age ville
2 Paul 56 Troyes

Opérateur OR

L'opérateur OR permet de cumuler différentes conditions dans la commande WHERE. Si l'une d'elles est vraie, un résultat sera tourné.

SELECT * FROM users WHERE ville = 'Paris' OR ville = 'Mulhouse'

Dans ma requête, je demande à récupérer les utilisateurs venant de Paris ou venant de Mulhouse.

Résultat :

id prenom age ville
4 Sarah 27 Mulhouse

Opérateur AND et OR ensemble

Les deux opérateurs peuvent tout à fait être combinés afin d'augmenter votre filtrage.
Vous pouvez, par exemple, obtenir les personnes vivant à Metz et ayant moins de 20 ans et les personnes vivants à Troyes et ayant plus de 20 ans.

SELECT * FROM users 
WHERE (ville = 'Metz' AND age < 40)
OR (ville = 'Troyes' AND age > 20)

Résultat :

id prenom age ville
2 Paul 56 Troyes
3 Léo 18 Troyes
4 Sarah 27 Mulhouse

Ranger les résultats

Une fois que vous avez sélectionné vos enregistrements, avec ou sans filtrage, vous pouvez les ranger de façon ascendante ou descendante. La commande ORDER BY est adapté à cet effet.

SELECT * FROM users ORDER BY prenom

Cette commande classera le tableau selon les valeurs contenues dans la colonne prenom et par ordre alphabétique, soit de manière ascendante.
Il est possible d'utiliser le suffixe ASC, le résultat sera le même.

SELECT * FROM users ORDER BY prenom ASC

Pour trier les résultats, mais de Z à A, soit de manière descendante, nous devons ajouter le suffixe DESC.

SELECT * FROM users ORDER BY prenom DESC

Si vous ne mettez aucun suffixe, les résultats seront classés par ordre ascendant par défaut.

La commande ORDER BY peut s'utiliser seule comme dans les exemples ci-dessus ou combinée avec la commande WHERE. Dans ce cas, elle intervient toujours après la commande WHERE.

SELECT * FROM users WHERE age > 20 ORDER BY prenom DESC

Limiter les résultats

Vous avez la possibilité de limiter le nombre de résultats retournés en indiquant à la requête le nombre d'enregistrements voulus avec la commande LIMIT.

SELECT * FROM users LIMIT 5

Cette requête me retournera les cinq premiers enregistrements trouvés. Si jamais votre table contient moins de cinq données, elle retournera toutes les lignes.

Il est conseillé d'utiliser cette commande avec ORDER BY pour s'assurer que les résultats présentés soient les bons.

Offset

L'offset permet de récupérer les résultats à partir d'un certain point.

SELECT * FROM users LIMIT 2, 5

Le premier nombre est l'offset et le second la limite. La requête demande à récupérer tous les résultats en partant du deuxième enregistrement et de prendre les cinq suivants.

Ordre de la requête

Si maintenant vous souhaitez utiliser toutes ces commandes dans une seule et même requête, vous devez respecter l'ordre suivant :

SELECT * FROM ma_table 
WHERE condition 
ORDER BY colonne [ASC|DESC] 
LIMIT nombre