Dans une base de données, il arrive souvent que deux chaînes de caractères différentes puissent décrire la même information.
Par exemple, les chaînes de caractères 'Anne-Marie' et 'Anne Marie' font référence au même prénom, mais elles diffèrent à cause du tiret.
Pour cela, il existe un opérateur très pratique en SQL : c'est LIKE.
Découvrez LIKE
LIKE va vous permettre d'effectuer une recherche dans des chaînes de caractères. Il est utilisé lorsque l'on ne connaît qu'une partie de la chaîne de caractères, ou que l'on connaît sa forme générale.
On utilise LIKE avec les caractères _
et %
. Le premier est employé pour remplacer un caractère inconnu, le second pour remplacer 0, 1 ou plusieurs caractères inconnus.
Par exemple, pour connaître toutes les sociétés qui commencent par le caractère A, nous pouvons écrire ceci :
SELECT * FROM entity WHERE name LIKE 'A%' ;
Entraînez-vous avec quelques exemples
Voici dans ce tableau différentes expressions utilisant LIKE (colonne de gauche), ainsi que la valeur renvoyée par l'expression en question (colonne de droite).
Expression | Résultat |
`'Big Data Crunchers' LIKE '%Big%'` | TRUE |
`'Big Data Crunchers' LIKE '%Big%chers'` | TRUE |
`'Big Data Crunchers' LIKE '%Big%chers%'` | TRUE |
`'Big Data Crunchers' LIKE 'Big _ata Crunchers'` | TRUE |
`'Big Data Crunchers' LIKE 'Big __ata Crunchers'` | FALSE |
`'Big Data Crunchers' LIKE '_Big Data Crunchers'` | FALSE |
`'Big Data Crunchers' LIKE 'Big D___ Crun%'` | TRUE |
`'Big Data Crunchers' LIKE '%Big D%a%ta Crunchers'` | TRUE |
Gérez les minuscules et majuscules
Que renvoie l'expression 'OpenClassrooms' LIKE 'openclassrooms' ?
Eh bien... cela dépend ! Les SGBDR n'ont pas tous le même comportement : certains vous renverront TRUE
, d'autres FALSE
.
Pour ne jamais vous tromper, je vous conseille donc de vous y prendre comme ceci, en utilisant la fonction scalaire LOWER, qui convertit les chaînes de caractères en minuscules :
SELECT * FROM entity WHERE lower(name) LIKE 'a%' ;
De cette manière, quelle que soit sa valeur, name sera converti en minuscules. Une fois la conversion faite, écrivez votre pattern sans aucune majuscule (ici le pattern est a%
).
Cette requête vous renverra toutes les sociétés dont le nom commence par un A, qu'il soit en majuscule ou en minuscule !
Retournons à notre investigation
Dans les Panama Papers, il arrive qu'une société ait plusieurs orthographes différentes. Nous allons voir comment gérer cela dans cette vidéo :
Nous connaissons maintenant bien notre intermédiaire, dont le nom est Pacher Banking S.A.
Recherchons donc s'il existe des intermédiaires avec un nom similaire :
SELECT * FROM intermediary WHERE lower(name) LIKE '%pacher%banking%' ;
Oui ! Il y a 2 lignes qui ont un nom similaire. Correspondent-elles à la même société ? Comme elles ont la même adresse, nous considérerons ici que oui (même si ce n'est pas une certitude absolue).
Nous pouvons donc adapter la requête du chapitre précédent, en intégrant l'opérateur LIKE :
SELECT
i.id as intermediary_id,
i.name as intermediary_name,
e.jurisdiction,
e.jurisdiction_description,
count(*) as nb_societes
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id
AND a.inter = i.id
AND (lower(i.name) LIKE '%pacher%banking%'
OR
lower(i.name) LIKE '%plouf%financial%services%')
GROUP BY
i.id, i.name, e.jurisdiction, e.jurisdiction_description
ORDER BY
nb_societes DESC
Et là, surprise ! Tout en haut des résultats, on voit que des sociétés ont été créées par des intermédiaires dont les identifiants sont 5002 et 5003. À en regarder les noms, il s'agit à priori des mêmes intermédiaires que nous avons ciblés depuis le début, c'est-à-dire les 5000 et 5001 !
Sauf que là, quand on regarde les pays dans lesquels ces 2 intermédiaires ont eu le plus d'activité, on tombe bien sur des pays considérés (par l'Union européenne au moment de la publication des Panama Papers) comme des paradis fiscaux !
Bravo, vous allez avoir de quoi alimenter votre article avec des révélations passionnantes !
À vous de jouer
Contexte
Ah, les chaînes de caractères qui s’orthographient de différentes manières…
Dans votre carrière de data journaliste, ceci vous causera toujours du fil à retordre. En effet, il est malheureusement extrêmement rare que des données soient propres dès le départ. Une grande partie du travail d’analyse de données consiste à nettoyer les données. Afin d’être sûr que vous avez bien été exhaustif dans votre analyse des Panama Papers, il faut maintenant vérifier que vous n’êtes pas passé à côté d’une information importante dans la table entity
.
Consignes
Maintenant que vous savez vérifier si des lignes de intermediary
font référence à un même intermédiaire, vérifiez également si la table entity
ne contient pas d'autres sociétés appelées Big Data Crunchers.
Écrivez la requête permettant de répondre à cette question.
Vérifiez votre travail
Pour obtenir la requête attendue, il faut inclure des caractères%
dans le pattern, et convertir le tout en minuscules :
SELECT * FROM entity WHERE lower(name) LIKE '%big%data%crunchers%'
Visiblement, il ne semble y avoir qu'une seule ligne correspondant à cette société, c'est bien la ligne que l'on étudie depuis le début.
En résumé
Pour rechercher des chaînes de caractères incomplètes, on utilise LIKE.
On spécifie un pattern, où
_
remplace un caractère, et où%
remplace plusieurs (ou aucun) caractères.Pour mettre un texte en majuscules, on utilise la fonction scalaire upper(), ou bien lower() pour le mettre en minuscules.
Dans le chapitre suivant, nous continuerons à utiliser LIKE, dans l'optique de créer un mini moteur de recherche !