• 12 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 15/05/2023

Filtrez vos lignes avec WHERE

Au chapitre précédent, nous nous sommes familiarisés avec la table entity  .

Ici, on va aller plus loin en y recherchant Big Data Crunchers Limited, la mystérieuse société sur laquelle nous enquêtons.

Familiarisez-vous avec le filtrage

Avec le SELECT, on avait sélectionné les colonnes qui nous intéressaient. Le WHERE fait la même chose, mais pour les lignes.

Cependant, dans une base de données, nous connaissons d'avance les noms des colonnes, car la liste des colonnes n'a pas vocation à changer régulièrement.

Par contre, en ce qui concerne les lignes, on ne les connaît pas à l'avance, et elles varient beaucoup au cours du temps. Certaines bases de données reçoivent même des milliers de lignes chaque seconde : c'est le cas pour les grands réseaux sociaux, qui doivent stocker dans leur BDD les posts de plusieurs milliers d'utilisateurs à travers le monde ! C'est la vocation d'une base de données : stocker des données dynamiques, que l'on ajoute, que l'on supprime, ou que l'on modifie au fil de l'utilisation !

Comme les lignes à garder (ou enlever) sont dynamiques, il nous faut donc établir une condition qui nous permette de filtrer les lignes voulues.

Exécutez une requête avec WHERE

Nous allons rechercher la présence de Big Data Crunchers Ltd, notre mystérieuse société.

SELECT * FROM entity WHERE name = 'Big Data Crunchers Ltd.' ;
Résultat de la requête
Résultat de la requête

Cette requête renvoie une table d'une ligne, qui correspond à la société que nous recherchons.

Que s'est-il passé ?

En fait, il y a 2 étapes :

  1. La première, c'est de calculer pour chaque ligne si la condition est vérifiée. Pour cette condition, nous avons utilisé le signe =  , qui teste pour chaque ligne si name  et la chaîne de caractères 'Big Data Crunchers Ltd.'  ont la même valeur. Sur chaque ligne, la partie name = 'Big Data Crunchers Ltd.'  renvoie TRUE  (ou 1) si c'est le cas, et FALSE  (ou 0) sinon. 

  2. La 2e étape, c'est le WHERE qui l'effectue : il ne va garder que les lignes pour lesquelles la condition a renvoyé TRUE  .

Outre l'opérateur =  , d'autres opérateurs de comparaison sont possibles en SQL :

Opérateur

Renvoie TRUE si

A = B

A égal à B

A <> B

A différent de B

A > B  et  A < B

A supérieur à B / A inférieur à B

A >= B  et  A <= B

A supérieur ou égal à B / A inférieur ou égal à B

A BETWEEN B AND C

A est compris entre B et C

A IN (B1, B2, B3)

A est présent dans la liste (B1, B2, B3)

A NOT IN (B1, B2, B3)

A n'est pas présent dans la liste (B1, B2, B3)

A IS NULL

A n'a pas de valeur

A IS NOT NULL

A n'est pas nul (c'est-à-dire qu'il a une valeur connue) 

Étoffez vos requêtes avec AND et OR

Il est possible de combiner plusieurs conditions grâce aux opérateurs logiques :

  • OR

  • AND

  • NOT

Ils signifient respectivement OU, ET, NON.

opérateur

renvoie TRUE si

C1 AND C2

la condition C1 est TRUE  et si C2 est aussi TRUE

C1 OR C2

C1 est TRUE  ou bien si C2 est TRUE

NOT C1

C1 est  FALSE

Grâce à ces opérateurs, on peut complexifier un peu notre condition :

SELECT 
* 
FROM 
entity 
WHERE 
(id < 10000004 AND (NOT id < 10000000))
OR (name = 'Big Data Crunchers Ltd.')
Résultat de la requête
Résultat de la requête étoffée

Cette requête affichera une ligne donnée si cette ligne a son identifiant strictement inférieur à 10 000 004 et pas inférieur à 10 000 000, ou bien si son nom est Big Data Crunchers Ltd.  .

Formulée plus simplement, cette requête renverra toutes les sociétés dont l'identifiant est compris entre 10 000 000 (inclus) et 10 000 004 (exclus) ainsi que toutes les sociétés dont le nom est Big Data Crunchers Ltd. Relisez à tête reposée, c'est de la gymnastique de neurones ! 

À vous de jouer

Contexte

Vous souhaitez placer sur une carte les différentes adresses contenues dans la table address  . En effet, il est fréquent que des centaines de sociétés-écrans aient la même adresse ! Rien de très incohérent car ces sociétés n’existent que sur des documents légaux : elles n’ont ni bureaux ni employés.

La table address  contient une colonne countries  qui (le plus souvent), contient le code à 3 lettres du pays dans lequel se trouve l’adresse en question. Cela va vous permettre de cibler certains pays ou juridictions afin de réaliser votre carte.

Consignes

Dans la BDD des Panama Papers, recherchez dans la table address  les lignes dont le code du pays est soit JEY soit PAN. 

Écrivez 2 versions de la requête, une avec OR  , une avec IN  .

Vérifiez votre travail

Il faut utiliser ici l'opérateur =  deux fois, et combiner les deux avec un OR  :

SELECT * FROM address WHERE countries = 'JEY' OR countries = 'PAN'

L'option alternative est d'utiliser IN  :

SELECT * FROM address WHERE countries In ( 'JEY' , 'PAN')

En résumé

  • WHERE permet de filtrer les lignes d'une table selon une certaine condition.

  • Cette condition fait souvent appel à des opérateurs de comparaison.

  • Cette condition renvoie pour chaque ligne TRUE  ou FALSE  .

  • Une fois les TRUE  ou FALSE  calculés, WHERE se charge de ne garder que les lignes qui sont à TRUE  .

  • Il est possible de combiner des conditions avec les opérateurs de comparaison OR  , AND  et NOT  .

Vous savez maintenant sélectionner des colonnes et filtrer des lignes. Dans le prochain chapitre, nous allons voir comment récupérer des informations qui proviennent de plusieurs tables !

Exemple de certificat de réussite
Exemple de certificat de réussite