23
Andmebaasid Andmebaas Edu (kordamine)

Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Andmebaasid

Andmebaas Edu

(kordamine)

Page 2: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesande püstitus

• Luua andmebaas õppeainete ning

õppimisega seotud andmete hoidmiseks

ja kasutamiseks.

Page 3: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

ANDMETE FÜÜSILINE MUDEL

Page 4: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration
Page 5: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesanded

Loo andmebaas nimega „edu“ ja järgnevad tabelid oma andmebaasi

CREATE TABLE Faculty( Id INTEGER NOT NULL DEFAULT AUTOINCREMENT PRIMARY KEY, Name VARCHAR(50) NOT NULL, Address VARCHAR(30), DeanId INTEGER, ViceDeanId INTEGER, UNIQUE(Name) );

Page 6: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesanded CREATE TABLE Person( Id INTEGER NOT NULL DEFAULT AUTOINCREMENT PRIMARY KEY, FirstName VARCHAR(30) NOT NULL, LastName VARCHAR(30) NOT NULL, FacultyId INTEGER NOT NULL, SSN VARCHAR(11), UNIQUE(FirstName,LastName)); CREATE TABLE Registration( Id INTEGER NOT NULL DEFAULT AUTOINCREMENT PRIMARY KEY, CourseId INTEGER NOT NULL, PersonId INTEGER NOT NULL, FinalGrade VARCHAR(1));

Page 7: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesanded

CREATE TABLE Lecturer( Id INTEGER NOT NULL DEFAULT AUTOINCREMENT PRIMARY KEY, CoursesId INTEGER, PersonsId INTEGER NOT NULL, Responsible SMALLINT); CREATE TABLE Course( Id INTEGER NOT NULL DEFAULT AUTOINCREMENT PRIMARY KEY, FacultyId INTEGER NOT NULL, Name VARCHAR(50) NOT NULL, Code VARCHAR(20), EAP INTEGER, GradeType VARCHAR(8));

Page 8: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

INPUT näited

INPUT INTO Person FROM 'person.txt' FORMAT

ASCII DELIMITED BY '\x09'

INPUT INTO Faculty FROM 'faculty.txt' FORMAT

ASCII DELIMITED BY '\x09'

Page 9: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesanded

Analoogselt näidetega impordi sama nimega

failidest ka järgnevad tabelid:

• Registration

• Lecturer

• Course

Failid saab alla laadida Moodle’i keskkonnast.

Page 10: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

FK näidis

ALTER TABLE Registration ADD CONSTRAINT

fk_registration_person FOREIGN KEY (PersonId)

REFERENCES Person (Id) ON DELETE

CASCADE

ON UPDATE CASCADE;

Person tabeli kirje kustutamisel kustutatakse tema

registreeringud ainetele

ALTER TABLE Faculty ADD CONSTRAINT

fk_faculty_person_dean FOREIGN KEY (DeanId)

REFERENCES Person (Id) ON DELETE SET

NULL

ON UPDATE CASCADE;

Dekaani kirje kustutamisel ei kustutata tema teaduskonda

Page 11: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesanne Luua lisaks näidetele kuus välisvõtit nii, et

ülemtabeli kirje kustutamisel kustutatakse ka

alamtabeli vastavad kirjed, va kahel

erandjuhul, kui seos tühistatakse:

• Registration → Course

• Lecturer → Person

• Lecturer → Course (tühista seos)

• Course → Faculty

• Faculty (ViceDeanId) → Person (tühista seos)

• Person → Faculty

Page 12: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

PÄRINGUD

Page 13: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Alampäringud

Dekaanid teaduskondadest, kus oli olemas ka

prodekaan:

SELECT * FROM person

WHERE EXISTS (

SELECT * FROM faculty

WHERE faculty.deanId = person.id

AND faculty.viceDeanId IS NOT NULL

)

Page 14: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Mitme tabeli sidumine päringusse

SELECT firstName, lastName, name, faculty.id,

DeanId

FROM person, faculty WHERE firstName = 'Mati'

AND

deanId = person.id

Page 15: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Grupeerimine

Kui palju on iga EAP väärtusega aineid?

SELECT eap, count(*) FROM course GROUP BY eap

Kui palju on igale kursusele registreerunud inimesi?

SELECT name, count(*) FROM course, registration

WHERE course.id = registration.courseId

GROUP BY course.name

Page 16: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Grupeerimine

Kui palju on sama tähega algavaid

perekonnanimesid?

SELECT LEFT(lastName,1) AS pn,

COUNT(*) AS arv

FROM person

GROUP BY pn

ORDER BY arv DESC, pn ASC;

Page 17: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Mitu päringut – üks tulemus

Millist tähte kasutatakse enam nime alguses?

Vaadelda nii pere- kui ka eesnimesid. Järjestada tulemus –

nime algustäht , esinemiste arv ja ‘p’ või ‘e’ (perenimi /

eesnimi) mitte kasvavalt korduste arvu järgi.

SELECT LEFT(lastName,1), COUNT(*),'p' FROM person

GROUP BY LEFT(lastName,1)

UNION ALL

SELECT LEFT(firstName,1), COUNT(*),'e'

FROM person

GROUP BY LEFT(firstName,1)

ORDER BY 2 DESC, 1;

Page 18: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Näited

CREATE VIEW v_oigusteaduskonna_opilased AS

SELECT * FROM person WHERE facultyId = 2

CREATE VIEW v_oigusteaduskonna_opilased_mini

(eesnimi,perenimi) AS

SELECT FirstName, LastName

FROM person WHERE facultyId = 2

CREATE VIEW v_persons_faculty AS

SELECT p.FirstName, p.LastName, f.Name as FacultyName,

f.Address as FacultyAddress

FROM person as p JOIN faculty as f ON (p.facultyId = f.id)

Page 19: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Näited

CREATE VIEW v_faculty_deans (FacultyName,

DeanName, ViceDeanName) AS

SELECT f.Name, d.FirstName+' '+d.LastName as

deanName, v.FirstName+' '+v.LastName as

viceDeanName

FROM Faculty as f

JOIN Person as d ON (f.deanId = d.id)

JOIN Person as v ON (f.viceDeanId = v.id)

ORDER BY f.Name

Page 20: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Näited

Lisame uue kursuse "Sissesjuhatus informaatikasse"

INSERT INTO Course VALUES (101,9,'Sissejuhatus informaatikasse','MTAT.05.074',3,'Arvestus')

Lisame kursusele samad inimesed kes osalevad kursusel

Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade)

SELECT 101, p.id, NULL FROM Course as c JOIN Registration as r ON (c.Id = r.CourseId) JOIN Person as p ON (r.PersonId = p.Id) WHERE c.Name = 'Sissejuhatus

ettevõttemajandusse'

Page 21: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Näited

Kuvame mõlemal kursusel õppivad õpilased

SELECT p.FirstName+' '+p.LastName as

PersonName, c.Name as CourseName

FROM Course as c

JOIN Registration as r ON (r.CourseId = c.Id)

JOIN Person as p ON (r.PersonId = p.Id)

WHERE c.Id = 101 OR c.Id = 75

ORDER BY PersonName

Page 22: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesanded

1. Luua vaade v_persons_atleast_4eap (FirstName, LastName) õpilastest, kes õpivad Matemaatika-informaatikateaduskonna ainetel, mis annavad vähemalt 4 EAP-d

2. Luua vaade v_mostA(FirstName, LastName, NrOfA) õpilastest, kes on saanud A-sid Matemaatika-informaatikateaduskonna ainetest

3. Luua uus kursus "Andmebaaside teooria". Matemaatika-informaatikateaduskond, MTAT.03.998, 6EAP, Arvestus Lisada sinna kõik õpilased, kes said aines Andmebaasid arvestuse (A)

Page 23: Andmebaasid - ut · 2017. 4. 19. · Sissejuhatus ettevõtte majandusse INSERT INTO registration (CourseId,PersonId,FinalGrade) SELECT 101, p.id, NULL FROM Course as c JOIN Registration

Ülesanded

4. Luua vaade v_andmebaasideTeooria õpilastest, kes õpivad ainet andmebaaside teooria. (PersonId, FirstName, LastName)

5. Luua vaade v_top20A (FirstName, LastName, nrOfA) päringule TOP 20 õpilastest, kes on saanud kõige rohkem A-sid

6. Luua vaade v_top20Students(FirstName, LastName, AverageGrade) päringule TOP 20 õpilastest, kelle keskmine hinne on kõige kõrgem.