
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.
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.
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.' ;
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 :
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.
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 égal à B |
| A différent de B |
| A supérieur à B / A inférieur à B |
| A supérieur ou égal à B / A inférieur ou égal à B |
| A est compris entre B et C |
| A est présent dans la liste (B1, B2, B3) |
| A n'est pas présent dans la liste (B1, B2, B3) |
| A n'a pas de valeur |
| A n'est pas nul (c'est-à-dire qu'il a une valeur connue) |
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 |
C1 OR C2 | C1 est |
NOT C1 | C1 est |
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.')
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 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.
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 .
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')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 !