SQL-kielen perusteet. Tietokantojen perusteet 4.4.2008



Samankaltaiset tiedostot
Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

Harjoitustehtävä 1. Harjoitustehtävän 1 ratkaisu. Harjoitustehtävä 1. Relaatioalgebra -liitokset (join) Liitos

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto.

Kyselyn yleisrakenne:

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

Tietokantojen perusteet, s 1999 SQL- osa Harri Laine 1. SQL -ohjelmistojen markkinaosuuksia SQL. SQL - historiaa. SQL - standardointi

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

4.3.4 SQL kyselyt... 45

5 SQL TIETOKANTAKIELI...33

HELIA 1 (14) Outi Virkki Tiedonhallinta

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki

4.3.1 SQL tietokanta SQL:n kirjoitusasu SQL määrittelykielenä... 36

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

SQL - STRUCTURED QUERY LANGUAGE

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

SELECT-lauseen perusmuoto

Relaatioalgebra. Kyselyt:

CSE-A1200 Tietokannat

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

3. Taulujen määrittely ja muuttaminen

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

HAAGA-HELIA TIKO-05 1 (19) ICT23a Tietokannan suunnittelu ja toteutus O.Virkki

Helsingin yliopisto/tktl Kyselykielet, s 2006 Relaatiokalkyylit. Harri Laine 1

Tietokantakurssit / TKTL

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

HELIA 1 (12) Outi Virkki Tiedonhallinta

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

HELIA 1 (11) Outi Virkki Tiedonhallinta

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

CSE-A1200 Tietokannat

Relaation tyhjyyden testaaminen

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

joukko operaatioita, joilla relaatioista voidaan muodostaa uusia relaatioita joukko opin perusoperaatiot yhdiste, erotus, ristitulo, leikkaus

Liitokset - haut useaan tauluun

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

HAAGA-HELIA TIKO - Heti09 1 (22) ICT05 Tiedonhallinta ja Tietokannat E.Räty, O.Virkki, M.Laiho

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

2. Käsiteanalyysi ja relaatiomalli

SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito

4.1 Yleistä SQL:stä 4.2 SQL-lauseet 4.3 DML: datan hallinta 4.4 DDL: rakenteen määrittäminen 4.5 DCL: valtuuttaminen 4.6 TxCL: tapahtumanhallinta

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

SQL:N PERUSTEET MARKKU SUNI

On autoja, henkilöitä, Henkilöllä on nimi Autolla on omistaja, joka on henkilö. Taulu AUTO(rekno, malli) Taulu HENKILO(nimi, )

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Mitä malleja olisi tarjolla? Abstraktiotasot tiedon käsittelyssä

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Relaatiomalli ja -tietokanta

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Näkymät ja tiedon suojaus

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

Lohdutus - tietokantadokumentti

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Yleinen SQL. Yleinen SQL. SQL:n kehitys

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Makrojen mystinen maailma lyhyt oppimäärä

OpenOffice.org Base 3.1.0

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

Tietokanta projektin alussa: create table kurssin_tila ( NOT NULL VARCHAR2(60) create table kurssin_tyyppi ( create table opintojakson_tyyppi (

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

Yhdiste, leikkaus, erotus ym.

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta

Tietokantojen suunnittelu, relaatiokantojen perusteita

HELIA 1 (17) Outi Virkki Tiedonhallinta

Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta

Opintopiiritehtävä 3: Verkkohuutokauppa

Transkriptio:

SQL-kielen perusteet Tietokantojen perusteet 4.4.2008

Sisällys Tietokannan käsittely ja ylläpito SQL tiedonmäärittelykielenä Tietokantataulun ja sen osien määrittely SQL tiedonkäsittelykielenä SQL-kysely ja sen osat Kyselyn tulostiedot Kyselyn ehto-osa Kyselyn kohdetaulut Liitokset Tietokantojen perusteet, K2008 2

Tietokannan käsittely- ja ylläpito Relaatiotietokannoissa perustana relaatiomallin mukainen näkemys tietojen rakenteesta ja käsittelystä Käytännössä tietokantojen rakenteen määrittelyssä ja käsittelymahdollisuuksissa on paljon piirteitä, joihin abstrakti relaatiomalli ei ota kantaa Miten tietokantakaavio käytännössä esitetään? Millaista tietoa tietokantaan voi tallettaa? Miten esitetään tietokantaan kohdistuvat kyselyt? Miten tietokantaa ylläpidetään? Miten hallitaan tietokannan käyttöoikeuksia? Miten hallitaan samanaikaisia tietojen käyttöä? Miten kytketään ohjelmat tietokantaan? Tietokantojen perusteet, K2008 3

Tietokannan käsittely- ja ylläpito (2) Relaatioalgebra antaa teoriaperustan tietokantojen käsittelykielille Käsittelyn kannalta tarpeelliset operaatiot Tarvitaan siis käytännön kyselykieli tietokannan käsittelyä ja ylläpitoa varten käyttäjäystävällisyys Relaatiotietokantojen standardoitu käsittely- ja määrittelykieli on SQL-tietokantakieli Viimeisin standardi vuodelta 2003 Murteita, joilla kuitenkin yhteinen ydin Tietokantojen perusteet, K2008 4

SQL-tietokantakieli SQL-tietokantakielellä voidaan määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta näytölle tai tiedostoon sovellusohjelman käyttöön tehdä päivityksiä tietokantaan (muuttaa dataa) vuorovaikutteisesti sovellusohjelman kautta Tietokantojen perusteet, K2008 5

SQL-tietokantakieli (2) SQL Määrittelykieli (DDL) käyttäjät ja oikeudet tietokannan rakenne tietokantaproseduurit Käsittelykieli (DML) kyselyt ylläpito-operaatiot Tietokantojen perusteet, K2008 6

SQL-tietokantakieli (3) SQL:llä käsiteltävä tietokanta muodostuu yhden tai useamman kaavion (schema) määrittelemistä tauluista (table) Kullakin kaaviolla on omistaja (=käyttäjätili), joka omistaa myös kaavion määrittelemät taulut Taulu muodostuu riveistä (row) Taulu vastaa relaatiomallin relaatiota, mutta sallii etenkin kyselyiden tuloksissa samanlaisen rivin toistumisen (duplikaatit) matemaattisesti monijoukko (multiset) Tietokantojen perusteet, K2008 7

SQL-tietokantakieli (4) SQL-kielessä avainsanat sekä taulu-, käyttäjä- ja sarakenimet voi kirjoittaa joko suur- tai pienaakkosina eli select merkki SELECT MerKKI Tietokannassa olevan datan suhteen kieli on kuitenkin herkkä kirjainmuodolle eli Merkki= Ford on eri asia kuin Merkki= FORD Joissain järjestelmissä tätä käyttäytymistä voidaan säätää asennusparametrein tai jopa kyselykohtaisesti Tietokantojen perusteet, K2008 8

SQL-tiedonmäärittelykieli Tietokannan käyttäjien, kaavioiden ja taulujen sekä niihin liittyvien oikeuksien määritteleminen ja hallinta Tarkasteltavia tietokantaelementtejä on useita: user, role, schema, table, domain, procedure, function, trigger, Tiedonmäärittelykielessä on lauseet eri tietokantaelementtien luontiin, muokkaukseen ja poistoon Create - luo Alter - muokkaa Drop poistaa Grant oikeuksien myöntäminen Revoke oikeuksien peruuttaminen Tietokantojen perusteet, K2008 9

Taulun määrittely SQL:ssä Lauseella create table määritellään taulun rakenne Lauseen yleisrakenne: create table tablename ( column definition 1,., column definition n [, constraint 1, ] ) Sarakkeen määrittely: column_name datatype [not null] [default value] [ column constraint ] Tietokantojen perusteet, K2008 10

Taulun määrittely SQL:ssä (2) create table Ordered ( OrderId integer not null, WhenMade timestamp(0) not null, Customer integer not null, WayIssued varchar(20), PaymentBy varchar(20) not null, TotalPrice decimal(6,2) not null, constraint pk_order primary key (OrderId), constraint fk_ordercustomer foreign key (Customer) references Customer ); Tietokantojen perusteet, K2008 11

Taulun määrittely SQL:ssä (3) create table Ordered ( ); OrderId integer not null, WhenMade timestamp(0) not null, Customer integer not null, WayIssued varchar(20), PaymentBy varchar(20) not null, TotalPrice decimal(6,2) not null, constraint pk_order primary key (OrderId), constraint fk_ordercustomer foreign key (Customer) references Customer kokonaisluku desimaaliluku, kokonaispituus 6, desimaaliosa 2 Tietokantojen perusteet, K2008 12 aikaleima, ei sekunnin osia vaihtuvamittainen merkkijono, maksimipituus 20

Taulun määrittely SQL:ssä (4) create table Ordered ( OrderId integer not null, WhenMade timestamp(0) not null, Customer integer not null, WayIssued varchar(20), PaymentBy varchar(20) not null, TotalPrice decimal(6,2) not null, constraint pk_order primary key (OrderId), constraint fk_ordercustomer foreign key (Customer) references Customer ); avain viiteavain pakollinen tieto Tietokantojen perusteet, K2008 13

Taulun määrittely SQL:ssä (5) Erilaisia aikatyyppejä Date päiväys Time[(x)] kellonaika Timestamp[(x)] päiväys ja kellonaika Interval aikaero Aikoja voidaan verrata ja niillä voi laskea Olkoon this_day date-tyyppinen, nyt this_day + interval 3 day on kolmen päivän päästä this_day:stä Huom: Harjoittelukannassa oleva date-tietotyyppi käyttäytyy kuten timestamp(0) Oraclen vanha tapa Tällöin päiväykseen voi lisätä aikaa desimaalilukuina, joissa kokonaisosa kertoo vuorokausien lukumäärän Esimerkiksi this_day+0.5 on 12 tunnin päästä this_day:stä Tietokantojen perusteet, K2008 14

Taulun määrittely SQL:ssä (6) Viiteavainmäärittelyyn voidaan liittää toimintasääntö: mitä tehdään operaation rikkoessa viite-eheyden foreign key (sarakkeet) references taulu [(sarakkeet2)] [ on delete {restrict cascade nullify} ] [ on update {restrict cascade nullify} ] Kun viitteen kohde katoaa: restrict estää rikkovan operaation (oletusarvo) cascade vyöryttää eli poistaa tai muuttaa viittaavat rivit nullify tyhjentää viittaukset Rajoitteen valinta sen perusteella, mikä on tarkoituksenmukaista Tietokantojen perusteet, K2008 15

SQL-kyselykieli Tietokannan sisältöön kohdistuva tiedonhaku Kyselyn yleisrakenne: select tulostietomäärittely from taulut [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta] Kysely tuottaa nimettömän tulostaulun Tietokantojen perusteet, K2008 16

SQL-kyselykieli (2) Esimerkkikysely Vuoden 1996 mallia olevien punaisten merkiltään Fo -alkuisten autojen merkki ja rekisterinumero merkin ja saman merkin sisällä rekisterinumeron mukaan järjestettynä Tämä kysely SQL:llä select merkki, reknro from auto where vmalli=1996 and vari ='punainen' and merkki like 'Fo%' order by merkki, reknro; Tietokantojen perusteet, K2008 17

SQL-kyselyn tulostiedot Esimerkkikysely Vuoden 1996 mallia olevien punaisten merkiltään Fo -alkuisten autojen merkki ja rekisterinumero merkin ja saman merkin sisällä rekisterinumeron mukaan järjestettynä Tämä kysely SQL:llä select merkki, reknro from auto where vmalli=1996 and vari ='punainen' and merkki like 'Fo%' order by merkki, reknro; melkein projektio valinta Tietokantojen perusteet, K2008 18

SQL-kyselyn tulostiedot (2) Tulostietoihin normaalitapauksessa arvo jokaista valintaehdot täyttävää riviä (riviyhdistelmää) kohden Siksi, jos taulussa auto olisi 100 punaista vuoden 1996 Fordia, kyselyn select merkki from auto where vmalli=1996 and vari ='punainen' and merkki like 'Fo%' order by merkki; tulostauluun tulisi merkki Ford 100 kertaa. Ylläolevan kaltainen SQL-kysely siis toimii toisin kuin relaatioalgebran projektio, joka poistaa tuplat Tietokantojen perusteet, K2008 19

SQL -kyselyn tulostiedot (3) Projektion kaltainen toistuvien arvojen karsinta: liitetään tulostietomäärittelyn alkuun avainsana distinct Kyselyn select distinct merkki from auto where vmalli=1996 and vari ='punainen' and merkki like 'Fo%' order by merkki; tulostauluun Ford tulisi siis vain kerran Tietokantojen perusteet, K2008 20

SQL-kyselyn tulostiedot (4) Tietotyypistä riippuen sarakearvoilla voi tulostietomäärittelyissä ja ehdoissa suorittaa laskentaoperaatioita (+,-,*,/) pituus*paino merkkijonoille katenaatio ( ) eli peräkkäin laittaminen etunimi sukunimi Merkkijonovakiot hipsuihin, numeeriset ilman Päiväykset muodossa date 2005-11-24 Käytettävissä erilaisia yhteenvetofunktioita On mahdollista käyttää myös skalaarifunktioita esim. merkkijonon pituus length(sarake) funktiovalikoima vaihtelee Tietokantojen perusteet, K2008 21

SQL-kyselyn ehto-osa Kyselyn ehto-osassa voidaan verrata saraketta, vakiota, funktion arvoa tai lausekkeen arvoa sarakkeeseen, vakioon, funktion arvoon, lausekkeen arvoon, arvojoukkoon tai maskiin. Ehto-osassa voidaan myös tutkia sarakkeen tyhjyyttä Jos vertailun toisena osapuolena on tyhjäarvo, on tulos tuntematon. Rivi tulee valituksi tulokseen vain, jos ehdon arvo on tosi (true). Tietokantojen perusteet, K2008 22

SQL-kyselyn ehto-osa (2) Totuusarvot tosi (true) ja epätosi (false) käyttäytyvät loogisissa lausekkeissa kuten ohjelmointikielten yhteydessä Kolmas totuusarvo tuntematon käyttäytyy seuraavasti Loogisen operaattorin AND yhteydessä: AND true false unknown true true false unknown false false false false unknown unknown false unknown Tietokantojen perusteet, K2008 23

SQL-kyselyn ehto-osa (3) Kolmas totuusarvo tuntematon käyttäytyy seuraavasti Loogisen operaattorin OR yhteydessä: OR true false unknown true true true true false true false unknown unknown true unknown unknown Loogisen operaattorin NOT yhteydessä: NOT true false unknown false true unknown Tietokantojen perusteet, K2008 24

SQL-kyselyn ehto-osa (4) Tyhjäarvot ehto-osassa tuottavat seuraavanlaisia tuloksia: Sarake is null: tuottaa tuloksen true, jos sarakkeessa on tyhjäarvo muuten false Sarake is not null: tuottaa tuloksen false, jos sarakkeessa on tyhjäarvo muuten true Sarake = null: tuottaa aina tuloksen unknown Tietokantojen perusteet, K2008 25

SQL-kyselyt: esimerkkitietokanta opettaja opetunnus nimi puhelin tyohuone harjoitusryhma kurssikoodi ryhmanro viikonpaiva alkamisaika sali opettaja ilmoittautuminen kurssikoodi ryhmanro opisknro ilm_aika kurssi koodi nimi opintoviikot luennoija opiskelija onumero nimi paa_aine kaupunki aloitusvuosi Tietokantojen perusteet, K2008 26

Opettajien nimet: SQL-kyselyt esimerkkitietokantaan select nimi from opettaja; Opiskelijoiden pääaineet select distinct paa_aine from opiskelija; Tietojenkäsittelytieteen pääaineopiskelijoiden nimet select nimi from opiskelija where paa_aine = TKT ; Espoossa asuvat matematiikan opiskelijat select * from opiskelija where paa_aine= MAT and kaupunki= Espoo ; Tietokantojen perusteet, K2008 27

SQL-kyselyt esimerkkitietokantaan (2) Opiskelijat, joiden sukunimi on Tele select * from opiskelija where nimi like Tele % ; Huom! esimerkkitaulussa nimet ovat muodossa sukunimi+ space +etunimi Opiskelijat, joiden etunimi alkaa L:llä select * from opiskelija where nimi like % L% ; Tietokantojen perusteet, K2008 28

SQL-kyselyn kohdetaulut Kyselyn from-osassa yksi tai useampi taulu (tai alikysely) Jos tauluja on vain yksi, on kyseessä valinta Jos tauluja on monta, on kyseessä ristitulo, ellei ehtoosassa ole liitosehtoa Tulokseksi halutaan hyvin harvoin ristitulo Jos tauluja on monta ja ehto-osassa on liitosehto, on kyseessä liitos Muista siis liitosehto! Tietokantojen perusteet, K2008 29

Liitokset SQL:ssä Kyselyn from-osassa voi olla useita tauluja Kaikki ne taulut, joiden dataa halutaan mukaan tulokseen, on annettava from-osassa Esimerkiksi Arto Wiklan luennoimat kurssit select kurssi.nimi from kurssi, opettaja where opettaja.nimi= Arto Wikla and kurssi.luennoija=opettaja.opetunnus; täytyy täsmentää, koska samanniminen sarake molemmissa taulussa liitosehto Tietokantojen perusteet, K2008 30

Liitokset SQL:ssä (2) Tauluille voidaan from-osassa antaa tilapäinen kyselyn sisäinen nimi (alias, correlation name) SQL-ilmaus: from taulu [AS] alias AS ei käy Oraclessa Liitettävillä tauluilla on usein samannimisiä sarakkeita, joten taulunimeä on käytettävä tarkenteena alias voi olla lyhenne, joka vähentää kirjoitusvaivaa Tietokantojen perusteet, K2008 31

Liitokset SQL:ssä (3) Jos sama taulu esiintyy from-osassa useaan kertaan, on taulun esiintymät erotettava käyttämällä aliasta Esimerkiksi kyselyssä, jolla etsitään kurssiparit, joilla on sama luennoija, eli kyselyssä select A.nimi, B.nimi from kurssi A, kurssi B where A.luennoija=B.luennoija and A.koodi<B.koodi order by A.nimi, B.nimi; ehto A.koodi<B.koodi estää saman parin toistumisen eri järjestyksissä Tietokantojen perusteet, K2008 32

Liitokset SQL:ssä (4) Tyypillinen virhe liitoksissa on jättää jokin liitosehto pois Seuraus: tuloksen rivijoukko tulee huomattavasti suuremmaksi kuin pitäisi Karkea muistisääntö: Jos from-osassa on n kpl liitettäviä tauluja, tarvitaan vähintään n-1 liitosehtoa. Huom! Taulujen liittäminen voi perustua useaan sarakkeeseen, jolloin ehtolausekkeessa tarvittavien alkeisehtojen määrä voi moninkertaistua. Tietokantojen perusteet, K2008 33

Liitokset SQL:ssä (5) Yleensä kyselyt rakentuvat siten, että niissä on jokin keskeinen taulu, johon muita liitetään Voi olla, ettei tuosta keskeisestä taulusta tule mitään dataa tulokseksi liitokset keskeinen taulu Tietokantojen perusteet, K2008 34

Liitokset esimerkkitietokannassa Esimerkki liitoskyselystä kurssitietokannassa: laadi raportti kurssin Java-ohjelmointi harjoitusryhmistä Mitä tietoja halutaan tulokseen: ryhmän numero (taulussa harjoitusryhmä) ohjaajan nimi (taulussa opettaja) kokoontumispäivä (taulussa harjoitusryhmä) alkamisaika (taulussa harjoitusryhmä) opiskelijan nimi (taulussa opiskelija) Tietokantojen perusteet, K2008 35

Liitokset esimerkkitietokannassa (2) Mistä tauluista tarvitaan tietoja? Taulut opettaja, harjoitusryhmä ja opiskelija on välttämättä otettava kyselyn from-osaan Taulu ilmoittautuminen tarvitaan opiskelijoiden kytkemiseksi ryhmiin Taulu kurssi tarvitaan, jotta saataisiin selville Java-ohjelmoinnin kurssikoodi Tietokantojen perusteet, K2008 36

Liitokset esimerkkitietokannassa (3) opettaja opetunnus nimi puhelin tyohuone harjoitusryhma kurssikoodi ryhmanro viikonpaiva alkamisaika sali opettaja ilmoittautuminen kurssikoodi ryhmanro opisknro ilm_aika kurssi koodi nimi opintoviikot luennoija opiskelija onumero nimi paa_aine kaupunki aloitusvuosi Tietokantojen perusteet, K2008 37

Liitokset esimerkkitietokannassa (4) opettaja opetunnus nimi puhelin tyohuone harjoitusryhma kurssikoodi kurssi koodi ryhmanro nimi opetunnus= viikonpaiva opintoviikot opettaja alkamisaika kurssikoodi= luennoija sali koodi opettaja opiskelija ilmoittautuminen onumero kurssikoodi= kurssikoodi nimi kurssikoodi and ryhmanro paa_aine ryhmanro= opisknro ryhmänro kaupunki ilm_aika opisknro= aloitusvuosi onumero Tietokantojen perusteet, K2008 38

Liitokset esimerkkitietokannassa (5) select H.ryhmanro rno, Ope.nimi ope, H.viikonpaiva, H.alkamisaika, O. Nimi opiskelija from harjoitusryhma H, opettaja Ope, opiskelija O, ilmoittautuminen I, kurssi K where H.kurssikoodi=K.koodi and I.kurssikoodi=H.kurssikoodi and I.ryhmanro=H.ryhmanro and Ope.Opetunnus=H.Opettaja and I.Opisknro=O.onumero and K.nimi= Java-ohjelmointi order by H.ryhmanro, O.nimi; Tietokantojen perusteet, K2008 39