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.' ;
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 siname
et la chaîne de caractères'Big Data Crunchers Ltd.'
ont la même valeur. Sur chaque ligne, la partiename = 'Big Data Crunchers Ltd.'
renvoieTRUE
(ou 1) si c'est le cas, etFALSE
(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) |
É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 |
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 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
ouFALSE
.Une fois les
TRUE
ouFALSE
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
etNOT
.
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 !