MYSQL de LIKE operator
Home

MYSQL de LIKE operator

MYSQL de LIKE operator

In veel gevallen weten we maar half wat we willen zoeken. We kennen een deel van de naam, het begin of het einde of iets tussenin.

Probleem

In veel gevallen weten we maar half wat we willen zoeken. We kennen een deel van de naam, het begin of het einde of iets tussenin.

Oplossing

Met de LIKE operator kan je in SQL naar patronen zoeken (pattern matching). Je kan met de LIKE operator naar patronen in tekst zoeken. Je combineert de LIKE operator met jokers (wildcards). De set van karakters bestaat uit symbolen die één of meer ontbrekende tekens voorstellen. Dit lijkt sterk op het gebruik van globs in bijvoorbeeld de bash shell.

De LIKE operator vergelijkt een tekstuitdrukking in het linkerlid, dat eventueel een wildcard bevat, met een patroon tussen aanhalingstekens in het rechterlid. Een patroon is een veralgemeende tekstuitdrukking. d.w.z. een tekst waarin nog enige vrijheid bestaat. Zo staat A* in de bash shell voor alle bestandsnamen die met een A beginnen en staat .eind in de bash shell voor alle bestandsnamen van viif tekens waarbij het eerste teken volledig willekeurig is en de laatste vier letterlijk "eind" zijn.

De betekenis van de wildcards in SQL is als volgt:

%

Nul, één of meer willekeurige tekens

_

Exact één willekeurig teken

Om alle boeken te selecteren waarvan de familienaam van de auteur begint met A als de collation niet hoofdlettergevoelig is:

use ModernWays;
select Voornaam, Familienaam, Titel
   from Boeken
   where Familienaam like 'a%';

Wanneer de collation niet hoofdlettergevoelig is, geeft dit statement hetzelfde resultaat:

select Voornaam, Familienaam, Titel
   from Boeken
   where Familienaam like 'A%';

Om alle boeken te selecteren waarvan de familenaam van de auteur eindigt op een s:

select Voornaam, Familienaam, Titel
   from Boeken
   where Familienaam like '%s';

Om boeken waarvoor in de titel het woord economie voorkomt, te selecteren:

use ModernWays;
select Voornaam, Familienaam, Titel, Verschijningsjaar
   from Boeken
   where Titel like '%economie%';

Het is belangrijk dat je toepassing van de LIKE operator en de wildcard ziet. Bijvoorbeeld:

use ModernWays;
-- eerst wordt een boek ingevoegd
insert into Boeken (
   Voornaam,
   Familienaam,
   Titel)
values (
   'Mathijs',
   'Degrote',
   'Leren werken met SQL')
-- er gaat wat tijd voorbij en ik weet niet meer of het "Mathijs" of "Matijs" is
-- ik los dit op met LIKE
select Voornaam from Boeken
   where Voornaam like 'ma%ijs'

Oefening

Schrijf een script, 0048__BoekenSelectLike.sql, waarmee alle kolommen van alle boeken gezocht worden waarvoor 'van' voorkomt in de familienaam van de auteur. Dit kan met een kleine letter of een hoofdletter zijn. Gebruik indien nodig COLLATE na Familienaam om hoofdletterongevoelig te zoeken.

Oefening

Schrijf een script, 0049__BoekenSelectLike.sql, waarmee alle kolommen van alle boeken gezocht worden waarvan de familienaam van de auteur begint met een A, R of C. Tip: denk eraan dat je logische operatoren kan gebruiken bij WHERE.

Oefening

Schrijf een script, 0050__BoekenSelectLikeNineties.sql, waarmee alle kolommen van alle boeken geselecteerd worden die verschenen zijn in de jaren negentig van de vorige eeuw:

JI & VN
2019-03-23 17:44:31