Sélection de données
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