Presentation is loading. Please wait.

Presentation is loading. Please wait.

Dbvs II paskaita 2015 09 18 dr. R. Pranaitis 1 VU KF IKI 1.

Similar presentations


Presentation on theme: "Dbvs II paskaita 2015 09 18 dr. R. Pranaitis 1 VU KF IKI 1."— Presentation transcript:

1 dbvs II paskaita dr. R. Pranaitis 1 VU KF IKI 1

2 Chapter Name September 98 SQL 2 © Pearson Education Limited, 2004 2

3 Turinys SQL paskirtis ir svarba. Duomenų gavimas - SELECT
Duomenų įterpimas - INSERT Duomenų atnaujinimas - UPDATE Duomenų ištrynimas - DELETE Naujos lentelės sukūrimas - CREATE TABLE 3

4 SQL SQL - pagrindinė reliacinių DBVS kalba SQL ypatumai:
Lengva išmokti Neprocedūrinė kalba – joje apibūdinama kokios in- formacijos reikia, o ne kaip ją gauti SQL yra palyginti laisvos formos kalba SQL naudojami įprasti anglų kalbos žodžiai, pvz., SELECT, INSERT, UPDATE Tinkama daugeliui vartotojų 4

5 SQL svarba SQL yra pirmoji ir vienintelė iki šiol standartinė duomenų bazių kalba, sugebėjusi įgyti platų pripažinimą SQL – tai milžiniškos gamintojų ir vartotojų investicijos FIPS standartas SQL - kitų standartų pagrindas 5

6 SQL paskirtis Padėti vartotojui
Sukurti Duomenų bazę ir lentelių struktūras, Atlikti pagrindines užduotis, pvz., insert, update, delete, Įvykdyti paprastas ir sudėtingas užklausas. SQL užklausos turėtų būti atliekamos mini- maliomis vartotojo pastangomis SQL turėtų būti lengvai išmokstama 6

7 SQL apibūdinimas SQL sudaro 2 pagrindiniai komponentai
DDL – duomenų bazės struktūrai apibrėžti, DML – duomenims išgauti ir atnaujinti. Iki SQL3 SQL nebuvo srauto valdymo komandų SQL – gali būti naudojama interaktyviai arba integruotai aukšto lygio kalboje (pvz., C, C++). 7

8 SQL komandų rašymas SQL sakinį sudaro rezervuoti žodžiai ir varto- tojo apibrėžti žodžiai. Rezervuoti žodžiai: pastovi SQL dalis. Jie turi būti parašyti tiksliai. Perkėlimai į kitą eilutę negalimi. Vartotojo sukurti žodžiai: tai įvairių DB objektų vardai, pvz., lentelių, stulpelių, parodymų [views]. 8

9 SQL komandų rašymas Daugelis SQL sakinio komponentų nepriklauso nuo raidžių registro (case insensitive), išskyrus for pažodinio pobūdžio duomenis Naudojant išplėtotą BNF žymenų formą: - rezerviniai žodžiai - didžiosios raidės - vartotojo sukurti žodžiai – mažosios raidės - | ženklu atskiriamos alternatyvos - {} skliaustai skirti būtiniems elementams - [] skliaustai skirti nebūtiniems elementams - … nurodo nebūtinus pasikartojimus 9

10 Literalai Literalai - tai konstantos SQL sakiniuose
Ne skaičių literalai pateikiami kabutėse (pvz., ‘Londonas’). Skaičių literalai pateikiami be kabučių (pvz., ). 10

11 SELECT sakinys SELECT [DISTINCT | ALL]
{* | [stulpelio_išraiška [AS naujas_vardas]] [,...] } FROM lentelės_pavadinimas [alias] [, ...] [WHERE sąlyga] [GROUP BY stulpelių_sąrašas] [HAVING sąlyga] [ORDER BY stulpelių_sąrašas] 11

12 SELECT sakinys FROM nurodo naudojamas lenteles WHERE eilučių filtras
GROUP BY eilutės grupuojamos pagal stulpelių reikšmes HAVING grupių filtras SELECT nurodo stulpelius, apie kurių reikšmes reikia išgauti informaciją ORDER BY rikiuoja išgautą informaciją 12

13 SELECT sakinys Punktų tvarkos keisti negalima
SELECT ir FROM yra privalomi 13

14 Paprasčiausia užklausa [visi stulpeliai, visos eilutės]
Tarkime, reikia visų video duomenų SELECT katalogo_nr, pavadinimas, kategorija, dienos_renta, kaina, režisieriaus_nr FROM video naudojant * , t.y. ‘visos eilutės’, galima parašyti paprasčiau: SELECT * FROM Video w3schools 14

15 Paprasčiausios užklausos rezultatas
15

16 Kai reikia tik kai kurių stulpelių
Tarkime, reikia visų video katalogoNr, pavadinimų ir nuomos įkainio SELECT katalogoNr, pavadinimas, dienos_nuoma FROM Video w3schools 16

17 Kai kurie stulpeliai, visos eilutės
17

18 DISTINCT naudojimas Tarkime, reikia visų video kategorijų sąrašo
SELECT kategorija FROM Video w3schools 18

19 DISTINCT naudojimas SELECT DISTINCT kategorija
DISTINCT padeda išvengti pasikartojimų: SELECT DISTINCT kategorija FROM Video; 19

20 Skaičiuojamieji laukai
Reikia video nuomos trims dienoms sąrašo SELECT katalogoNr, pavadinimas, dienos_nuoma*3 FROM Video 20

21 Skaičiuojamieji laukai
Pavadinimas stulpeliui suteikiamas naudojant AS SELECT katalogoNr, pavadinimas, dienos_nuoma*3 AS 3d_nuoma FROM video w3schools 21

22 Ieškos sąlyga – palyginimas
Tarkime, reikia darbuotojų, kurių atlyginimas > 10,000 lt, sąrašo SELECT darbNr, vardas, etatas, alga FROM personalas WHERE alga > 10000; w3schools 22

23 Ieška - nurodant sritį Tarp – tai reiškia >= ir <= w3schools
Tarkime, reikia sąrašo darbuotojų, kurių alga yra tarp 45,000 ir 50,000 lt SELECT darbNr, vardas, etatas, alga FROM personalas WHERE alga BETWEEN AND 50000 Tarp – tai reiškia >= ir <= w3schools 23

24 Ieška nurodant sritį darbNr vardas etatas alga 24

25 Ieška – norodant sritį SELECT darbNr, vardas, etatas, alga
Galima naudoti ir NOT BETWEEN Tas BETWEEN daug galios SQL nesuteikia – galima tai atlikti palyginant SELECT darbNr, vardas, etatas, alga FROM personalas WHERE salary >= AND salary <= 50000 Reikšmių sričiai BETWEEN naudingas 25

26 Priklausymo nustatymas
Tarkime, reikia veiksmo ir vaikiškų video sąrašo. SELECT katalogoNr, pavadinimas, kategorija FROM video WHERE kategorija IN (‘veiksmas’, ‘vaikams’); 26

27 Priklausymo nustatymas
Galimas negatyvas (NOT IN) Daug galios IN irgi SQL nesuteikia, nes galima: SELECT katalogoNr, pavadinimas, kategorija FROM Video WHERE kategorija =‘veiksmas’ OR kategorija =‘vaikams’ IN naudingesnis tada, kai reikšmių yra daug w3schools 27

28 Ieška pagal ruošinį Tarkime, ieškoma darbuotojų vardu Sally.
SELECT darbNr, vardas, etatas, alga FROM personalas WHERE vardas LIKE ‘Sally%’; 28

29 Ieška pagal ruošinį SQL naudojami du specialūs ruošinio simboliai:
% : bet koks simbolių skaičius, _ (pabraukimas): betkoks vienas simbolis. LIKE ‘Sally%’ reiškia, kad po penkių pirmų simbolių [Sally] gali būti parašyta bet kas. w3schools 29

30 Ieška pagal NULL Tarkime, reikia dar negrąžintų video sąrašo. Tuomet reikia ieškoti pagal specialų raktinį žodį IS NULL: SELECT nuomos_data, narioNr, videoNr FROM nuomos_sutartis WHERE grazinimo_data IS NULL; w3schools 30

31 Ieška pagal NULL Galima naudotis ir negatyvia versija (IS NOT NULL) 31

32 Rikiavimas pagal stulpelį
Tarkime, reikia visų video sąrašo kainų mažėjimo tvarka SELECT * FROM Video ORDER BY kaina DESC; w3schools 32

33 Rikiavimas pagal stulpelį
33

34 SELECT sakinys – agregatinės funkcijos
ISO SQL apibrėžiamos penkios agregatinės funkcijos: COUNT - randa nurodyto stulpelio reikšmių skaičių SUM - randa nurodyto stulpelio reikšmių sumą AVG - randa nurodyto stulpelio reikšmių vidurkį MIN - randa nurodyto stulpelio mažiausią reikšmę MAX - randa nurodyto stulpelio didžiausią w3schools 34

35 SELECT sakinys – agregatinės funkcijos
Funkcijos skaičiuoja su vienu lentelės stulpeliu ir grąžina vieną reikšmę COUNT, MIN, ir MAX taikomos skaitiniams ir neskaitiniams laukams, o SUM ir AVG tinka tik skaičiams išskyrus COUNT(*), funkcijos pirmiausia eli- minuoja ‘null’ reikšmes ir po to skaičiavimus atlieka su likusiomis reikšmėmis 35

36 SELECT sakinys – agreg. funkcijos
COUNT(*) suskaičiuoja visas lentelės eilutes (ir tuščias, ir dubliuojančias) Dublikatų galima išvengti prieš stulpelio pavadinimą panaudojus DISTINCT DISTINCT neveikia MIN/MAX, bet gali būti naudojamas su SUM/AVG 36

37 COUNT ir SUM naudojimas
Tarkime, reikia viso personalo, kurio alga didesnė už 40,000 lt, skaičiaus ir jų algų bendros sumos. SELECT COUNT(darbNr) AS visi_darbuotojai, SUM(alga) as bendras_atlyginimas FROM personalas WHERE alga> 40000; w3schools 37

38 COUNT ir SUM naudojimas
38

39 MIN, MAX ir AVG naudojimas
Tarkime, reikia rasti minimalų, maksimalų ir vidutinį personalo atlyginimą SELECT MIN(salary) AS min_alga, MAX(salary) AS max_alga, AVG(salary) AS vidutinė_alga FROM personalas w3schools 39

40 GROUP BY naudojimas SUM(alga) AS bendra_alga FROM personalas
Tarkime, reikia rasti kiekvienos šakos personalo skaičių ir bendras jų algas SELECT padalNr, COUNT(darbNr) AS visi_darbuotojai, SUM(alga) AS bendra_alga FROM personalas GROUP BY padalNr ORDER BY padalNr; w3schools 40

41 GROUP BY naudojimas 41

42 Užklausa užklausoje (subužklausa)
Tarkime, reikia rasti darbuotojus, dirbančius padalinyje, kurio adresas ‘8 Jefferson Way’ SELECT darbNo, vardas, etatas FROM personalas WHERE padalNr = (SELECT padalNr FROM padaliniai WHERE street=‘8 Jefferson Way’); 42

43 Subužklausa Vidiniu SELECT nustatomas padalinio, kurio adresas ‘8 Jefferson Way’, numeris (‘B001’). Po to išoriniu SELECT randami tame padalinyje dirbančių darbuotojų duomenys Išorinis SELECT tada tampa SELECT darbNr, vardas, etatas FROM personalas WHERE padalNr = ‘B001’; 43

44 Subužklausa 44

45 Sub užklausa su agreg. funkcija
Tarkime, reikia rasti personalo darbuotojus, kurių atlyginimas yra didesnis už vidutinį SELECT darbNr, vardas, etatas FROM personalas WHERE alga > (SELECT AVG(alga) FROM personalas); 45

46 Sub užklausa su agreg. funkcija
‘WHERE alga > AVG(alga)’ rašyti negalima, nes užklausos pradžioje vidutinė alga nežinoma Panaudojus subužklausą, pirmiausia randama vidutinė alga ( ), o po to išorinis SELECT panaudojamas darbuotojams, kurių alga viršija vidurkį, atlyginimams rasti SELECT staffNo, name, position FROM Staff WHERE salary > ; 46

47 Subužklausa su agreg. funkcija
47

48 Kelių lentelių užklausos !!!
Anksčiau pateiktuose pavyzdžiuose buvo naudojamos tos pačios lentelės subužklausos Kai užklausos stulpeliai yra iš kelių lentelių, naudojama jungtis (join) Jungtis formuojama po FROM įrašant keletą lentelių (lentelių pavadinimai atskiriami kableliais) 48

49 Kelių lentelių užklausos - alias
Kelių lentelių užklausose skirtingų lentelių stulpelių pavadinimai gali sutapti (galimi neapibrėžtumai formuojant užklausą) Tokiais atvejais sukuriami ir naudojami lentelių vardų sinonimai (pvz., FROM video v) 49

50 Paprasta jungtis [Join]
Tarkime, reikia visų video sąrašo su režisierių vardais SELECT katalogoNr, pavadinimas, kategorija, v.rezisieriusNr, rezisierius_vardas FROM video v, rezisierius d WHERE v.rezisieriusNr = d.rezisieriusNr; 50

51 Paprasta jungtis [Join]
Kaip ieškos rezultatas pateikiamos tik tos eilutės, kurioms abiejose lentelėse stul- pelių rezisieriusNr reikšmės yra identiš- kos (v.directorNo = d.directorNo) 51

52 JOIN alternatyvos Join alternatyvos
FROM Video v JOIN Director d ON v.directorNo = d.directorNo FROM Video JOIN Director USING directorNo FROM Video NATURAL JOIN Director w3schools 52

53 4 lentelių jungtis directorName, actorName, character
Tarkime, reikia sąrašo visų video su režisieriais, artistais ir jų vaidmenimis SELECT v.catalogNo, title, category, directorName, actorName, character FROM Video v, Director d, Actor a, Role r WHERE d.directorNo = v.directorNo AND v.catalogNo = r.catalogNo AND r.actorNo = a.actorNo; 53

54 4 lentelių jungtis [Join]
54

55 INSERT naudojimas INSERT INTO lentelės_pavad [ (stulpeliu_sarasas) ] VALUES (duomenu_reiksmiu_sarasas) Stulpeliu_sarasas nebūtinas. Pagal nutylėjimą SQL naudoja visus stulpelius ta tvarka, kuria jie buvo išvardinti kuriant lentelę - CREATE TABLE Duomenu_reiksmiu_sarasas turi atitikti stulpe- lių sąrašą (elementų skaičius, pozicijos, duome- nų tipai) w3schools 55

56 INSERT naudojimas Tarkime, reikia į video lentelė reikia įterpti eilutę INSERT INTO Video VALUES (‘207132’, ‘Die Another Day’, ‘Action’ 5.00, , ‘D1001’ ); 56

57 UPDATE naudojimas TableName – bazės lentelės pavadinimas
UPDATE TableName SET columnName1 = dataValue1 [, columnName2 = dataValue2...] [WHERE searchCondition] TableName – bazės lentelės pavadinimas SET – atnaujinamų stulpelių sąrašas WHERE – nebūtinas datavalue - duomenų reikšmių tipai turi derėti w3schools 57

58 Lentelės eilučių atnaujinimas – UPDATE
Tarkime, reikia 10% padidinti trilerių kategorijos filmų nuomos kainą UPDATE Video SET dienos_nuoma = dienos nuoma*1.1 WHERE kategorija = ‘trileris’; 58

59 DELETE naudojmas DELETE FROM lentelės_pavadinimas [WHERE ieškos_sąlyga] Ieškos_sąlyga neprivaloma. Ją praleidus, bus ištrintos visos lentelės eilutės. Pati lentelė nebus ištrinta. Esant ieškos_sąlygai, bus ištrintos tik ieškos_sąlygą tenkinančios eilutės w3schools 59

60 Eilutės ištrynimas Tarkime, reikia ištrinti įrašą apie video, kurio numeris kataloge: DELETE FROM Video_nuomai WHERE katalogoNr = ‘634817’; 60

61 Duomenų apibrėžimas Du pagrindiniai SQL DDL sakiniai:
CREATE TABLE – naujos lentelės sukūrimas CREATE VIEW – naujo parodymo sukūrimas w3schools 61

62 CREATE TABLE sakinys CREATE TABLE TableName
{(columnName dataType [NOT NULL] [UNIQUE] [DEFAULT defaultOption][,...]} [PRIMARY KEY (listOfColumns),] {[UNIQUE (listOfColumns),] […,]} {[FOREIGN KEY (listOfFKColumns) REFERENCES ParentTableName [(listOfCKColumns)], [ON UPDATE referentialAction] [ON DELETE referentialAction ]] [,…]} 62

63 Stulpelio apibrėžimas
columnName dataType [NOT NULL] [UNIQUE] [DEFAULT defaultOption] SQL palaikomi šie duomenų tipai: 63

64 Klausimai? 64


Download ppt "Dbvs II paskaita 2015 09 18 dr. R. Pranaitis 1 VU KF IKI 1."

Similar presentations


Ads by Google