• 6 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 1/4/24

Extrayez des informations spécifiques de votre BDD

Maintenant que votre base de données est remplie, il serait temps d’en extraire des informations pertinentes. En effet, il serait peu utile d’avoir une BDD si cette dernière ne pouvait que stocker de l’information et la ressortir “bêtement”.

Vous allez apprendre dans cette partie comment extraire uniquement l’information qui vous intéresse, et en tirer quelques enseignements !

Avant tout, vous devez charger la base donnée foodly pour la partie 3.  Si vous êtes perdus, pas de problème, reprenez les instructions de chapitre et de ce chapitre .

Vous êtes prêt ? Votre base de données est chargée et mise à jour, vous utilisez bien foodly et non moviz?

Alors allons-y !

Isolez un objet unique

Dans la partie précédente, quand on lisait la base de la donnée, c’était souvent une table toute entière.

Or, c’est rarement ce que l’on souhaite.

Imaginons un utilisateur dans votre application Foodly. Il est en train de scanner un aliment lors de ses courses. L’application demandera à la BDD de lui restituer l’aliment en question.

Pour ce faire, il existe une commande en SQL que l’application pourra utiliser pour récupérer uniquement cet aliment. Nous l'avons déjà utilisé, il s’agit de la commande WHERE.

Si vous vous souvenez bien, vous aviez utilisé cette commande dans la partie précédente afin de restreindre une commande à un seul aliment ou utilisateur, grâce à son id.

Par exemple, la commande :

SELECT * FROM aliment WHERE id = 4;

va nous restituer uniquement l’aliment dont l’id est le numéro 4 !

WHERE ne se limite pas uniquement aux id. Comment écririez-vous la commande pour récupérer l’aliment poire uniquement ? Réfléchissez bien, je suis sûr que vous pouvez trouver !

Vous donnez votre langue au chat ? 🐱

La voici :

SELECT * FROM aliment WHERE nom = "poire";

Eh oui, c’est aussi simple que ça !

Vous pouvez appliquerWHERE  à n’importe quelle colonne en utilisant le nom de cette colonne.

Isolez plusieurs objets répondant à un critère de comparaison

OK, c’est utile de ne pouvoir sélectionner qu’un seul objet. Mais admettons que votre utilisateur souhaite voir tous les aliments bio de son hypermarché, ou bien ceux qui ne sont pas trop caloriques.

Comment traduire cela en SQL ?

WHERE fonctionne avec un principe de comparaison. Dans vos précédentes commandes, vous utilisiez l’opérateur égal (=) pour indiquer que vous ne vouliez uniquement l’objet dont le nom était égal à une valeur.

Or, vous pouvez utiliser tous les opérateurs classiques, tels que :

  • Supérieur à ( > ) ;

  • Inférieur à ( < ) ;

  • Supérieur ou égal à (>=) ;

  • Et inférieur ou égal à (<=).

Par exemple, comment afficher tous les aliments dont la teneur en calories n’excède pas (strictement) 90 kcal ?

Je vous laisse un peu de temps pour tester la commande de votre côté…

Voici la réponse :

SELECT * FROM aliment WHERE calories < 90;

Si tout s'est bien passé, vous avez 9 lignes sous les yeux.

Isolez des objets à partir d’une comparaison sur du texte

Dès que vous souhaitez filtrer une donnée sur du texte, en dehors de l’opérateur égal, ça devient impossible.

Vraiment impossible ?

Non ! Il existe un autre mot clé pour effectuer des comparaisons sur du texte : il s’agit du mot clé.

LIKE.  LIKE, c'est un peu le cousin deWHERE  .

LIKE  permet de sélectionner les objets dont le texte d’une colonne répond à un modèle spécifique. C’est en fait lui-même un opérateur, car il s’ajoute au sein d’une commande  WHERE  .

Prenons par exemple cette commande :

SELECT * FROM utilisateur WHERE email LIKE "%gmail.com";

À votre avis, que donne cette commande ?

Notez au passage le  %  devant le  gmail.com  .

Tapez-la dans votre terminal et regardez. 😉 Si tout se passe comme prévu, vous devriez avoir 4 lignes sous les yeux.

4 lignes, mais pas n'importe lesquelles... Eh oui, elle vous affiche tous les utilisateurs dont l’e-mail se termine par “gmail.com”.

Un lien avec le % dans notre commande ? 

Tout juste ! Le caractère   %  que nous avons écrit à un rôle très spécifique. Il va permettre de faire correspondre des shémas spécifiques, on parle parfois de pattern, dans les données textuelles. Voyez plutôt : 

Récapitulatif visuel du paragraphe rédigé ci-dessous
L’utilisation du pourcentage (%)

Ordonnez les objets récupérés pour chaque requête

Reprenons l’exemple de notre utilisateur qui cherche à afficher les aliments peu caloriques dans Foodly.

Grâce à ce que vous avez appris, vous pouvez désormais afficher les aliments dont les calories ne dépassent pas un certain seuil.

Ne serait-il pas encore plus utile pour notre utilisateur d’afficher les aliments par ordre croissant de calories ?

C’est possible en SQL. Et ce, grâce au mot clé ORDER BY.

Récapitulatif visuel du paragraphe rédigé ci-dessous
Le mot clé ODER BY

Ce mot clé vous permet d’ordonner une colonne par ordre croissant (ascending en anglais, d’où le mot clé SQLASC), ou décroissant (descending en anglais, soit le mot clé DESC).

Voici donc la commande à effectuer pour afficher les aliments par ordre croissant de calories :

SELECT * FROM aliment ORDER BY calories ASC;

En théorie, c'est le café qui arrive en 1er et pates en dernier. Quelle surprise !

Bien sûr, vous pouvez mixer les commandes entre elles ! Voici la commande pour n’afficher que les aliments dont les calories ne dépassent pas 90 kcal, mais de manière décroissante :

SELECT * FROM aliment WHERE calories < 90 ORDER BY calories DESC;

Prenez de bonnes habitudes

Vous ne le savez pas encore, mais vos requêtes vont vite devenir complexes, voire très complexes. Je vous donne donc dès maintenant un petit tuyau. Vous me remercierez plus tard. 😀

Essayez d'avoir une syntaxe la plus claire possible. Pour ce faire, n'hésitez pas à :

  • Mettre des parenthèses

  • Écrire sur plusieurs lignes vos requêtes

Un petit exemple ? 

Au lieu d'écrire :

SELECT * FROM aliment WHERE calories < 90  AND sucre >10 ORDER BY calories DESC;

Écrivez plutôt :

SELECT * 
FROM aliment 
WHERE (calories < 90)  AND (sucre >10) 
ORDER BY calories DESC;

Vous voyez la différence ? C'est plus facile à lire. Et si c'est plus facile à lire, c'est plus facile à relire, et donc on a moins de chance de commettre des erreurs.

À vous de jouer !

Imaginons que je vous demande tous les aliments qui ne sont pas bio dans la base, classés par ordre décroissant de contenance en protéines.

Comment allez-vous faire cela ?

Prenez un peu de temps pour y réfléchir, tentez d’effectuer la commande vous-même, et on se retrouve pour la correction dans le screencast ci-dessous. 👇

En résumé

  • Pour filtrer sur des données numériques on utilise le mot clé  WHERE  . 

  • Il s'utilise invariablement avec  SELECT ,  UDPATE ,  DELETE.

  • Il supporte tous les opérateurs de comparaison comme = , <, <=, > ou >= .

  • Pour les données textuelles, on utilise LIKE

  • On peut utiliser le pourcentage (%) pour affiner la recherche.

  • On peut ordonner les résultats d’une requête SQL avec la commande ORDER BY.

  • Essayez d'écrire des requêtes les plus lisibles possible.

Et si nous allions encore un peu plus loin dans les requêtes SQL ? Voyons au chapitre suivant comment effectuer des opérations mathématiques. Rien que ça !

Example of certificate of achievement
Example of certificate of achievement