Les critères de sélection
Les critères de sélection
Imaginons que je souhaite obtenir uniquement la liste des jeux disponibles de la console « Nintendo 64 » et les trier par prix croissants. Ça paraît compliqué à faire ? Pas en SQL !
Vous allez voir qu'en modifiant nos requêtes SQL, il est possible de filtrer et trier très facilement vos données. Nous allons nous intéresser ici aux mots-clés suivants du langage SQL :
- WHERE ;
- ORDER BY ;
- LIMIT.
WHERE
Grâce au mot-clé WHERE, vous allez pouvoir trier vos données.
Supposons par exemple que je veuille lister uniquement les jeux appartenant à Patrick. La requête au début sera la même qu'avant, mais je rajouterai à la fin WHERE possesseur='Patrick'.
Cela nous donne la requête :
Code : PHP
1 |
SELECT * FROM jeux_video WHERE possesseur='Patrick' |
Traduction : « Sélectionner tous les champs de la table jeux_video lorsque le champ possesseur est égal à Patrick ».
Vous noterez que pour délimiter les chaînes de caractères on doit les placer entre apostrophes, comme c'est ici le cas pour 'Patrick'. En revanche, elles ne sont pas nécessaires pour les nombres.
Un petit code pour voir ce que ça donne ?
Code : PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php try { $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT nom, possesseur FROM jeux_video WHERE possesseur=\'Patrick\''); while ($donnees = $reponse->fetch()) { echo $donnees['nom'] . ' appartient à ' . $donnees['possesseur'] . '<br />'; } $reponse->closeCursor(); ?> |
Si vous vous amusez à changer le nom du possesseur (WHERE possesseur='Michel' par exemple ), ça n'affichera que les jeux appartenant à Michel. Essayez, vous verrez !
Il est par ailleurs possible de combiner plusieurs conditions. Par exemple, si je veux lister les jeux de Patrick qu'il vend à moins de 20 euros, je combinerai les critères de sélection à l'aide du mot-clé AND (qui signifie « et ») :
Code : PHP
1 |
SELECT * FROM jeux_video WHERE possesseur='Patrick' AND prix < 20 |
Traduction : « Sélectionner tous les champs de jeux_video lorsque le possesseur est Patrick ET lorsque le prix est inférieur à 20 ».
Il existe aussi le mot-clé OR qui signifie « ou ».
ORDER BY
ORDER BY nous permet d'ordonner nos résultats. Nous pourrions ainsi classer les résultats en fonction de leur prix ! La requête SQL serait :
Code : PHP
1 |
SELECT * FROM jeux_video ORDER BY prix |
Traduction : « Sélectionner tous les champs de jeux_video et ordonner les résultats par prix croissants ».
Application :
Code : PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php try { $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT nom, prix FROM jeux_video ORDER BY prix'); while ($donnees = $reponse->fetch()) { echo $donnees['nom'] . ' coûte ' . $donnees['prix'] . ' EUR<br />'; } $reponse->closeCursor(); ?> |
Et si je veux classer par ordre décroissant ?
Facile. Il suffit de rajouter le mot-clé DESC à la fin :
Code : PHP
1 |
SELECT * FROM jeux_video ORDER BY prix DESC |
Traduction : « Sélectionner tous les champs de jeux_video, et ordonner les résultats par prix décroissants ».
À noter : si on avait utilisé ORDER BY sur un champ contenant du texte, le classement aurait été fait par ordre alphabétique.
LIMIT
LIMIT nous permet de ne sélectionner qu'une partie des résultats (par exemple les 20 premiers). C'est très utile lorsqu'il y a beaucoup de résultats et que vous souhaitez les paginer (c'est-à-dire par exemple afficher les 30 premiers résultats sur la page 1, les 30 suivants sur la page 2, etc).
À la fin de la requête, il faut ajouter le mot-clé LIMIT suivi de deux nombres séparés par une virgule. Par exemple :
Code : PHP
1 |
SELECT * FROM jeux_video LIMIT 0, 20 |
Ces deux nombres ont un sens bien précis.
- On indique tout d'abord à partir de quelle entrée on commence à lire la table. Ici, j'ai mis « 0 », ce qui correspond à la première entrée. Attention, cela n'a rien à voir avec le champ ID ! Imaginez qu'une requête retourne 100 résultats : LIMIT tronquera à partir du premier résultat si vous indiquez 0, à partir du 21ème si vous indiquez 20, etc.
- Ensuite, le deuxième nombre indique combien d'entrées on doit sélectionner. Ici, j'ai mis « 20 », on prendra donc vingt entrées.
Quelques exemples :
- LIMIT 0, 20 : affiche les vingt premières entrées ;
- LIMIT 5, 10 : affiche de la sixième à la quinzième entrée ;
- LIMIT 10, 2 : affiche la onzième et la douzième entrée.
Un petit schéma se trouve à la figure suivante pour résumer le fonctionnement de LIMIT.
Présentation du fonctionnement de LIMIT
Allez, un petit exemple ! Si on veut afficher les 10 premiers jeux de la table, on utilisera le code suivant :
Code : PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php try { $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT nom FROM jeux_video LIMIT 0, 10'); echo '<p>Voici les 10 premières entrées de la table jeux_video :</p>'; while ($donnees = $reponse->fetch()) { echo $donnees['nom'] . '<br />'; } $reponse->closeCursor(); ?> |
Et voilà le travail !
Bonjour, je suis masochiste et avant de terminer cette section, je souhaiterais mélanger toutes les requêtes SQL que je viens d'apprendre en une seule. C'est possible ?
Mais bien entendu, mon petit. ;-)
Voilà de quoi te triturer les méninges :
Code : PHP
1 |
SELECT nom, possesseur, console, prix FROM jeux_video WHERE console='Xbox' OR console='PS2' ORDER BY prix DESC LIMIT 0,10 |
Il faut utiliser les mots-clés dans l'ordre que j'ai donné : WHERE puis ORDER BY puis LIMIT, sinon MySQL ne comprendra pas votre requête.
Essayez donc de traduire ça en français dans un premier temps pour voir si vous avez compris, puis testez cette requête chez vous pour voir si c'est bien ce à quoi vous vous attendiez.
Créé avec HelpNDoc Personal Edition: Créez sans effort une documentation de haute qualité avec un outil de création d'aide