Tulosta

CASE -kuvaus

Tietokanta

SQL -kyselyt

Yleistä kyselyistä

Sarakkeiden valinta

Rivien valinta

Tarkka vastaavuus

Vertailuoperaattorit

Lajittelu

AND

BETWEEN - AND

OR

IN

LIKE

NOT

Tyhjä merkkijono

Boolen algebra

Sulutus

Päivämääräfunktiot

Liitokset

Perinteinen liitos

Sisäliitos

Laskenta

Sarakkeilla

Ryhmillä

Muut

Alikyselyt

Kyselyiden yhdistäminen

Sulkujen käyttö

Ehtoja voit yhdistää AND ja OR operaattorien avulla. Käytä tarvittaessa sulkuja jos et ole aivan varma Boolen algebran toiminnasta. Boolen -operaattoreiden suoritusjärjestys on NOT, OR ja AND.

Virheellinen tapa (ilman sulkuja)

hae tuotteet, joiden laatu on KKARRED2 tai KKARREDN2 JA  pituus 200 cm ja 220 cm välillä:
SELECT *
FROM Block
WHERE qualityID = 'KKARRED2' OR qualityID = 'KKARREDN2'  AND  len BETWEEN 200 AND 220 ;

Kyselyn tuloksesta huomataan ettei kysely ole oikein: se hakee myös alle 200 cm pitkiä blokkeja. Eli itse asiassa kysely hakee kaikki KKARRED2 -laatua olevat blokit riippumatta niiden pituudesta:

WHERE ( qualityID = 'KKARRED2') OR ( qualityID = 'KKARREDN2'  AND  len BETWEEN 200 AND 220) ;

ja tämän lisäksi käyttäjän tarkoittamat KKARREDN2 -laatuiset blokit!

Oikea tapa: käytä sulkuja!

Kysely tulisi suluttaa siten, että qualityID kentästä muodostuu yksi ehto ja pituusehdosta toinen:
SELECT *
FROM Block
WHERE ( qualityID = 'KKARRED2' OR qualityID = 'KKARREDN2' ) AND ( len >= 200 AND len>=220 );

Lisäesimerkki

Otetaan vielä toinen esimerkki.

hae tuotteet, joiden laatu on KKARRED2 JA joiden pituus on enintään 200 cm tai vähintään 300 cm:
SELECT *
FROM Block
WHERE qualityid='KKARRED2' AND len <= 200 OR len>=300;

on eri asia kuin sulutettu kysely

SELECT *
FROM Block
WHERE qualityid='KKARRED2' AND ( len <= 200 OR len>=300 );

koska OR -operaattori määritellään ennen AND -operaattoria. Eli ensimmäinen kysely hakee tulosjoukkoon ensin kaikki blokit, joiden pituus on vähintään 300 cm ja sen lisäksi kaikki KKARRED2 -laatua olevat tuotteet, joiden pituus on enintään 200 cm. Eli sulutettuna:

SELECT *
FROM Block
WHERE ( qualityid='KKARRED2' AND len <= 200 ) OR ( len>=300 );

Suluta AINA kun käytät OR- ja AND -operaattoreita samassa SQL -lauseessa!

 

Juha Kiukas - juha@kiukas.fi - 040 551 0711