Tietokannan hakukielet: esitelmä. DataLog & SQL. Sami El-Mahgary. HOPL TKK, marraskuu 09



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

SQL - STRUCTURED QUERY LANGUAGE

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

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

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä

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

CSE-A1200 Tietokannat

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

SELECT-lauseen perusmuoto

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

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

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

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

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

1. Liikkuvat määreet

Tietokannat II -kurssin harjoitustyö

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

MEETING PEOPLE COMMUNICATIVE QUESTIONS

Ohjelmoinnin peruskurssien laaja oppimäärä

CSE-A1200 Tietokannat

Kyselyn yleisrakenne:

CSE-A1200 Tietokannat

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

812336A C++ -kielen perusteet,

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Opiskeluoikeuksien maaran tiedonkeruu

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Capacity Utilization

Visual Basic -sovelluskehitin Juha Vitikka

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

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

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Information on Finnish Language Courses Spring Semester 2018 Päivi Paukku & Jenni Laine Centre for Language and Communication Studies

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

anna minun kertoa let me tell you

Information on Finnish Language Courses Spring Semester 2017 Jenni Laine

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Efficiency change over time

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

TIETOKANTOJEN PERUSTEET MARKKU SUNI

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

Uusi Ajatus Löytyy Luonnosta 4 (käsikirja) (Finnish Edition)

Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta

Kielioppia: toisin kuin Javassa

Gap-filling methods for CH 4 data

Relaatiomalli ja -tietokanta

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

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

4. Lausekielinen ohjelmointi 4.1

TIETOKANNAT JOHDANTO

Choose Finland-Helsinki Valitse Finland-Helsinki

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

make and make and make ThinkMath 2017

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

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

Johdatus ohjelmointiin

5. HelloWorld-ohjelma 5.1

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

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

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

ECVETin soveltuvuus suomalaisiin tutkinnon perusteisiin. Case:Yrittäjyyskurssi matkailualan opiskelijoille englantilaisen opettajan toteuttamana

Kuva 7.2 vastaustaulu harjoitukseen 7.2

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Information on Finnish Courses Autumn Semester 2017 Jenni Laine & Päivi Paukku Centre for Language and Communication Studies

Windows Phone. Module Descriptions. Opiframe Oy puh Espoo

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Apuja ohjelmointiin» Yleisiä virheitä

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Tietokannat II -kurssin harjoitustyö

Travel Getting Around

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

HELIA 1 (13) Outi Virkki Tietokantasuunnittelu

Opiskelijat valtaan! TOPIC MASTER menetelmä lukion englannin opetuksessa. Tuija Kae, englannin kielen lehtori Sotungin lukio ja etälukio

TW-LTE 4G/3G. USB-modeemi (USB 2.0)

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Miksi Suomi on Suomi (Finnish Edition)

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Java-kielen perusteet

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Information on preparing Presentation

TIETEEN PÄIVÄT OULUSSA

HELIA 1 (17) Outi Virkki Tiedonhallinta

Transkriptio:

Tietokannan hakukielet: esitelmä HOPL TKK, marraskuu 09 DataLog & SQL Sami El-Mahgary

Osa I Lyhyt katsaus DATALOG:iin Osa II Katsaus SQL:n kehitykseen Tietokantakehityskieliä: Osa IIIA Katsaus Paradox tietokantakieleen (4. GL) Osa IIIB Katsaus Delphiin 2

Osa I. DATALOG/SQL sijoittuminen.. Kehitysvaihe 2GL Assembler Huomatuksia Ei enää käytössä 3GL Perinteiset algoritmiset/proseduraal iset kielet 4GL Ylemmän tason ohjelmointikielet 5GL Ongelman määrittelykielet (declarative prog. Languages) Entäpä nykyiset Visuaaliset sovelluskehittimet (Delphi, Visual Basic, Visual C++)? C/C++, Java, Pascal, Python. Esim. SQL, Datalog, Focus, sekä tietokantasovelluskehittim et ja kyselykielet. Nopeuttavat Prolog, CLP(R) ohjelmointia. sekä OPS5(Asiantuntijajärjestel mät) Luultavasti 4GL, jotkut voivat lajitella omaan luokkansa. 3

5 GL joidenkin mielestä tarkoittaa luonnolisia kieliä : 4

DATALOG: Lyhyt kehityshistoria 1/2 (vuosi) Kehitysvaihe (1973) Alain Colmerauer ja työryhmä julkaisevat Prologin raportin. (1974) Robert Kowalski julkaisee paperin Predicate Logic as a Programming Language (1977) Käsitys logiikkaohjelmoinnin sekä tietokantojen yhdistämisestä syntyy kongressissa Ranskassa (Toulouse). Huomatuksia Oivallus, että logiikasta on ohjelmointikieleksi. Mukana myös A. Colmerauer:in ajatuksia. Logiikka + Kontrolli=Algoritmi Hervé Gallaire, Jack Minker, Jean-Marie Nicolas järjestämä kongressi toteaa: logiikka & tietokanta ovat oma aihepiirinsä: käsitys päättellytietokannasta 5

DATALOG: Lyhyt kehityshistoria 2/2 (vuosi) Kehitysvaihe Huomatuksia (1978) John Lloyd, Foundations of Logic Programming (1978) H. Gallaire & J. Minker (eds.), Logic & Databases (1980-luvun puoliväli) DATALOG nimitys, peräisin tutkijaryhmältä (1989) Stefano Ceri et al, What you always wanted to know About Datalog (Transct. in Knowledge Eng.) Logiikkaohjelmoinnin merkkiteoksia. Tietokannan formalisointi logiikan puitteissa. vertaa Wikipedia, jonka mukaan 1 hlö nimesi kielen. Datalogia tutkittu laajasti v. 1985-1989, vakiintunut asema tutkijoiden keskuudessa. 6

Deklaratiivisen ohjelmoinnin etuja. Ei varsinaista proseduuria, ei muistin-viittaustoimintoja, jne. Ohjelma yksinkertaistuu. There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. - Tony Hoare (Turing palkinto v. 1980) 7

DATALOG: Viisi Faktaa Hakukieli tietokantaan (query language). Deklaratiivinen kieli (kuten Prolog ja SQL). Syntaksi on osajoukko Prologista. Datalog-tulkki osaa päätellä (ETEENPÄIN KETJUTUS) uusia faktoja lähtötiedoista. Ei käytännössä kaupallisia toteutuksia, tutkijoiden kielenä (toy language). 8

DATALOGin perusteita Perustuu logiikkaohjelmaan: kokoelma faktoja (facts, extentional database) sekä sääntöjä (rules). Esim. Predikaatista: OnSuoritettavaEnnen (X,Y ) Luetaan X suoritetaan ennen Y :tä. Parametrien määrä predikaatissa aina vakio (tässä 2). Muuttuja merkitään Isolla alkukirjaimella, vakiot pienellä. Predikaatti OnSuoritettavaEnnen vastaa tietokannan relaatiota. 9

DATALOG OHJELMA (1/3) Määritellään ohjelma, joka koostuu säännöistä. Rekursio OK. Esitieto (X, Y ) :- OnSuoritettavaEnnen (X, Y ). Esitieto(X, Y) :- OnSuoritettavaEnnen (X, Z ), Esitieto(Z, Y). Pilkkuerotin, ilmaisee JA-operaation. Lisäksi määritellään faktat (facts, extentional database): OnSuoritettavaEnnen (kie-98.7011, kie-98.7013 ). //Fakta 1 10

DATALOG OHJELMA (2/3) ly: Mitä vaaditaan esitietoina kurssille kie-98 kie-98.7011 kie-98.7013 kie-98.7015 kie-98.7017 11

DATALOG OHJELMA (3/3) Annetaan tulkin käydä läpi säännöt kunnes ei enää uusia faktoja. 1.Kierros: Muuttujat X ja Y sitoutuvat (instantiation) kursseihin. saadaan Esitieto{(kie-98.7011, kie-98.7013 ); (kie-98.7013, kie-98.7015) ; (kie-98.7015, kie-98.7017)}; 2.Kierros : Esitieto saa uudet faktat: (kie-98.7011, kie-98.7015) ; (kie-98.7013, kie-98.7017) ; ( sääntö nr 2) 3.Kierros : Esitieto saa uuden faktan: (kie-98.7011,kie-98.7017) kun yhdistetään (kie-98.7011, kie-98.7015) sekä (kie-98.7015, kie-98.7017) 12

DATALOG OHJELMA 1/1 Halvat Autot.. Cheap_car(Car) :- sells(carshop1, Car, Price1), sells(carshop2, Car, Price2), Price1 sells(autotalonen, < 5000, VW-Golf GS, 4570). sells(autotalonen, Price2 < 5000, VW-Golf CarShop1 GS, 4950) <>. sells(autotalonen, CarShop2. Peugeot 207, 5000). sells(dasautohaus, VW-Golf GS, 4800). sells(pikkuautot Oy, Peugeot 207, 4999). Faktat, extensional database ETEENPÄIN KETJUTUS: kokeillaan vaihtoehtoja kun kaikki Säännön alitavoitteet täyttyvät. Vastauksena olisi VW-Golf 13

Datalog Vs. Prolog Datalog: ohjelman semantiikka perustuu 100% logiikkaan, sääntöjen järjestyksellä ei ole väliä. Eteenpäinketjutus (forward-chaining/bottom-up) eli annetuista faktoista ja säännöistä johdetaan uusia faktoja kunnes uusia faktoja ei enää voi johtaa (vrt. Taaksepäin ketjutus). Päättelyjärjestystä ei voida hallita proseduraalisin keinoin (vrt. cut eli! operaation avulla). Vain yksinkertaisia muuttujiaa parametreina (Prologissa sallitaan 14

Datalog nyt ja myöhemmin.. Vaikutteita SQL-1999 standardiin, rekursio. Vaikutteita kaupalliseen kieleen :.QL (object-oriented query language) ilmestyi v. 2007. Hajautetuissa järjestelmissä käyttöä laajennetulle Datalogille (Datalog with constraints), käytetty autentikoinnissa (trust management). 15

Osa II. SQL:n perusteita 1/2 Relaatiotietokantojen haku- sekä käsittely kieli. Perustuu ns. (turvalliseen) rivikalkyyliin, engl. safe tuple relational calculus. Eli etsittäessä vastaus kysymykseen ketkä EIVÄT ole opiskelijoita, tarkoittaa käytännössä ketkä henkilöistä EIVÄT kuulu opiskelijatauluun (eli kyselyt rajautuvat aina tietokannan tauluihin). Turvallisuudesta johtuen universaalikvanttori operaatio ei ole sallittu, 16

SQL:n perusteita 2/2 Vastaavat loogiset predikaatit merkitään AND OR sekä NOT. Haun perusmuoto: SELECT <attribuutit> FROM <relaatiot (taulut)> WHERE <rajoitusehto> Esimerkki: SELECT Student_ID, Student_Name = Biology FROM Students WHERE Student_Major SQL sidottu tietokantaan: yksittäistä SQL-tulkkia ei saatavilla ( Datalog). 17

SQL Kehityshistoria 1/2 (vuosi) Kehitysvaihe (1970) Tri E.F. Codd (IBM) julkaisee A Relational Model for Large Shared Data (1973) Banks IBM:n ryhmä julkaisee kyselykielen SQUARE, tarkoitettu myös ei-ohjelmoijille. (1974) IBM:n System R kehitys alkaa, 1. SEQUELpaperi ilmestyy (1974) 1. Ingres prototyyppi (yliopisto) (1979) Larry Ellison julkaisee kaupallisen tietokantansa, Oracle (1979) V2 IBM julkaisee System R:n Huomatuksia Määrittelee relaatiomallin perusteet. Codd:ille AM. Turing palkinto v. 1981. SQUARE = Specifying Queries as Relational Expressions. SEQUEL = Structured English Query Language QUEL-kyselykieli (ei standardia) firma: Software Development Labs, alkanut vain viikkoja vasta Oracle:n 1977! jälkeen SEQUEL jo varattu 18

SQL:n Kehityshistoria (2/2) (vuosi) Kehitysvaihe (1981)IBM julkaisee SQL/DS (1986) SQL:n 1. standardi (ANSI) (1992) Merkittävä standardi SQL-2 (1999) standardi SQL 1999 (SQL-3) Huomatuksia IBM:n 1.kaupallinen DBtuote! ( mainframes ) ISO-standardi v. 1987 mm. NATURAL JOIN, Temp -taulut. mm. Herättimet (triggers), kontrollirakenteet, (2003) standardi SQL:2003 mm. XML-tuki. rekursio. (2008) Standardi SQL:2008 Pieniä parannuksia esim. TRUNCATE Table tyhjentää koko taulun 19

Miksi IBM myöhästyi (1/2) Eräs SQL:n pääarkkitehteista muistelee.. * in the summer of 1978, I got a phone call from a guy named Larry Ellison, he said he was the president of Software Development Laboratories, and they were developing an implementation of the SQL language. * As you know, many papers came out of the System R project describing the language The project was not a secret and.., we d been telling everybody about it that would listen. And one of the people that had listened was Larry he was interested in implementing the SQL language in the UNIX environment. IBM wasn t interested in UNIX at all. (PDP-11 platform) 20

Miksi IBM myöhästyi (2/2) * I told Larry that, unfortunately we wouldn t be able to exchange information other than in the public literature. But that didn t slow down Software Development Laboratories. They released their implementation of SQL it was the first commercial implementation of SQL to go on the market.. * Larry's success had a..beneficial impact on our research group, because we finally got IBM s attention for this technology. Here was an outside company that had beat us to the punch as far as releasing a commercial implementation of these ideas, which were based on Ted Codd s concepts and our language coming out of the research division at IBM, and people were eating it up They Donald were Chamberlain paying money muistelee for it. That s (2009 a good ) way to get 21

SQL: Taulujen käsittely Käytetään ns. Data Definition Language komentoja. Olettaen, että tietokanta on jo määritelty, voidaan määritellä uusi tyhjä taulurakenne komennolla CREATE TABLE. Aineistoa lisätään komennolla INSERT TABLE. Aineistoa muunnetaan komennolla UPDATE TABLE. Aineistoa poistetaan komennolla

SQL: Taulujen generointi CREATE TABLE Transcript (Taken_ID Number Not Null, Course_ID Varchar2(9) Not Null, Student_ID Number Not Null, Teacher_ID Number Not Null, Course_Status Varchar2(3) Not Null, Semester_Taken Varchar2(9) Not Null, Grade_Obtained Number Not Null, Extra_Info Varchar2(65) ) 23

SQL: Aineiston Lisäys Komento INSERT lisää yhden tietueen. Lopuksi lisäykset tallennetaan levylle. INSERT INTO Transcript VALUES ( 100, CS-102, 3270, 1, OK, SPRING-09, SP, 4, ) );... 24

SQL: Aineiston Haku (1/5) SELECT S. Student_ID, S. Student_Name FROM Students S, Transcript T WHERE T.Student_ID = S.Student_ID AND T. Course_ID = CS-101 Varsinainen rajoitus Taulujen liitos Hakulauseissa (queries) tärkein ominaisuus on aineiston rajoittaminen, joten WHERE lausekkeista helposti pitkät. 25

SQL: Aineiston Haku (2/5) SELECT S. Student_ID, S. Student_Name FROM Students S, Transcripts T WHERE T. Student_ID = S. Student_ID AND T. Course_ID = CS-101 Student_ Student_Na ID me 3270 Adel 3270 Adel 3271 Jill 3272 Joseph Opiskelija Adel ilmestyy tuplana?! Voi hämmentää käyttäjää, SQL sallii toisteiset arvot (bagoriented, instead of setoriented) Korjaantuu käyttämällä

SQL: Aineiston Haku (3/5) SELECT S. Student_ID, S. Student_BirthDate FROM Students S WHERE S. Student_BirthDate < ALL (SELECT Student_Birthdate FROM Students S2 Hakee opiskelijat, jotka ovat vanhempia kuin WHERE jokainen S2. Department Luonnontieteiden = Natural opiskelija. Science ) ALL ei siis itsessään palauta kaikkia opiskelijoita. 27

SQL: Aineiston Haku (4/5) Haetaan opiskelijat, jotka ovat suorittaneet kaikki Prof. Eleichen :n (opettaja ID 3) opettamat kurssit. Ongelma: yleinen kysely, mutta SQL:ssä ei SELECT suoraa DISTINCT Tukea Student_ID kaikki operaattorille. FROM Transcripts T1 WHERE NOT EXISTS ( SELECT * FROM Transcripts WHERE Teacher_ID = 3 AND Course_ID NOT IN (SELECT Course_ID FROM Transcripts T2 WHERE T2.Student_ID = T1.Student_ID )) 28

SQL S // muuttujien avulla taulu liitetään itseensä. // (NAME, SAL, MGR,DEPT) // ( ANDERSON, 32000, JOHNSTON, SALES ) // ( JOHNSTON, 55000, BIGBOSS, SALES ) 29

Ei vain rivitasolla vaan myös ryhmityksiä.. Ryhmitys (grouping) ja tietuiden/rivien yhdistäminen (aggregates) on tutkimusten mukaan joskus hankalaa ainakin ei-ohjelmoijille. GROUP BY Muodostaa ryhmiä. AVG, MIN, MAX, SUM ryhmien yhteenveto laskentaa varten. 30

Ryhmityksiä.. esim. (1/4) Oletus: aineisto sijaitsee (väliaikaisessa) taulussa T3, jossa mm. Opiskelija 3270 on vaihtanut osastoa. Halutaan laskea montako opiskelijaa on suorittanut kunkin kurssin (sekä op:summan). Student_ID Dept Course_ID Credits 3270 French Comp.S CS-101 5 3270 ci Comp. CS-101 5 3271 Sci CS-101 5 3271 Comp. CS-103 3 3272 Sci Biology CS-101 5 3272 Biology CS-103 3 31

Ryhmityksiä.. esim. (2/4) Tavoitteena siis saada seuraava tulos: Course_ID Student_Co unt_taken Sum_of_Credit s) CS-101 3 15 CS-103 2 6 32

Ryhmityksiä.. esim. (3/4) Kun kokeillaan seuraavaa: SELECT Course_ID, COUNT(Course_ID), SUM (Credits) FROM T3 GROUP BY Course_ID saadaankin alla oleva, ei-haluttu tulos. Course_ ID Count (Course_ID ) Sum_of_Cred its CS-101 4 20 CS-103 2 6 33

Ryhmityksiä.. esim. (4/4) Oikea SQL-kysely olisi: SELECT Course_ID, COUNT( DISTINCT Student_ID), COUNT( DISTINCT Student_ID), * Credits FROM T3 GROUP BY Course_ID Eli olisi mm. osattava : Käyttää DISTINCT :iä Sijoitettava laskukaava 34

SQL: Aineiston Haku (5/5 ) Helpompi esitystapa aikaisempaan opettaja kyselyyn : SELECT T1.Student_ID, COUNT(t.course_id) FROM Transcript T1 WHERE T1.Teacher_ID = 3 // oikea Proffa GROUP BY student_id HAVING COUNT(T1. Course_ID) = (SELECT COUNT(DISTINCT T2. Course_ID) FROM Transcript T2 35

HIEMAN SQL KRITIIKKIÄ (1/2) Sama kysely (ketkä saaneet arvosanan 5 monella eri tavalla esitettynä (peräti 7!, tässä muutamia): (1) SELECT T. Student_ID FROM Transcripts T, Students S, WHERE T.Student_ID = S.Student_ID T AND T.Course_Grade = 5 (2) SELECT Student_ID FROM Students S WHERE Student_ID IN (SELECT Student_ID FROM Transcripts WHERE T.Course_Grade = 5) (3) SELECT Student_ID FROM Students S WHERE = ANY (SELECT Student_ID FROM Transcripts 36

HIEMAN SQL Kritiikkiä (2/2) (4) SELECT Student_ID FROM Students S WHERE 5 IN (SELECT Course_Grade FROM Transcript T WHERE = T.Student_ID = S.Student_ID) Yllä: Muuttuja S näkyvyysalue ulottuu siis sisäiseen SELECT -lauseeseen (5) SELECT Student_ID FROM Students S WHERE EXISTS (SELECT * FROM Transcript T WHERE = T.Student_ID = S.Student_ID AND Course_Grade = 5 ) (6) SELECT Student_ID FROM Students S WHERE 0 < (SELECT COUNT(*) FROM Transcript T WHERE = T.Student_ID = S.Student_ID AND 37

SQL: Jotain positiivistakin Yksi harvoista ennen v. 1975 kehitetyistä kielistä, joka silti voimissaan. Laajennettavissa mm. sulautetun SQL:n avulla (embedded SQL). Esim. IBM:llä ja Oracle:lla C/C++ tuki. Tällä hetkellä mysql ei tue sulautettua SQL:ää. Kielen luonne antaa ohjelmoijan keskittyä haluttuun tulokseen. Toiminut perusteena mm. OQL-kielellle (Object Query Language) oliopohjaisissa 38

SQL Vs. Datalog Datalog vastaa SQL:n SELECT- FROM-WHERE kyselyitä ilman ryhmityksiä/yhteenvetoja. Kun rekursio sallitaan Datalogissa, ilmaisuvoima on suurempi kuin SQL. 39

Tietokantakehityspaketit, 4GL (erityisesti 1985-1995). Tunnetuimmat dbase ja Paradox myöhemin mm. FoxPro. Tunnetaan nimellä 4GL. (4th Generation Languages) Sisältävät relaatiotyyppisen tietokannan pohjautuen tiedostopalvelimeen (fileserver technology) Sisältävät ohjelmointikielen sekä laajan joukon komentoja data-aineiston käsittelyyn (SQL ei välttämättä tuettu!) 40

Paradox:in (DOS) kehitys (vuosi) Kehitysvaihe (1980) Ashton-Tate julkistaa W. Ratliff:in kehittämän dbase 2.0 (1985) Paradox 1.0 (DOS), Dr R.Shostak & Dr R.Schwartz (1987) Paradox 2.0 DOS julkistetaan (1993) Paradox 1.0 (Windows) (1995) Delphi 1.0 (Windows) uusi tuote, korjaa PW:n virheet Lisäksi: Huomatuksia PC:t saavat oman tietokantansa, ei varsinaisesti relaatiokanta. Hieno QBE (Query-by- Example) kielen toteutus PC-lle. Monikäyttäjätuki (LAN), Borland ostaa tuotteen Parhaimmillaan Borland:illa 85% PC:n tietokantamarkkinoista Microsoft liittää Accesstuotteensa osaksi Office pakettia, kaikki muut PC tietokantapaketit häviävät.. 41

Paradox sovelluskehitin (DOS-versio) sisälsi: QueryByExample (hyvä toteutus, mm. every, only tuki). Ohjelmointiympäristön (mm. PAL). Paradox-tietokannan 42

PAL: Paradox Application Language 1/2 Tulkattava kieli laajalla komentopohjalla. V. 1990 InfoWorld antoi PAL osuudelle arvosanan erinomainen (8.loka 1990) Normaalit kontrollirakenteet. Sisennyksillä ei merkitystä. Lisäksi runsaasti komentoja/funktioita 43

PAL: Paradox Application Language 2/2 PAL kuuluu ryhmään 4GL koska: sisältää makrokomentoja, jotka säästävät koodin kirjoitusta. Esimerkiksi komento REPORT T3 tulostaisi T3 väliaikaistaulusta kirjallisen raportin. Kuitenkin ei-systemaattinen, SQL:n puute korvattava esim. komentosarjalla: Menu {Ask} Select {Students} Check Moveto [Dept] Typein Biology Do_It! 44

PAL Esimerkki 1/2 Esimerkki kuvitteelliesta ongelmasta: Samaan kenttään tallennettu virheellisesti sekä Suku että etunimi, (esim. Wiren, Ville ) erotellaan ne omiin kenttiinsä. EDIT Students työtilaan, lukitaan. MOVE [Name] Name ; taulu tuodaan ; siirrytäään kenttään ; ------------------------------------------------------------ ; -erotellaan sukunimi etunimi, oletuksena ; että tieto muotoa Sukunimi, Etunimi separate_names ; kutsutaan 45

PAL esimerkki 2/2 PROC separate_names () PRIVATE last, first ; - automaattinen tyypitys ; -------------------------------------------------------------- ---- ; SCAN aloittaa ensimmäisestä tietueesta. ; MATCH erottaa lainausmerkeissä olevan stringin. SCAN FOR MATCH([],..,.., last, first ) ; Miltäköhän [Last_Name] tämä näyttäisi = last nykypäivän Delphillä? 46 [First_Name] = first ; talleta etunimi

Vastaava Delphi esim. 1/3 PROCEDURE separate_names; // Var st1, last, first : ShortString; nr_rows, i:integer; {-- Students_tbl on komponentti, viittaa --} {-- opiskelijatauluun eli lyhennys --} {--- merkinnästä Students_tbl.RecordCount --} With Students_tbl Do Begin 47

Vastaava Delphi esim. 2/3 {-- aloita ensimmäisestä tietuuesta, lue kenttä --} First; FOR i := 1 To nr_rows Do Begin (* kaikki rivit läpi *) st1 := FieldByName( Name ).AsString ; // oma kirjastofunktio eroittelee suku ja etunimen my_match_strutls (st1, last, first ) ; FieldByName( Last_Name ).AsString := last ; FieldByName( First_Name ).AsString := first ; 48

Vastaava Delphi esim. 3/3 Kutsutaan aliohjelmaa: separate_names; Try Try Students_tbl.Post ; // kommitoidaan Except on E: Exception Do // virheen hallinta ShowMessage(E.ClassName + error found with message + E.Message); End; Finally; // taulu suljettava joka tapauksessa, virhe tai ei. 49

DELPHI: Visuaalinen ohjelmointiväline tietokantasovelluksille. Delphin pääsuunnittelijana Anders Hejlsberg (Tanska), joka kehitti myöhemmin C# kielen Microsoftilla. Olio-ohjelmointia sekä SQL-tuki lähes kaikkiin tietokantoihin (mysql, Oracle). Lomakepohjainen ja tapahtumaohjattu. Tapahtumia paitsi lomakkeille, myös tietokannan tauluille (esim. OnNewRecord, OnFieldModified). Laajennettavuus: valmis koodi taltioidaan 50

Katsaus Delphi ohjelmointiin 1/2 Begin, End kirjoitus ei enää työlästä..(editori) Koodin luettavuus korkea. 51

Katsaus Delphi ohjelmointiin 2/2 Oliopohjaista koodia, jossa SQL-tuki (SQL:n lause käsitellään tietokantapalvelimella). 52

Lyhyt Delphi:n kehityshistoria 1/2 (vuosi) Kehitysvaihe Huomatuksia (1970) Pascal 1.toteutus julki, alustana CDCmainframe (1973) Multum. (vrt. Pascal C- kieli julki julki Skotlannissa n. V. 1972) (U. Of Glasgow) N Wirth (Zürichin korkeakoulu) Ensim. 16-bit toteutus? Tavoite: tehdä Pascalista systeemikieli. (1977) Pascal/R julki Perinteistä Pascalia laajennettu taulu tyypillä (type relation). (1982) Pascal:ista ISO standardi (1983) Turbo Pascal ilmestyy Anders Hejlsberg kehittää oman nopean kääntäjänsä Pascalille. Borland ostaa tuotteen Hejlsbergiltä. 53

Lyhyt Delphi:n kehityshistoria 2/2 (vuosi) Kehitysvaihe (1989) Turbo Pascal 5.5 ilmestyy (1995) Borland julkistaa Delphi 1.0 Huomatuksia Olio tuki, kieltä kutsutaan myös Object Pascal, myös Mac:ille. Ympäristönä 16-bittinen Windows (1997) C++ Builder Borland väittää MS:n ilmestyy, Delphin tuotetta J++ Delphi for pääarkitehteja siirtyy Javaksi. (2001) Microsoftille. Kylix ilmestyy Delphi Linux ympäristöön (2008) Delphi 2009 ilmestyy. Pascaline kieli julki (2009) Delphi 2010 Unicode tuki Delphille. Pascaline yhteensopiva Pascal, lisänä mm. oliot vrt. C# vastine C:lle. 54

Vertailu, Datalog, SQL, Pascal, Delphi (1/2) Lasketaan tietyn opiskelijan keskiarvo kun tiedetään arvosanojen summa ja DATALOG kurssien (olettaen lkm. että jakolasku tuettu) Compute_GPA(SumGrades, NrCourses, GPA) :- GPA = SumGrades / NrCourses. SQL SELECT SumGrades / NrCourses FROM Transcript WHERE Student_ID = 55075B 55

Vertailu, Datalog, SQL, Pascal, Delphi (2/2) Pascal/Delphi Function Compute_GPA (SumGrades:Real;NrCourses : Integer) :Real; BEGIN Compute_GPA := SumGrades Real / NrCourses ; END; Delphi Function Compute_GPA (Const SumGrades:Real ; BEGIN Const NrCourses : Integer) :Real; Result := SumGrades Real / NrCourses ; 56

Lähteitä DATALOG: *Grigoris Karvounarakis, DATALOG, Univ. Of Pennsylvania. * Jack Minker, Invited Keynote: Logic and Databases: A 20 Year Retrospective, Workshop on Logic in Databases, San Miniate, Italy, 1996. * GNU Datalog tulkki: (kirjoitettu Lua:lla!) http:// www.ccs.neu.edu/home/ramsdelltools/datalog/data.h tml * S Constantini, Datalog, Maggioli Informatica. www.cs.unb.ca/~boley/cs6795swt/datalog_stefania_ Constantini_slides.pdf * S Ceri, G Gottlob, L Tanca, What You Always Wanted to Know About Datalog (and Never Dared to Ask), IEEE Transactions on Knowledge & Data Eng, Vol. 1, March 1989, pp. 146-166. 57 57

Lähteitä SQL: *Claudio Fratarcangeli, Technique for Universal Quantification in SQL,Sigmod, Vol. 20, 1991. *Fabien Pascal, SQL and Relational Basics, 1990. * RF Boyce, DD Chamberlin, MM Hammer, WK King III, Specifying Queries as Relational Expressions, IBM Thomas Watson Research Center, 1973. (SQUARE Kieli) * Oral History of Donald Chamberlain, Computer History Museum, July 21, 2009, California. * RDMBS Workshop: Technology through 1983, Recorded 2007, CA. * http://wapedia.mobi/en/sequel http://wapedia.mobi/en/sequel 58