SQL-lauseiden operaattorit mahdollistavat tietojen vertailun, yhdistämisen ja muokkaamisen osana kyselyä. Ne määrittävät, millä ehdoilla ja logiikalla tietoa käsitellään — tämän takia ne ovat olennainen SQL-kielen toimintaa. Operaattorit jaetaan perinteisesti kuuteen pääryhmään: aritmeettiset, vertailu-, merkki-, loogiset, joukko- ja muut operaattorit.

Merkkijono-operaattorit

Merkkijonohaut ovat jokaisen kehittäjän ja tietokannan käyttäjän arkipäivää. Kun tietokannasta halutaan etsiä tiettyä tekstiä, tarkka = -vertailu harvoin riittää. Merkkijono-operaattoreiden ensisijainen käyttökohde on etsiä tietoja, jotka vastaavat osittain annettua merkkijonoa.

Merkkijonojen vertailu Like-operaattorilla

LIKE-operaattori etsii arvoja, jotka vastaavat osittain annettua merkkijonomallia. Tämä mahdollistaa merkkijonon hakemisen kahden jokerimerkin avulla:

Prosenttimerkki (%) toimii jokerimerkkinä, joka vastaa nollaa, yhtä tai useampaa merkkiä — samaan tapaan kuin *-merkki toimii monissa käyttöjärjestelmissä. Pelkkä % ilman muuta sisältöä ehdossa hyväksyy kaikki merkkijonoarvot. Tarvittaessa jokerimerkkejä voi sijoittaa useita haluttuihin kohtiin merkkijonossa. Seuraavassa SQL-kyselyssä haetaan kaikki automallit, joiden nimi alkaa merkkijonolla "LAD".


SELECT Merkki, Malli, Hinta 
FROM Tuotteet 
WHERE Malli LIKE 'LAD%';

Yksittäisen merkin jokerimerkkinä toimii alaviiva (_). Seuraava kysely palauttaa kaikki tuotteet, jotka alkavat "LA", päättyvät "A":han ja joiden kolmas kirjain voi olla mikä tahansa.


SELECT Merkki, Malli, Hinta 
FROM Tuotteet 
WHERE Malli LIKE 'LA_A';


Miksi jokerimerkin käyttäminen LIKE-vertailun alussa luo hitaan kyselyn?

LIKE-operaattoria käytettäessä kannattaa huomioida, että jokerimerkit voivat vaikuttaa suorituskykyyn. Jos jokerimerkki sijoitetaan ehdon alkuun, se estää tietokantaa hyödyntämästä indeksoitua dataa. Tämän seurauksena tietokannan on pakko käydä läpi taulun jokainen rivi yksitellen (nk. Full Table Scan). Suurilla tietomäärillä näin rakennettu villikorttikysely voi aiheuttaa jopa merkittävän viiveen tulosjoukon käsittelyssä.


SELECT Merkki, Malli, Hinta 
FROM Tuotteet 
WHERE Malli LIKE '%AD%';

Huonosti määritellyt villikorttihaut voivat myös hidastaa tuotantotietokantaa merkittävästi, jos ne palauttavat yllättävän suuren tulosjoukon.

Tehokkaampia tapoja merkkijonohakuun, tietokantakohtaisia eroja sekä indeksointistrategioita käsitellään syvällisemmin SQL-koulutuksissamme.

Datan yhdenmukaistaminen auttaa välttämään kirjasinkoosta johtuvat ongelmatilanteet merkkijonohauissa

Merkkijonojen etsinnässä tulee usein yllätyksenä, että kirjainkoko käyttäytyy eri tavoin riippuen käytetystä tietokannasta ja sen asetuksista.

Esimerkiksi yhdessä ympäristössä SQL-kysely LIKE 'Matti' palauttaa sekä tietueet arvoilla matti ja Matti. Toisessa ympäristössä sama kysely voi toimiakin tiukasti case-sensitive -moodissa. Käsittelemme tietokantojen kollaatio-asetuksia ja niiden vaikutuksia merkkijonohakuihin tarkemmin tietokantakohtaisissa koulutuksissamme: Microsoft Access, Microsoft SQL Server, ja MySQL.

Jos tietokanta ei tue suoraan ILIKE-operaattoria, helpointa on yhdenmukaistaa haettava data ja hakusana samalle kirjainkoolle:


SELECT * FROM Asiakkaat 
WHERE LOWER(Nimi) LIKE 'matti%';

Merkkijonojen yhdistäminen

SQL-kielessä merkkijonoja yhdistetään toisiinsa putkimerkkillä (||). Esimerkiksi tuotteen merkki ja malli voidaan yhdistää yhdeksi sarakkeeksi tulosjoukossa seuraavalla tavalla:


SELECT Merkki|| ',' || Malli AS tuotetunniste 
FROM Tuotteet ;