TIETOKANTOJEN PERUSTEET MARKKU SUNI
SQL - KIELI HIERARKIAAKO ELI ALIKYSELYT MARKKU SUNI
Periaatteessa Alikyselyt ovat upotettuja SELECT-käskyjä Kysymys kuuluu: Upottavatko upotetut SELECT-käskyt SQL-ohjelmani?
Periaatteessa Alikyselyt ovat upotettuja SELECT-käskyjä Kysymys kuuluu: Upottavatko upotetut SELECT-käskyt SQL-ohjelmani? Kyllä, jollet ole huolellinen.
Periaatteessa SELECT * FROM taulu1 WHERE taulu1.sarake = ( SELECT toinensarake FROM taulu2 WHERE jokinsarake = arvo ) ;
Periaatteessa Alikyselyn avulla sidotaan yhden kyselyn tulos toiseen SELECT a.yritys, t.rahti FROM asiakkaat a, tilaukset t WHERE rahti > AVG( rahti);
Periaatteessa Alikyselyn avulla sidotaan yhden kyselyn tulos toiseen SELECT a.yritys, t.rahti FROM asiakkaat a, tilaukset t WHERE rahti > AVG( rahti); Keskimääräistä suuremmat rahdit haluttiin Virheilmoitus saatiin.
Oikein tehdyn alikyselyn avulla asia hoituu SELECT a.yritys, t.rahti FROM asiakkaat a, tilaukset t WHERE rahti > ( SELECT AVG( rahti) FROM tilaukset ); Keskimääräistä suuremmat rahdit saatiin: Yritys rahti Alfreds Futterkiste 667,49 mk Ana Trujillo Emparedados y helados 667,49 mk Antonio Moreno Taquería 667,49 mk Bon app 498,92 mk Bottom-Dollar Markets 498,92 mk
Oikein tehdyn alikyselyn avulla asia hoituisi SELECT a.yritys, t.rahti FROM asiakkaat a, tilaukset t WHERE rahti > ( SELECT AVG( rahti) FROM tilaukset ); Yhdistävän tekijän puuttuessa syntyy ristiliitos ja Keskimääräistä suuremmat rahdit saatiin sinne ja tänne: Yritys rahti Alfreds Futterkiste 667,49 mk Ana Trujillo Emparedados y helados 667,49 mk Antonio Moreno Taquería 667,49 mk Bon app 498,92 mk Bottom-Dollar Markets 498,92 mk
Oikein tehdyn alikyselyn avulla asia hoituisi SELECT a.yritys, t.rahti FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND rahti > ( SELECT AVG( rahti) FROM tilaukset ); Yhdistävän tekijän ansiosta kohdistuvat rahdit ja asiakkaat.
Alikyselyn avulla asia hoituu Alikysely on toinen kysely ensimmäisen sisällä Sen tulosta voidaan käyttää ensimmäisessä kyselyssä Alikyselyssä haetaan esim: olemassaolo: ne, jotka ovat taulussa suurin tai pienin arvoista taulussa keskiarvo tai summa, johon verrataan
Alikyselyn avulla asia hoituu Alikysely on toinen kysely ensimmäisen sisällä Sen tulosta voidaan käyttää ensimmäisessä kyselyssä Alikyselyssä haetaan esim: olemassaolo: ne, jotka ovat taulussa suurin tai pienin arvoista taulussa keskiarvo tai summa, johon verrataan jokin muu välittävä tieto
Alikyselyn avulla asia hoituu Mille asiakkaille on tilauksia hoitanut se firma, Federal jotakin? SELECT a.yritys, t.lähetysmaa, t.rahti FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) ;
Alikyselyn avullahan asia hoituu Yritys Lähetysmaa rahti Alfreds Futterkiste Saksa 312,89 mk Ana Trujillo Emparedados Meksiko 7,25 mk Ana Trujillo Emparedados Meksiko 53,96 mk Ana Trujillo Emparedados Meksiko 179,64 mk Antonio Moreno Taquería Meksiko 381,78 mk Antonio Moreno Taquería Meksiko 18,14 mk Around the Horn UK 154,08 mk Around the Horn UK 97,83 mk Berglunds snabbköp Ruotsi 758,88 mk Berglunds snabbköp Ruotsi 15,75 mk Blauer See Delikatessen Saksa 39,83 mk...
Mille asiakkaille tilauksia hoisi Federal jotakin? SELECT a.yritys, t.lähetysmaa, t.rahti FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) ORDER BY t.lähetysmaa ;
Mille asiakkaille tilauksia hoisi Federal jotakin? Yritys Lähetysmaa rahti Cactus Comidas para llevar Argentiina 141,80 mk Cactus Comidas para llevar Argentiina 4,95 mk Rancho grande Argentiina 14,27 mk Cactus Comidas para llevar Argentiina 88,92 mk Suprêmes délices Belgia 661,77 mk Suprêmes délices Belgia 69,98 mk Maison Dewey Belgia 27,90 mk Suprêmes délices Belgia 7,16 mk Wellington Importadora Brasilia 214,16 mk Tradição Hipermercados Brasilia 159,44 mk Ricardo Adocicados Brasilia 57,42 mk Familia Arquibaldo Brasilia 13,95 mk Ricardo Adocicados Brasilia 229,37 mk
Mille asiakkaille tilauksia hoisi Federal jotakin? SELECT a.yritys, t.lähetysmaa, t.rahti FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) order by t.lähetysmaa, a.yritys ;
Mille asiakkaille tilauksia hoisi Federal jotakin? Yritys Lähetysmaa rahti Cactus Comidas para llevar Argentiina 88,92 mk Cactus Comidas para llevar Argentiina 141,80 mk Cactus Comidas para llevar Argentiina 4,95 mk Rancho grande Argentiina 14,27 mk Maison Dewey Belgia 27,90 mk Maison Dewey Belgia 146,03 mk Suprêmes délices Belgia 661,77 mk Suprêmes délices Belgia 69,98 mk Suprêmes délices Belgia 7,16 mk Suprêmes délices Belgia 66,51 mk Suprêmes délices Belgia 254,07 mk Familia Arquibaldo Brasilia 795,65 mk
Mille asiakkaille tilauksia hoisi Federal jotakin? SELECT DISTINCT a.yritys, t.lähetysmaa, t.rahti FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) ORDER BY t.lähetysmaa, a.yritys ;
Mille asiakkaille tilauksia hoisi Federal jotakin? Yritys Lähetysmaa rahti Cactus Comidas para llevar Argentiina 88,92 mk Cactus Comidas para llevar Argentiina 141,80 mk Cactus Comidas para llevar Argentiina 4,95 mk Rancho grande Argentiina 14,27 mk Maison Dewey Belgia 27,90 mk Maison Dewey Belgia 146,03 mk Suprêmes délices Belgia 661,77 mk Suprêmes délices Belgia 69,98 mk Suprêmes délices Belgia 7,16 mk Suprêmes délices Belgia 66,51 mk Suprêmes délices Belgia 254,07 mk Familia Arquibaldo Brasilia 795,65 mk No, mutta, lista on entisen kopio???
Mille asiakkaille tilauksia hoisi Federal jotakin? SELECT DISTINCT a.yritys FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) order by a.yritys ;
Mille asiakkaille tilauksia hoisi Federal jotakin? Yritys Alfreds Futterkiste Ana Trujillo Emparedados y helados Antonio Moreno Taquería Around the Horn Berglunds snabbköp Blauer See Delikatessen Blondel père et fils Bon app Bottom-Dollar Markets B's Beverages Cactus Comidas para llevar Centro comercial Moctezuma Chop-suey Chinese...
Yksi hullu kysyy enemmän kuin... SELECT sum( rahti), count( rahti) FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) group by t.lähetysmaa ; Eli lista maittain rahtien summista
Yksi hullu kysyy enemmän kuin... Expr1000 Expr1001 249,93 mk 41 258,79 mk 83 707,28 mk 17 Olisihan kiva 578,34 mk 6 nähdä ne maat 2 709,54 mk 6... 915,12 mk 5 9 481,95 mk 13 Vaan kun EI VOI 3 817,31 mk 16 laittaa 1 882,53 mk 14 173,88 mk 1 SELECT.. lähetysmaa 1 152,18 mk 7 297,27 mk 4 8 205,17 mk 21...
Yksi hullu kysyy enemmän kuin... SELECT sum( rahti), count( rahti), first( t.lähetysmaa) MS.ACCESSin FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) group by t.lähetysmaa ; Koostefunktioiden joukossa vain koostefunktioita
Yksi hullu kysyy enemmän kuin... Expr1000 Expr1001 Expr100 2249,93 mk 4 Argentiina 1 258,79 mk 8 Belgia 3 707,28 mk 17 Brasilia 578,34 mk 6 Espanja 2 709,54 mk 6 Irlanti 915,12 mk 5 Italia 9 481,95 mk 13 Itävalta 3 817,31 mk 16 Kanada 1 882,53 mk 14 Meksiko 173,88 mk 1 Norja 1 152,18 mk 7 Portugali 297,27 mk 4 Puola
Yksi hullu kysyy enemmän kuin... Expr1000 Expr1001 Expr100 8 205,17 mk 21 Ranska 2 348,96 mk 8 Ruotsi 16 411,46 mk 28 Saksa 1 049,85 mk 9 Suomi 2 813,49 mk 6 Sveitsi 1 756,98 mk 7 Tanska 4 431,20 mk 22 UK 25 640,96 mk 40 USA 3 424,14 mk 13 Venezuela
Yksi hullu kysyy enemmän kuin... Voisiko alikyselyjä sisäkkäistää???
Yksi hullu kysyy enemmän kuin... Voisiko alikyselyjä laittaa useita rinnan???? Kyllä voi, niin paljon kuin SQL-tuote sallii
Yksi hullu kysyy enemmän kuin... Voisiko alikyselyjä laittaa useita rinnan???? Kyllä voi, niin paljon kuin SQL-tuote sallii Voisiko alikyselyjä sisäkkäistää???? Kyllä voi, niin paljon kuin SQL-tuote sallii
Yksi hullu kysyy enemmän kuin...
Yksi hullu kysyy enemmän kuin...
Yksi hullu kysyy enemmän kuin...
Yksi hullu kysyy enemmän kuin... Voisiko saada listan asiakkaista, jotka käyttävät Federalin rahtiin keskimääräistä enemmän rahaa? Entäs amerikkalaisista asiakkaista??
Ja taas uusi yritys... SELECT sum( rahti), count( rahti), first( t.lähetysmaa) FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND t.rahti > ( SELECT AVG( rahti) FROM tilaukset ) AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) GROUP BY t.lähetysmaa ;
Expr1000 Expr1001 Expr1002 661,77 mk 1 Belgia A, syntyihän lista... 2 101,55 mk 3 Brasilia 384,57 mk 1 Espanja Vaan onko se 2 190,42 mk 3 Irlanti oikein?? 8 538,89 mk 9 Itävalta 2 356,97 mk 3 Kanada 381,78 mk 1 Meksiko 391,64 mk 1 Portugali 6 577,61 mk 6 Ranska 2 192,63 mk 3 Ruotsi 13 826,93 mk 12 Saksa 2 672,06 mk 5 Sveitsi 652,68 mk 1 Tanska 2 294,10 mk 3 UK 23 323,82 mk 21 USA 2 527,88 mk 5 Venezuela
Ja taas uusi yritys... SELECT sum( rahti), count( rahti), first( t.lähetysmaa) FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND a.maa = USA AND t.rahti > ( SELECT AVG( rahti) FROM tilaukset ) AND t.rahtaaja = ( SELECT rahtaajatunnus FROM rahtaajat WHERE yritys LIKE 'Fede*' ) group by t.lähetysmaa ;
Ja taas uusi yritys... Expr1000 Expr1001 Expr1002 23 323,82 mk 21 USA
Ja taas uusi yritys... Keskimääräistä kalliimpien rahtien lista: SELECT a.yritys, a.osoite, a.maa, t.rahti FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND a.asiakastunnus IN ( SELECT asiakastunnus FROM tilaukset WHERE rahti > ( SELECT AVG( rahti ) FROM tilaukset ) ) ;
Ja taas uusi yritys... Yritys osoite maa rahti Antonio Moreno Taquería Mataderos 2312 Meksiko 99,00 mk Antonio Moreno Taquería Mataderos 2312 Meksiko 213,53 mk Antonio Moreno Taquería Mataderos 2312 Meksiko 70,38 mk Antonio Moreno Taquería Mataderos 2312 Meksiko 381,78 mk Antonio Moreno Taquería Mataderos 2312 Meksiko 18,14 mk Antonio Moreno Taquería Mataderos 2312 Meksiko 162,59 mk Antonio Moreno Taquería Mataderos 2312 Meksiko 262,94 mk Around the Horn 120 Hanover Sq. UK 188,78 mk Around the Horn 120 Hanover Sq. UK 154,08 mk Around the Horn 120 Hanover Sq. UK 114,12 mk Around the Horn 120 Hanover Sq. UK 658,44 mk Around the Horn 120 Hanover Sq. UK 97,83 mk Around the Horn 120 Hanover Sq. UK 49,32 mk
Ja taas uusi yritys... Olisiko tutkimuksen paikka... Keskimääräinen rahti oli jotain 300 mk. Miksi siis listalla on rahteja alle sen???
Ja taas uusi yritys... a, tutkitaanpas SELECT a.yritys, a.osoite, a.maa, t.rahti FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND a.asiakastunnus IN 3. NÄMÄ asiakkaat ( SELECT asiakastunnus FROM tilaukset 2. asiakkaat tilauksista WHERE rahti > joissa rahti > keskiarvo ( SELECT AVG( rahti ) 1. rahtien keskiarvo FROM tilaukset - kaikki tilaukset ) ) ;
Ja taas uusi yritys... Olisiko tutkimuksen paikka... Keskimääräinen rahti oli jotain 300 mk. Miksi siis listalla on rahteja alle sen??? Listalle tuli siis keskimääräisen rahdin ylittävien tilausten asiakastunnukset ja noilta asiakkailta kaikki rahdit. EI SIIS: vain keskiarvon ylittävät rahdit.
SIIS... Kun SQL-kyselyn tekee, sitä on syytä miettiä. Jos sen tekee huonosti, tulos voi olla mitä tahansa Näinköhän on... Ei se mitään, vaikka tulos on mitä tahansa, kunhan selitys on kunnossa
OLISKO TIETOO... SELECT a.yritys, a.osoite, a.maa FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus AND EXISTS ( SELECT * FROM tilaukset WHERE lähetysmaa = Suomi ) ;
OLISKO TIETOO... Yritys osoite maa Alfreds Futterkiste Obere Str. 57 Saksa Alfreds Futterkiste Obere Str. 57 Saksa Alfreds Futterkiste Obere Str. 57 Saksa Ana Trujillo Emparedados y helados Avda. de la Constitución 2222 Meksiko Antonio Moreno Taquería Mataderos 2312 Meksiko Antonio Moreno Taquería Mataderos 2312 Meksiko Around the Horn 120 Hanover Sq. UKA round the Horn 120 Hanover Sq. UK... Lista on pitkä. Miksi??
OLISKO TIETOO... EXIST käyttää alikyselyä parametrina palauttaa TRUE, jos alikysely palauttaa jotain palauttaa FALSE, jos alikysely on tyhjä Koska oli tilauksia, joissa lähetysmaa = Suomi, EXISTS antoi TRUE ja koska muita ehtoja ei ollut, koko asiakastaulu palautettiin
OLISKO TIETOO... EXIST käyttää alikyselyä parametrina palauttaa TRUE, jos alikysely palauttaa jotain palauttaa FALSE, jos alikysely on tyhjä Alikyselyssä esiintyi * EXISTS ei välitä sarakkeiden määrästä EXISTS sopii tarkistamaan joidenkin rivien olemassaolon varsinainen kysely perustuu näiden rivien olemassaoloon (on tapaus / tapauksia, jo(i)ssa. )
Existenssin olemuksesta... SELECT t.lähetysnimi, t.rahti, t.lähetysmaa FROM tilaukset t WHERE EXISTS ( SELECT * FROM asiakkaat a WHERE a.asiakastunnus = t.asiakastunnus AND a.maa = Suomi ) ;
Existenssin olemuksesta... Lähetysnimi rahti Lähetysmaa Wartian Herkku 115,79 mk Suomi Wartian Herkku 614,43 mk Suomi Wartian Herkku 155,57 mk Suomi Wartian Herkku 32,76 mk Suomi Wilman Kala 3,38 mk Suomi Wartian Herkku 5,18 mk Suomi Wilman Kala 102,42 mk Suomi Wilman Kala 75,24 mk Suomi Wartian Herkku 356,85 mk Suomi Wartian Herkku 329,22 mk Suomi Wilman Kala 3,69 mk Suomi
OLISKO TIETOO... Kuinka suuri osa kukin rahti on maksimirahdista? SELECT a.yritys, t.rahti, rahti / ( SELECT MAX( rahti ) FROM tilaukset ) as suhde FROM asiakkaat a, tilaukset t WHERE a.asiakastunnus = t.asiakastunnus ORDER BY rahti DESC ;
OLISKOHAN TUOTA... Yritys rahti suhde QUICK-Stop 4 534,38 mk 1 Queen Cozinha 4 008,51mk 0,8840 Save-a-lot Markets 3 738,38 mk 0,8244 QUICK-Stop 3 645,23 mk 0,8039 Ernst Handel 3 554,78 mk 0,7839 Ernst Handel 3 394,17 mk 0,7485 Great Lakes Food 3 239,01 mk 0,7143 Rattlesnake Canyon 3 190,28 mk 0,7035 Save-a-lot Markets 2 958,93 mk 0,6525...
Life goes on day after day Hearts torn in every way So ferry cross the Aura will allways take me there And here I ll stay. People around every corner They seem to smile and say: We don t care what your name is, boy We ll never turn you away So I ll continue to say Here I allways will stay The Pacemakers