SQL:N PERUSTEET MARKKU SUNI
Vertailuoperaattorit Vertailuoperaattorit vertailevat lausekkeiden arvoja Vertailu palauttaa jonkin kolmesta arvosta: TRUE Tosi FALSE Falski, väärä NULL Tuntematon JOS vertailuehtona on koodi = 1 JA ainoa koodiarvo on NULL NIIN vertailun tulokseksi tulee NULL. Useimmat SQL-tuotteet muuttavat sen arvoksi FALSE
Vertailuoperaattorit: NULL NULL arvoa voidaan hakea ehdolla IS NULL tai IS NOT NULL. WHERE rahti IS NULL HUOM.: WHERE rahti = NULL palauttaa arvon FALSE (tai null) vertailun tulos on tuntematon
Vertailuoperaattorit: = Haettaessa täsmälleen yhtäsuurta arvoa SELECT osoite, toimipaikka FROM asiakkaat WHERE yritys = Simons bistro ; osoite toimipaikka Vinbæltet 34 Kööpenhamina
Vertailuoperaattorit: = Haettaessa täsmälleen yhtäsuurta arvoa SELECT yritys, osoite, toimipaikka FROM asiakkaat WHERE maa = Tanska ; Yritys osoite toimipaikka Simons bistro Vinbæltet 34 Kööpenhamina Vaffeljernet Smagsløget 45 Århus Voihan niitä rivejä tulla montakin
Vertailuoperaattorit: = Haettaessa täsmälleen yhtäsuurta arvoa SELECT yritys, osoite, toimipaikka FROM asiakkaat WHERE maa = TANSKA ; Voihan olla, ettei rivejä tule ollenkaan TANSKA ei ole samaa kuin Tanska
Vertailuoperaattorit: suurempi kuin Haettaessa suurempaa arvoa SELECT asiakastunnus, toimituspäivämäärä, rahti FROM tilaukset WHERE rahti > 3239.01 ; Asiakas Toimituspäivämäärä rahti Queen Cozinha 01-01-1997 4 008,51 mk Ernst Handel 20-05-1997 3 554,78 mk QUICK-Stop 16-06-1997 4 534,38 mk QUICK-Stop 14-11-1997 3 645,23 mk Ernst Handel 11-05-1998 3 394,17 mk Save-a-lot Markets 15-05-1998 3 738,38 mk
Vertailuoperaattorit: suurempi kuin Haettaessa suurempaa tai yhtäsuurta arvoa SELECT asiakastunnus, toimituspäivämäärä, rahti FROM tilaukset WHERE rahti >= 3239.01 ; Asiakas Toimituspäivämäärä rahti Queen Cozinha 01-01-1997 4 008,51 mk Ernst Handel 20-05-1997 3 554,78 mk QUICK-Stop 16-06-1997 4 534,38 mk QUICK-Stop 14-11-1997 3 645,23 mk Great Lakes Food Market 03-02-1998 3 239,01 mk Ernst Handel 11-05-1998 3 394,17 mk Save-a-lot Markets 15-05-1998 3 738,38 mk
Vertailuoperaattorit: pienempi kuin Haettaessa pienempää tai yhtäsuurta arvoa SELECT asiakastunnus, toimituspäivämäärä, rahti FROM tilaukset WHERE rahti <= 3239.01 ; Niin, ja lukujen ympärillä ei ole sitaatteja
Vertailuoperaattorit: suurempi/pienempi kuin Haettaessa suurempaa/pienempää arvoa SELECT asiakastunnus, rahti, lähetysmaa FROM tilaukset WHERE lähetysmaa > 'Suomi' ; Asiakas rahti Lähetysmaa Chop-suey Chinese 103,41 mk Sveitsi Richter Supermarkt 667,49 mk Sveitsi HILARIÓN-Abastos 368,60 mk Venezuela Rattlesnake Canyon Grocery 217,31 mk USA GROSELLA-Restaurante 298,31 mk Venezuela White Clover Markets 20,52 mk USA Split Rail Beer & Ale 20,43 mk USA
Vertailuoperaattorit: suurempi/pienempi kuin SELECT asiakastunnus, rahti, lähetysmaa FROM tilaukset WHERE lähetysmaa > 'Suomi AND rahti > 1000 ; Asiakas rahti Lähetysmaa Old World Delicatessen 1 159,29 mk USA Seven Seas Imports 1 297,94 mk UK Rattlesnake Canyon Grocery 3 190,28 mk USA Save-a-lot Markets 1 654,34 mk USA Save-a-lot Markets 1 587,11 mk USA Richter Supermarkt 1 045,89 mk Sveitsi Save-a-lot Markets 1 750,41 mk USA Vaffeljernet 1 345,91 mk Tanska
Vertailuoperaattorit: suurempi/pienempi kuin Yleisesti operaattoreita voi käyttää jokaisen tyypin kanssa Operaattorin kummallakin puolella oltava sama tyyppi Vertailun tulos ja tulkinta riippuu tyypistä Luvuilla: suuruusjärjestys Merkkijonoilla: aakkosjärjestys Isot kirjaimet yleensä ennen pieniä kirjaimia TRUE > FALSE noin yleensä
Vertailuoperaattorit: erisuuruus Operaattori <> tai!= tarkoittaa erisuuruutta SELECT xxxxxxxxx FROM ASIAKKAAT WHERE maa <> Suomi ; Muut kuin suomalaiset
MERKKIOPERAATTORIT Merkkioperaattorit on tarkoitettu merkkijonojen vertailuun LIKE rakentaa mallin, jonka mukaiset merkkijonot kelpaavat on tapa yhdistää merkkijonoja konkatenointi
LIKE-operaattorin yhteydessä mallin määrittely merkeillä % mielivaltainen määrä mielivaltaisia merkkejä Microsoftin Access käyttää merkkiä * _ (alaviiva) yksi mielivaltainen merkki Näiden yhdistelmiä voi käyttää: WHERE maa LIKE S% kelpaavat Saksa, Suomi, Sveitsi, jne
LIKE-operaattorin yhteydessä mallin määrittely merkeillä WHERE sopimusnumero LIKE 049% WHERE nimi LIKE BACK% kelpaavat BACKMAN, BACKSTRÖM jne WHERE nimi LIKE %BACK% kelpaavat BACKMAN, BACKSTRÖM, NORBACK jne
_-operaattorin yhteydessä mallin määrittely merkeillä WHERE luokka LIKE 4_ kelpaavat 4A, 4B, 4C jne WHERE lajikoodi LIKE 0_9 WHERE sopimusnumero LIKE 0_9% WHERE etunimi LIKE MA_JA% kelpaavat MAIJA, MARJA -alkuiset nimet
_-operaattorin yhteydessä mallin määrittely merkeillä WHERE etunimi LIKE MA A kelpaavat MAIJA, MAILA, MARJA, jne se EI ole samaa kuin WHERE etunimi LIKE MA%A Kävisi esim. MARJATTA, MARJUKKA
SELECT tilaustunnus, tuotetunnus, yksikköhinta, määrä, alennus, (yksikköhinta*määrä)*(1.0-alennus) AS Myyntihinta FROM tilaustiedot WHERE alennus IS NOT NULL AND alennus >= 0.10 AND yksikköhinta*määrä > 100; Monimutkaista, mutta realistista
Tilaust Tuote Yksikköhinta määrä alennusmyyntihinta 10250 Dried Apples 182,32 mk 35 15,00% 5424,019961 10250 Hot Pepper 72,24 mk 15 15,00% 921,059993 10254 Pâté chinois 82,56 mk 21 15,00% 1473,695989 10258 Chang 65,36 mk 50 20,00% 2614,399990 10258 Anton's Gumbo 73,10 mk 65 20,00% 3801,199985 10260 Tarte au suc 169,42 mk 15 25,00% 1905,975 10260 Outback Lager 51,60 mk 21 25,00% 812,7 10263 Pavlova 59,77 mk 60 25,00% 2689,65 10263 Matjeshering 89,01 mk 60 25,00% 4005,45 10263 Longlife Tofu 34,40 mk 36 25,00% 928,8 10267 Courdavault 189,20 mk 70 15,00% 11257,39992
AND ja OR yhdistävät ehtolausekkeita TRUE AND TRUE TRUE TRUE AND FALSE FALSE FALSE AND TRUE FALSE FALSE AND FALSE FALSE TRUE OR TRUE TRUE TRUE OR FALSE TRUE FALSE OR TRUE TRUE FALSE OR FALSE FALSE
NOT kääntää totuusarvon NOT TRUE FALSE NOT FALSE TRUE Esim.: WHERE lastname NOT LIKE B% Varottava esimerkki Pitää poimia 21 26-vuotiaat WHERE NOT ( ika < 21 ) AND NOT ( ika > 26 )
Varottava esimerkki: Pitää poimia 21 26-vuotiaat WHERE NOT ( ika < 21 ) AND NOT ( ika > 26 ) WHERE NOT ( ika > 21 ) AND NOT ( ika < 26 ) WHERE NOT ( ika < 21 ) OR NOT ( ika > 26 ) WHERE NOT ( ika > 21 ) OR NOT ( ika < 26 ) Mikä tuottaa toivotun tuloksen?
SQL perustuu joukko-operaatioihin UNION palauttaa kahden kyselyn yhdistetyn tuloksen: SELECT yritys FROM asiakkaat WHERE yritys LIKE C% UNION SELECT yritys FROM toimittajat WHERE yritys LIKE C% ; yritys Cactus Comidas para llevar Centro comercial Moctezuma Chop-suey Chinese Comércio Mineiro Consolidated Holdings Cooperativa de Quesos 'Las Cabras'
SQL perustuu joukko-operaatioihin UNION palauttaa kahden kyselyn yhdistetyn tuloksen Lukuunottamatta kaksoisrivejä rivit esiintyvät molemmissa tauluissa tulisivat kahteen kertaan vaan UNION tuo kutakin riviä yhden kappaleen
SQL perustuu joukko-operaatioihin UNION palauttaa kahden kyselyn yhdistetyn tuloksen Lukuunottamatta kaksoisrivejä rivit esiintyvät molemmissa tauluissa tulisivat kahteen kertaan vaan UNION tuo kutakin riviä yhden kappaleen UNION ALL palauttaa kahden kyselyn yhdistetyn tuloksen Myös kaksoisrivit
SQL:n UNIONin suhteen pätee hiukan sama
SQL perustuu joukko-operaatioihin INTERSECT (leikkaus) palauttaa kahden kyselyn yhdistetyn tuloksen: VAIN rivit, jotka löytyvät molemmista kyselyistä Huom.: kyselyistä on eri asia kuin tauluista
SQL perustuu joukko-operaatioihin MINUS (ero) palauttaa kahden kyselyn yhdistetyn tuloksen: VAIN ne ensimmäisen kyselyn rivit, jotka eivät löydy toisesta Tässä siis kyselyjen järjestyksellä on merkitystä
SQL perustuu joukko-operaatioihin Esimerkki: on asiakastaulu ja maksuhäiriötaulu SELECT nimi FROM asiakas UNION SELECT nimi FROM maksuhäiriö; palauttaa kummankin taulun sisällön Ei ehkä kovin käyttökelpoista
SQL perustuu joukko-operaatioihin Esimerkki: on asiakastaulu ja maksuhäiriötaulu SELECT nimi FROM asiakas MINUS SELECT nimi FROM maksuhäiriö; palauttaa asiakkaat, joilla ei ole maksuhäiriöitä Voi olla hyvinkin käyttökelpoista
I am torn between two lovers
I am torn between two lovers BUT I am torn in between IN and BETWEEN
I am torn between two lovers BUT I am torn in between IN and BETWEEN OR ei yleensä ole kovinkaan suositeltava operaattori IN ajaa usein saman asian tehokkaasti IN = joukon jäsenyys jotakin IN ( A, B, C ) jokin IN ( 1, 3, 5, 7 ) Hakee rivit, joilla jokin noista arvoista löytyy IN-lista voi olla varsin pitkäkin, esim. 2000 nimeä rajoittavina tekijöinä: kapasiteetti
I am torn in between IN and BETWEEN SELECT yritys FROM asiakkaat WHERE maa IN ('Norja', 'Ruotsi', 'Suomi', 'Tanska'); Yritys Berglunds snabbköp Folk och fä HB Santé Gourmet Simons bistro Vaffeljernet Wartian Herkku Wilman Kala
I am torn in between IN and BETWEEN Between valitsee kahden rajan välistä WHERE ika >= 21 WHERE ika BETWEEN 21 AND 26 AND ika <= 26 WHERE maa between Saksa and USA BETWEEN-operaattori palauttaa myös raja-arvot BETWEEN on yleensä tehokkaampi kuin AND- pari
Nights in white satin never reaching the end The Moody Blues This is the End The Doors