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.

Loogiset operaattorit

Loogiset operaattorit yhdistävät useita ehtoja SQL-kyselyissä. Ne mahdollistavat monipuolisempien hakulauseiden muodostamisen, kun halutaan huomioida useampia kriteerejä.

Molempien ehtojen on toteuduttava: AND-operaattori

AND-operaattori vaatii, että kaikki liittyvät ehtolausekkeet ovat tosia, jotta koko ehtolauseke olisi tosi. Seuraavassa esimerkissä kysellään autoja, joiden malli sisältää merkkijonon "AD" ja hinta ylittää 10 000 euroa.


SELECT Merkki, Malli, Hinta 
FROM Autot
WHERE Malli LIKE '%AD%'
AND
Hinta > 10000;


Riittää että yksi ehto toteutuu: OR-operaattori

Or-operaattorilla riittää, että yksi liitetyistä ehdoista on tosi, jotta koko ehtolausekkeestä tulee tosi. Seuraavassa esimerkissä palautetaan listaus autoista, joiden mallin nimessä esiintyy "AD" tai hinta ylittää 10 000 euroa. Siispä:


SELECT Merkki, Malli, Hinta 
FROM Autot
WHERE Malli LIKE '%AD%'
OR
Hinta > 10000;


Vertailuehdon negaatio: NOT-operaattori

NOT-operaattori kääntää vertailuehdon totuusarvon. Seuraava esimerkkikysely palauttaa kaikki autot, joiden mallinimessä ei esiinny merkkijonoa "AD".


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


Ehtojen ryhmittely sulkeilla

Kun kysely sisältää useita loogisia operaattoreita, niiden suoritusjärjestystä ohjataan sulkeiden käytöllä. Käytä sulkeita varmistaaksesi, että ehtosi evaluoidaan halutussa järjestyksessä. Ilman sulkeita SQL tulkitsee ehdot oletusjärjestyksessä (NOT → AND → OR), mikä voi johtaa yllättäviin tuloksiin.


SELECT Merkki, Malli, Hinta 
FROM Autot
WHERE (Malli LIKE '%AD%' OR Malli LIKE '%FO%')
AND Hinta < 20000;


Yllä oleva esimerkkikysely tekee listauksen autoista, joiden mallinimessä on "AD" tai "FO" ja hinta on alle 20 000 euroa. Ilman sulkeita ehtojen yhdistelmä voisi palauttaa vääränlaisen tuloksen.

Loogisten operaattoreiden vaikutus suorituskykyyn

Loogisten operaattoreiden yhdistelmä voi vaikuttaa merkittävästi kyselyn suorituskykyyn. Esimerkiksi OR-operaattorit suurilla tauluilla voivat estää indeksien hyödyntämisen, mikä johtaa koko taulun skannaukseen. Seuraava esimerkki havainnollistaa tilannetta:


-- Hidas kysely suurilla tauluilla
SELECT AsiakasID, Nimi, Kaupunki
FROM Asiakkaat
WHERE Kaupunki = 'Helsinki'
   OR Kaupunki = 'Espoo';

Jos Kaupunki-sarakkeessa ei ole indeksiä, tietokanta joutuu lukemaan taulun jokaisen rivin. Parempi vaihtoehto on käyttää IN-operaattoria tai varmistaa, että ehtona oleva sarake on indeksoitu:


-- Tehokkaampi versio samasta kyselystä
SELECT AsiakasID, Nimi, Kaupunki
FROM Asiakkaat
WHERE Kaupunki IN ('Helsinki', 'Espoo');

Suositeltuja käytännön ratkaisuja ovat:

Näitä ja useita muita optimointiratkaisuja voit opiskella SQL-kursseillamme.