CSE-A1200 Tietokannat



Samankaltaiset tiedostot
CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 39

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

SELECT-lauseen perusmuoto

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 32

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

CSE-A1200 Tietokannat

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

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

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

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

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

SQL - STRUCTURED QUERY LANGUAGE

Relaatioalgebra. Kyselyt:

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

Yhdiste, leikkaus, erotus ym.

HELIA 1 (14) Outi Virkki Tiedonhallinta

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 54

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

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

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

Liitokset - haut useaan tauluun

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

SQL:N PERUSTEET MARKKU SUNI

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

CSE-A1200 Tietokannat

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

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

CS-A1150 Tietokannat

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

Tietokannat II -kurssin harjoitustyö

Ohjelmoinnin perusteet Y Python

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

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

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

Java-kielen perusteet

CSE-A1200 Tietokannat

Relaation tyhjyyden testaaminen

SQL:N PERUSTEET MARKKU SUNI

CS-A1150 Tietokannat

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

CS-A1150 Tietokannat

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

VINKKI: Katso Kentät Muistioon -painikkeella, mikä on taulukon nimen oikea kirjoitusasu.

TIETOKANNAT JOHDANTO

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

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

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

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

Kuva 7.2 vastaustaulu harjoitukseen 7.2

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

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

Ohjelmoinnin perusteet Y Python

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

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

CSE-A1200 Tietokannat

Relaatiomalli ja -tietokanta

Tällä viikolla. Kotitehtävien tarkistus Upotettu SQL Indeksi-harjoitus täydennetään pelifirman tietokantamallia SQL-tehtäviä

CSE-A1200 Tietokannat

Ehto- ja toistolauseet

Ohjelmoinnin peruskurssi Y1

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

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

SQL-kielen perusteet. Tietokantojen perusteet

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Tietokantojen suunnittelu, relaatiokantojen perusteita

CS-A1150 Tietokannat

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

HELIA 1 (14) Outi Virkki Tiedonhallinta

Java-kielen perusteet

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

ECDL Tietokannat. Copyright 2015 ECDL Foundation ECDL Tietokannat Sivu 1 / 7

Tietokannat II -kurssin harjoitustyö

SQL-KYSELYJEN OPTIMOINNISTA. Niko Jalkanen Joensuun yliopisto Tietojenkäsittelytiede Pro gradu tutkielma

HELIA 1 (17) Outi Virkki Tiedonhallinta

Relaatioalgebra. Luku Joukko-opilliset operaatiot Yhdiste eli unioni Leikkaus

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

TIETOKANTOJEN PERUSTEET MARKKU SUNI

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

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

Opintopiiritehtävä 3: Verkkohuutokauppa

Transkriptio:

CSE-A1200 Tietokannat 23.2.2016 CSE-A1200 Tietokannat 23.2.2016 1 / 36

Oppimistavoitteet: tämän luennon jälkeen Tunnet SQL:n perusteet ja osaat tehdä yksinkertaisia SQL-kyselyitä, esimerkiksi hakea relaatiosta halutun ehdon täyttävät monikot ja niistä halutut attribuutit (valinta ja projektio) yhdistää kahden tai useamman relaation monikoita ja haetaan niistä halutun ehdon toteuttavat yhdistelmät (liitos) järjestää kyselyn tulokset tehdä erilaisia joukko-operaatioita vaativia kyselyitä. CSE-A1200 Tietokannat 23.2.2016 2 / 36

SQL Tyypillisiä tietokantojen tarvitsemia toimenpiteitä Uusien relaatioiden (taulujen) määrittelminen. Tietueiden (monikoiden) lisääminen tietokantaan. Tietueiden tietojen päivitys. Kyselyjen tekeminen tietokannasta. Näiden toimenpiteiden tekemiseen relaatiotietokannoissa voi käyttää SQL-kieltä (Structured Query Language) Kieli kehitettiin 1970-luvulla, ja sen on nykyisin käytössä lähes kaikissa suurissa kaupallisissa tietokannan hallintajärjestelmissä. CSE-A1200 Tietokannat 23.2.2016 3 / 36

Eri SQL-murteita ANSI SQL eli SQL1 vuodelta 1986 SQL2 vuoden 1992 standardi laajennettu SQL1:stä, uusina piirteinä esim. typpit DATE ja TIME, erilaisia uusia operaatioita atomisille tietotyypeille, uusia joukko- ja liitosoperaatioita jne. SQL-99 eli SQL:1999 Tunnettu myös SQL3-nimellä Laajennettu SQL2:sta (esim. rekursio, laukaisimet ja oliot) Standardia on myöhemmin laajenettu (SQL:2003, SQL:2006, SQL:2008, SQL:2011). Ohjelmistotuottajien SQL-murteet ovat tyypillisesti SQL2:n laajennoksia SQL3:n piirteillä. Tällä kurssilla harjoitustehtävissä ja harjoitustyössä käytettävä SQLite toteuttaa lähes kaikki SQL2:n piirteet. CSE-A1200 Tietokannat 23.2.2016 4 / 36

SQL:n kyselyt SQL:n kyselyt ovat deklaratiivisia: Ne kertovat, mihin kysymykseen halutaan vastaus, mutta eivät määrittele sitä, miten kysely käytännössä suoritetaan. Kyselyn käytännön suorittamisen suunnittelu jää tietokannan hallintajärjestelmän kyselynoptimoijan tehtäväksi. Kyselyn perusmuoto on SELECT <attribuuttilista> FROM <relaatiolista> WHERE ehto FROM-osa ilmaisee, mihin relaatioon/relaatioihin kysely kohdistuu. SELECT-osa määrää, mitkä attribuutit tulostetaan tulokseen valituista monikoista (vrt. projektio). WHERE-osa ilmaisee ehdon, jonka kyselyn tulokseen valitun monikon pitää täyttää (vrt. valinta). CSE-A1200 Tietokannat 23.2.2016 5 / 36

Esimerkkitietokanta Tämän luennon esimerkit käsittelevät esimerkkitietokantaa, joka koostuu seuraavista relaatioista Customers(custNo, name, born, bonus, address, email) Products(number, prodname, description, price, manufid) Manufacturers(ID, manufname, phone) Orders(orderNo, deliver, status, custno) BelongsTo(orderNo, productno, count) Oletetaan, että relaation Products sisältö on tällä hetkellä seuraava: Relation Products number prodname description price manufid T-33441 Samsung Galaxy A5 cellphone 250.0 S123 R-55336 IPad Air 2 tablet 495.0 M554 T-77445 Superstar Track M jacket 30.0 A432 S-65221 Brasserie 24 pan 33.50 F542 CSE-A1200 Tietokannat 23.2.2016 6 / 36

Esimerkkitietokannan selityksiä Relaatioon Customers on tallennettu verkkokaupan asiakkaiden tietoja. Attribuutteina ovat asiakkaan asiakasnumero, nimi, syntymävuosi, bonuspisteet, osoite ja sähköpostiosoite. Relaatioon Products on kerätty verkkokaupan tuotteiden tietoja. Attribuutteina ovat tuotenumero, tuotteen nimi, kuvaus (esim. camera ), hinta ja valmistajan yksilöivä tunnus. Relaatio Manufacturers sisältää valmistajien tietoja. Attribuutteina ovat valmistajan tunnus, nimi ja puhelinnumero. Relaatiossa Orders säilytetään tietoa tehdyistä tilauksista. Yksi tilaus voi sisältää monta tuotetta. Attribuutteina ovat tilausnumero, toimitustapa, tilauksen tila ja tilauksen tehneen asiakkaan asiakasnumero. Relaatio BelongsTo sisältää tiedon siitä, mikä tuote kuuluu mihinkin tilaukseen. Attribuutteina ovat tilauksen numero, yhden tilaukseen kuuluvan tuotteen numero ja tieto siitä, kuinka monta kappaletta ko. tuotetta sisältyy tilaukseen. CSE-A1200 Tietokannat 23.2.2016 7 / 36

Yksinkertainen SQL-kysely Tarkastellaan ensimmäisenä kyselyä SELECT description, price FROM Products; Tulosrelaatiossa on samat tuotteet kuin alkuperäisessä relaatiossa, mutta niistä esitetään vain kaksi attribuuttia: Relation Products description price cellphone 250.0 tablet 495.0 jacket 30.0 pan 33.50 CSE-A1200 Tietokannat 23.2.2016 8 / 36

Ehto mukaan SQL-kyselyyn Haetaan edellisestä Products-taulusta niiden tuotteiden nimet ja kuvaukset, joiden hinta on alle 35 euroa: SELECT prodname, description FROM Products WHERE price < 35.0; Kysely siis käy läpi kaikki Products-relaation monikot, valitsee niistä annetun ehdon toteuttavat monikot ja tulostaa näistä SELECT-osassa luetellut attribuutit. (Kyselyä ei välttämättä suoriteta juuri tällä tavalla, mutta lopputulos on sama.) Tulos on nyt Relation Products prodname Superstar Track M Brasserie 24 description jacket pan CSE-A1200 Tietokannat 23.2.2016 9 / 36

Välitehtävä Kirjoita seuraava kysely SQL:llä: hae kaikkien niiden asiakkaiden asiakasnumerot ja nimet, joilla on vähintään 30 bonuspistettä. CSE-A1200 Tietokannat 23.2.2016 10 / 36

Toinen esimerkki valinnasta Haetaan relaatiosta Products niiden tuotteiden nimet ja hinnat, joiden kuvaus on cellphone tai tablet ja joiden hinta on alle 400 euroa. SELECT prodname, price FROM Products WHERE (description = cellphone OR description = tablet ) AND price < 400.0 Tulos Result prodname price Samsung Galaxy A5 250.0 CSE-A1200 Tietokannat 23.2.2016 11 / 36

Liitokset Liitos voidaan toteuttaa helposti kirjoittamalla kyselyn WHERE-osaan ehto, joka koskee kahden eri taulun attribuutteja Esimerkki: oletetaan, että relaation Manufacturers sisältö on seuraava: Relation Manufactures ID manufname phone R122 Nike 09-8011 M554 Apple 09-5001 S123 Samsung 020-7300 L711 Sony 020-6500 F542 Fiskars 020-43910 A432 Adidas 09-70911 Kirjoitetaan kysely "tulosta tietokannassa olevien tuotteiden nimet yhdessä kunkin tuotteen valmistajan nimen kanssa." CSE-A1200 Tietokannat 23.2.2016 12 / 36

Liitokset, jatkuu Tulosta tietokannassa olevien tuotteiden nimet yhdessä kunkin tuotteen valmistajan nimen kanssa. SELECT prodname, manufname FROM Products, Manufacturers WHERE manufid = ID; Kysely voidaan ajatella suoritettavaksi seuraavasti: 1. Muodostetaan FROM-osassa olevien relaatioiden karteesinen tulo: kaikki mahdolliset monikot, joiden ensimmäisenä osana on jokin relaation Products monikko ja toisena osana jokin relaation Manufactures monikko. 2. Valitaan karteesisen tulon monikoista ne, jotka toteuttavat WHERE-osassa olevan ehdon. 3. Otetaan tulokseen mukaan valituista monikoista vain ne attribuutit, jotka on lueteltu SELECT-osassa. Oikeasti kyselyä ei välttämättä suoriteta näin. Lopputulos on kuitenkin sama, ja SQL-kyselyn voi ymmärtää helposti ajattelemalla sitä näin. CSE-A1200 Tietokannat 23.2.2016 13 / 36

Liitokset, jatkuu Esimerkki: muodostetaan karteesinen tulo: number prodname description price manufid ID manufname phone T-33441 Samsung Galaxy A5 cellphone 250.0 S123 R122 Nike 09-8011 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 M554 Apple 09-5001 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 S123 Samsung 020-7300 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 L711 Sony 020-6500 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 F542 Fiskars 020-43910 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 A432 Adidas 09-70911 R-55336 IPad Air 2 tablet 495.0 M554 R122 Nike 09-8011 R-55336 IPad Air 2 tablet 495.0 M554 M554 Apple 09-5001 R-55336 IPad Air 2 tablet 495.0 M554 S123 Samsung 020-7300 R-55336 IPad Air 2 tablet 495.0 M554 L711 Sony 020-6500 R-55336 IPad Air 2 tablet 495.0 M554 F542 Fiskars 020-43910 R-55336 IPad Air 2 tablet 495.0 M554 A432 Adidas 09-70911 T-77445 Superstar Track M jacket 30.0 A432 R122 Nike 09-8011 T-77445 Superstar Track M jacket 30.0 A432 M554 Apple 09-5001 T-77445 Superstar Track M jacket 30.0 A432 S123 Samsung 020-7300 T-77445 Superstar Track M jacket 30.0 A432 L711 Sony 020-6500 T-77445 Superstar Track M jacket 30.0 A432 F542 Fiskars 020-43910 T-77445 Superstar Track M jacket 30.0 A432 A432 Adidas 09-70911 S-65221 Brasserie 24 pan 33.50 F542 R122 Nike 09-8011 S-65221 Brasserie 24 pan 33.50 F542 M554 Apple 09-5001 S-65221 Brasserie 24 pan 33.50 F542 S123 Samsung 020-7300 S-65221 Brasserie 24 pan 33.50 F542 L711 Sony 020-6500 S-65221 Brasserie 24 pan 33.50 F542 F542 Fiskars 020-43910 S-65221 Brasserie 24 pan 33.50 F542 A432 Adidas 09-70911 CSE-A1200 Tietokannat 23.2.2016 14 / 36

Liitokset, jatkuu Valitaan ehdon täyttävät monikot: number prodname description price manufid ID manufname phone T-33441 Samsung Galaxy A5 cellphone 250.0 S123 R122 Nike 09-8011 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 M554 Apple 09-5001 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 S123 Samsung 020-7300 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 L711 Sony 020-6500 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 F542 Fiskars 020-43910 T-33441 Samsung Galaxy A5 cellphone 250.0 S123 A432 Adidas 09-70911 R-55336 IPad Air 2 tablet 495.0 M554 R122 Nike 09-8011 R-55336 IPad Air 2 tablet 495.0 M554 M554 Apple 09-5001 R-55336 IPad Air 2 tablet 495.0 M554 S123 Samsung 020-7300 R-55336 IPad Air 2 tablet 495.0 M554 L711 Sony 020-6500 R-55336 IPad Air 2 tablet 495.0 M554 F542 Fiskars 020-43910 R-55336 IPad Air 2 tablet 495.0 M554 A432 Adidas 09-70911 T-77445 Superstar Track M jacket 30.0 A432 R122 Nike 09-8011 T-77445 Superstar Track M jacket 30.0 A432 M554 Apple 09-5001 T-77445 Superstar Track M jacket 30.0 A432 S123 Samsung 020-7300 T-77445 Superstar Track M jacket 30.0 A432 L711 Sony 020-6500 T-77445 Superstar Track M jacket 30.0 A432 F542 Fiskars 020-43910 T-77445 Superstar Track M jacket 30.0 A432 A432 Adidas 09-70911 S-65221 Brasserie 24 pan 33.50 F542 R122 Nike 09-8011 S-65221 Brasserie 24 pan 33.50 F542 M554 Apple 09-5001 S-65221 Brasserie 24 pan 33.50 F542 S123 Samsung 020-7300 S-65221 Brasserie 24 pan 33.50 F542 L711 Sony 020-6500 S-65221 Brasserie 24 pan 33.50 F542 F542 Fiskars 020-43910 S-65221 Brasserie 24 pan 33.50 F542 A432 Adidas 09-70911 CSE-A1200 Tietokannat 23.2.2016 15 / 36

Liitokset, jatkuu Valitaan ehdon täyttävistä monikoista pyydetyt attribuutit: number prodname description price manufid ID manufname phone T-33441 Samsung Galaxy A5 cellphone 250.0 S123 S123 Samsung 020-7300 R-55336 IPad Air 2 tablet 495.0 M554 M554 Apple 09-5001 T-77445 Superstar Track M jacket 30.0 A432 A432 Adidas 09-70911 S-65221 Brasserie 24 pan 33.50 F542 F542 Fiskars 020-43910 Result prodname Samsung Galaxy A5 IPad Air 2 Superstar Track M Brasserie 24 manufname Samsung Apple Adidas Fiskars CSE-A1200 Tietokannat 23.2.2016 16 / 36

Toinen esimerkki liitoksesta Kysely: "tulosta niiden valmistajien nimet, joilla on tarjolla alle 300 euroa maksavia tuotteita, joiden kuvaus on cellphone". CSE-A1200 Tietokannat 23.2.2016 17 / 36

Toinen esimerkki liitoksesta Kysely: "tulosta niiden valmistajien nimet, joilla on tarjolla alle 300 euroa maksavia tuotteita, joiden kuvaus on cellphone". Kysely SQL:llä: SELECT manufname FROM Products, Manufacturers WHERE manufid = ID AND description = cellphone AND price < 300; Tulos esimerkkirelaatioilla: Result manufname Samsung CSE-A1200 Tietokannat 23.2.2016 17 / 36

Duplikaattien poistaminen Toisin kuin relaatioalgebrassa, SQL:ssä tulosrelaatiot eivät ole joukkoja (set), vaan monijoukkoja (bag), eli sama monikko voi esiintyä tuloksessa monta kertaa. Oletetaan, että relaatio Customers on seuraava Relation Customers number name born bonus address email 112233 Teemu Teekkari 1995 55 Servinkuja 3 tteekkari@gmail.com 554422 Riina Raksalainen 1993 43 Otaranta 8 riinar@yahoo.com 37856 Antti Virta 1970 12 Aaltokatu 4 antti@hotmail.com 77233 Nina Teekkari 1991 20 Servinkuja 3 nite@hotmail.com CSE-A1200 Tietokannat 23.2.2016 18 / 36

Duplikaattien poistaminen, jatkoa Suoritetaan sille kysely SELECT address FROM Customers WHERE bonus > 15 Tulos on Result address Servinkuja 3 Otaranta 8 Servinkuja 3 CSE-A1200 Tietokannat 23.2.2016 19 / 36

Duplikaattien poistaminen, jatkoa Jos duplikaatit halutaan poistaa, on SELECT-osaan lisättävä määre DISTINCT: SELECT DISTINCT address FROM Customers WHERE bonus > 15 Tämän kyselyn vastaus on Result address Servinkuja 3 Otaranta 8 CSE-A1200 Tietokannat 23.2.2016 20 / 36

Attribuuttien yksiselitteisyys Eri relaatioissa voi olla samannimisiä attribuutteja. Jos kysely kohdistuu tällaisiin relaatioihin, pitää yksikäsitteisesti määrätä, minkä relaation attribuutteja tarkoitetaan. Samannimiset attribuutit erotetaan toisistaan pistenotaatiolla: attribuutin alkuun liitetään sen relaation nimi. Esim. R.A tarkoittaa relaation R attribuuttia A. Esimerkki: Halutaan löytää relaatioista Customers(custNo, name, born, bonus, address, email) Orders(orderNo, deliver, status, custno) niiden asiakkaiden asiakasnumerot ja nimet, joilla on tilaus, jonka status on returned. CSE-A1200 Tietokannat 23.2.2016 21 / 36

Attribuuttien yksiselitteisyys, jatkoa Kysely: SELECT Customers.custNo, name FROM Customers, Orders WHERE Customers.custNo = Orders.custNo AND status = returned CSE-A1200 Tietokannat 23.2.2016 22 / 36

Rivimuuttujat Pistenotaation käyttö yksistään ei riitä, jos kyselyssä pitää verrata saman relaation rivejä keskenään. Esimerkki: halutaan tulostaa asiakkaat, jotka asuvat keskenään samassa osoitteessa. Tällöin on verrattava kahta saman Customers-relaation riviä keskenään. SQL:ssä voidaan käyttää rivimuuttujia (tuple variables) viittaamaan relaatioihin relaatioalgebran uudelleennimeämisen tapaan. Samalle relaatiolle voi määritellä useita rivimuuttujia Rivimuuttujat määritellään FROM-osassa käyttämällä syntaksia FROM <relaation nimi> AS <rivimuuttujan nimi> CSE-A1200 Tietokannat 23.2.2016 23 / 36

Rivimuuttujat, jatkoa Tulosta asiakkaat, jotka asuvat samassa osoitteessa keskenään. SELECT C1.name, C2.name FROM Customers AS C1, Customers AS C2 WHERE C1.address = C2.address AND C1.name < C2.name Rivimuuttujia voidaan käyttää myös vähentämään kirjoitustyötä kyselyissä silloinkin, kun niiden käyttö ei ole varsinaisesti välttämätöntä. CSE-A1200 Tietokannat 23.2.2016 24 / 36

Esimerkki kolmen relaation liitoksesta Halutaan niiden tilausten numerot ja tilat, joihin kuuluu tuote, jonka kuvaus on cellphone. CSE-A1200 Tietokannat 23.2.2016 25 / 36

Esimerkki kolmen relaation liitoksesta Halutaan niiden tilausten numerot ja tilat, joihin kuuluu tuote, jonka kuvaus on cellphone. Kysely SELECT O.orderNo, status FROM Orders AS O, Products AS P, BelongsTo AS B WHERE O.orderNo = B.orderNo AND number = productno AND description = cellphone CSE-A1200 Tietokannat 23.2.2016 25 / 36

Tulosrelaation rivien esitysjärjestyksen määrääminen Oletusarvoisesti kyselyn tulosrelaation rivit esitetään satunnaisessa järjestyksessä. Järjestys voi myös vaihdella kyselyn eri suorituskertojen välillä. Jos tulosrelaation rivit halutaan järjestää jonkin attribuutin mukaan, saadaan se aikaan lisäämällä kyselyyn määre ORDER BY <attribuuttilista> Tällöin tulosrelaatio järjestetään ensisijaisesti listan 1. attribuutin mukaan, toisijaisesti listan 2. attribuutin mukaan jne. Järjestys on oletusarvoisesti kasvava, mutta sen voi vaihtaa laskevaksi lisäämällä attribuutin jälkeen sanan DESC. CSE-A1200 Tietokannat 23.2.2016 26 / 36

Esimerkki järjestyksen määräämisestä Tulostetaan asiakkaat, joilla on yli 30 bonuspistettä, bonuspisteiden määräämässä järjestyksessä (suurin ensin). Jos useammalla asiakkaalla on sama määrä bonuspisteitä, tulostetaan nämä syntymävuoden määräämässä järjestyksessä (pienin ensin). CSE-A1200 Tietokannat 23.2.2016 27 / 36

Esimerkki järjestyksen määräämisestä Tulostetaan asiakkaat, joilla on yli 30 bonuspistettä, bonuspisteiden määräämässä järjestyksessä (suurin ensin). Jos useammalla asiakkaalla on sama määrä bonuspisteitä, tulostetaan nämä syntymävuoden määräämässä järjestyksessä (pienin ensin). SELECT-osassa käytetty * valitsee kyselyyn mukaan kaikki relaation attribuutit Kysely SELECT FROM Customers WHERE bonus > 30 ORDER BY bonus DESC, born CSE-A1200 Tietokannat 23.2.2016 27 / 36

WHERE-osasssa käytettävistä operaattoreista WHERE-osa voi sisältää vertailuoperaattoreita =, <> (erisuuruus), <, >, <= ja >=. Vertailtavat arvot voivat olla vakioita tai kyselyn FROM-osassa määriteltyjen relaatioiden attribuutteja. Vertailussa voidaan käyttää myös aritmeettisia operaattoreita +, -, * ja /. Esimerkiksi ehto (born - 1995) * (born -1995) < 100 on tosi vuosille 1986 2004. Mahdollisia loogisia operaattoreita ovat AND, OR ja NOT. CSE-A1200 Tietokannat 23.2.2016 28 / 36

Välitehtävä Kirjoita seuraava kysely: tulosta niiden asiakkaiden asiakasnumerot, joilla on useampi kuin yksi tilaus. Kyselyn pitää tulostaa asiakasnumerot järjestyksessä. CSE-A1200 Tietokannat 23.2.2016 29 / 36

Merkkijonojen vertailusta Myös merkkijonojen vertailuun voidaan käyttää operaattoreita =, <> (erisuuruus), <, >, <= ja >=. Tällöin tutkitaan merkkijonojen leksikografista järjestystä. Sen lisäksi merkkijonojen samankaltaisuutta voidaan tutkia LIKE-vertailuoperaattorin avulla. Vertailulauseke on muotoa s LIKE p s on merkkijono ja p rakennekaava (pattern), joka voi sisältää tavallisten merkkien lisäksi erikoismerkkejä % ja _. p:ssä esiintyvä % ilmaisee, että vastaavalla paikalla s:ssä voi esiintyä mikä tahansa nollan tai useamman merkin pituinen merkkijono. p:ssä esiintyvä _ ilmaisee, että vastaavalla paikalla s:ssä voi esiintyä mikä tahansa yksittäinen merkki. Lauseke s LIKE p on tosi, jos ja vain jos s toteuttaa rakennekaavan p. CSE-A1200 Tietokannat 23.2.2016 30 / 36

Esimerkkejä merkkijonojen vertailuista Kysely SELECT prodname, description FROM Products WHERE description LIKE cell ; etsii tuotteet, joiden kuvaus on yhdeksän merkin mittainen siten, että neljä ensimmäistä merkkiä ovat cell ja niiden jälkeen tulee täsmälleen viisi merkkiä, jotka voivat olla mitä tahansa. Kysely SELECT prodname, description FROM Products WHERE prodname LIKE %Galaxy% ; etsii tuotteet, joiden nimessä esiintyy jossain kohdassa peräkkäin kirjaimet Galaxy. CSE-A1200 Tietokannat 23.2.2016 31 / 36

Aritmeettinen lauseke SELECT-osassa Esimerkki: halutaan tuotteiden nimet ja hinnat niin, että hinnat on muutettu dollareiksi kertomalla ne 1.1:llä Tällöin SELECT-osaan voidaan kirjoittaa kertolasku, jolla eurot voidaan muuttaa dollareiksi: SELECT prodname, price 1.1 FROM Products; Tuloksen otsikko on tällöin prodname price * 1.1 Jos haluaa kauniimman otsikon, kannattaa lauseke nimetä SELECT-osassa uudelleen: SELECT prodname, price 1.1 AS dollarprice FROM Products; CSE-A1200 Tietokannat 23.2.2016 32 / 36

Yhdiste SQL-kyselyssä on mahdollista suorittaa joukko-operaatioita yhdiste, leikkaus ja erotus kyselyiden tuloksina syntyviin relaatioihin. Toisin kuin muissa SQL-kyselyissä, joukko-operaatioiden tulokset ovat aitoja joukkoja eli duplikaatit on poistettu. (Dublikaattien poiston voi kuitenkin estää kirjoittamalla kyselyyn sanan ALL joukko-operaation nimen jälkeen.) Esimerkki: halutaan esimerkkitietokannasta sekä kaikkien niiden asiakkaiden numerot, joiden tilauksen status on waiting, että kaikkien niiden asiakkaiden numerot, joiden osoitteessa esiintyy sana Servinkuja. CSE-A1200 Tietokannat 23.2.2016 33 / 36

Yhdiste SQL-kyselyssä on mahdollista suorittaa joukko-operaatioita yhdiste, leikkaus ja erotus kyselyiden tuloksina syntyviin relaatioihin. Toisin kuin muissa SQL-kyselyissä, joukko-operaatioiden tulokset ovat aitoja joukkoja eli duplikaatit on poistettu. (Dublikaattien poiston voi kuitenkin estää kirjoittamalla kyselyyn sanan ALL joukko-operaation nimen jälkeen.) Esimerkki: halutaan esimerkkitietokannasta sekä kaikkien niiden asiakkaiden numerot, joiden tilauksen status on waiting, että kaikkien niiden asiakkaiden numerot, joiden osoitteessa esiintyy sana Servinkuja. SELECT CustNo FROM Orders WHERE status = waiting UNION SELECT CustNo FROM Customers WHERE address LIKE %Servinkuja% ; CSE-A1200 Tietokannat 23.2.2016 33 / 36

Leikkaus Esimerkki: Halutaan niiden valmistajien nimet, joilta verkkokaupassa on tarjolla sekä matkapuhelimia että kameroita. SELECT manufname FROM Manufacturers, Products WHERE manufid = ID and description = camera INTERSECT SELECT manufname FROM Manufacturers, Products WHERE manufid = ID and description = cellphone ; CSE-A1200 Tietokannat 23.2.2016 34 / 36

Erotus Joukkojen erotus esitetään SQL:ssä operaation EXCEPT avulla. Esimerkki: Halutaan niiden valmistajien nimet, joilta verkkokaupassa on tarjolla kameroita, mutta ei matkapuhelimia. SELECT manufname FROM Manufacturers, Products WHERE manufid = ID and description = camera EXCEPT SELECT manufname FROM Manufacturers, Products WHERE manufid = ID and description = cellphone ; CSE-A1200 Tietokannat 23.2.2016 35 / 36

Attribuuttien nimeäminen uudelleen joukko-operaatioiden yhteydessä Esimerkki: halutaan esimerkkitietokannasta sekä kaikkien A:lla alkavien asiakkaiden nimet että kaikki A:lla alkavien valmistajien nimet. Ongelma: Customers-relaatiossa nimeä kuvaavan attribuutin nimi on name, mutta Manufacturers-relaatiossa nimeä kuvaavan attribuutin nimi on manufname. Halutaan, että tulosrelaatiossa attribuutilla on sama nimi. Ongelma voidaan ratkaista nimeällä toisen kyselyn tuloksessa attribuutti uudelleen: SELECT name FROM Customers WHERE name LIKE A% UNION SELECT manufname AS name FROM Manufacturers WHERE name LIKE A% ; CSE-A1200 Tietokannat 23.2.2016 36 / 36