Presentation is loading. Please wait.

Presentation is loading. Please wait.

LEKSION 6 SQL. Struktura baze. Query-t. Veprimet me bashkesi.

Similar presentations


Presentation on theme: "LEKSION 6 SQL. Struktura baze. Query-t. Veprimet me bashkesi."— Presentation transcript:

1 LEKSION 6 SQL. Struktura baze. Query-t. Veprimet me bashkesi. Funksionet aggregate.

2 SQL Struktura Bazë Veprime me bashkësitë Funksionet përmbledhëse
Vlerat Null Queries të ndërfutura Relacionet e Derivuara Views Modifikimi i Bazës së të dhënave Lidhja e Relacioneve Data Definition Language 1

3 Skema e përdorur në Shembuj

4 Struktura Bazë SQL (Structured Query Language) bazohet në veprimet me bashkësitë dhe relacionet me disa modifikime dhe shtesa Kërkesat për paraqitjen, modifikimin ose fshirjen e të dhënave quhen query (queries) Një SQL query ka formën: select A1, A2, ..., An from r1, r2, ..., rm where P Ai janë atribute ris janë relacione P është një predikat. Kjo query është e njëvlershme me shprehjen e mëposhtme algjebrës relacionale. PROJECT A1, A2, ..., An (RESTRICT (r1 x r2 x x rm) P) Rezultati i një SQL query është një relacion. 2

5 Sintaksa e instruksionit SELECT
SELECT liste_atributesh [INTO emri_tabeles_se_re] FROM liste_tabelash [WHERE kushte_kerkimi] [GROUP BY liste_grupimi] [HAVING kushte_kerkimi] [ORDER BY list_renditjeje [ASC | DESC] ]

6 Seksioni SELECT Seksioni select përmban listën e atributeve që kërkohen në rezultat e query-s i korrespondon veprimit PROJECT të algjebrës relacionale P.sh. Gjej emrat e të gjithë degëve në relacionin loan select branch-name from loan Duke përdorur veprimet e algjebrës relacionale kjo kërkesë do të shkruhej: PROJECT branch-name (loan) Shënim: Gjuha SQL nuk e lejon përdorimin e karakterit ‘-’ në emra, Në këtë rast në projektin real mund të përdorim p.sh., branch_name në vend të branch- name Shënim : Në SQL nuk dallohen shkronjat e vogla nga të shkronjat e mëdha. 3

7 Seksioni SELECT Në SQL lejohet që relacionet si dhe rezultatet e kërkesave të kenë elementë që përsëriten. Për të hequr përsëritjet nga rezultatet vendoset fjala distinct pas select. Gjej emrat e të gjithë degëve në relacionin loan, duke hequr përsëritjet select distinct branch-name from loan Fjala all tregon se përsëritjet nuk duhet të hiqen. select all branch-name from loan 4

8 Seksioni SELECT Karakteri yll (*) në seksionin SELECT do to thotë “të gjithë atributet” select * from loan Seksioni select mund të përmbajë edhe shprehje me veprime aritmetike si +, –, , dhe /, që lidhin ndërmjet tyre konstante ose atribute. Query: select loan-number, branch-name, amount  from loan jep si rezultat një relacion të njëjtë me relacionin loan, përveç se atributi amount është i shumëzuar me 100. 5

9 Seksioni WHERE Seksioni where përcakton kushtet që duhet të plotësohen nga rezultati i korrespondon predikatit të zgjedhjes në algjebrën relacionale. Për të gjetur të gjithë kreditë e marra në degën ‘Perryridge’ me vlerë më të madhe se $ select loan-number from loan where branch-name = ‘Perryridge’ and amount > 1200 Rezultatet e krahasimeve mund të kombinohen me lidhëzat logjike and, or, dhe not. Në krahasime mund të përdoren edhe shprehje aritmetike. 6

10 Seksioni WHERE Në SQL mund të përdoret edhe operatori i krahasimit between P.sh. Gjej numrin e kredisë për kreditë që kanë vlera ndërmjet $90,000 dhe $100,000 (pra, $90,000 dhe $100,000) select loan-number from loan where amount between and 7

11 Seksioni FROM Seksioni from përmban të gjithë relacionet që marrin pjesë në query i korrespondon prodhimit kartezian në algjebrën relacionale. Gjej prodhimin kartezian borrower x loan select  from borrower, loan Gjej emrin, numrin e kredisë dhe vlerën e kredisë për të gjithë klientët që kanë një kredi në degën ‘Perryridge’. select customer-name, borrower.loan-number, amount from borrower, loan where borrower.loan-number = loan.loan-number and branch-name = ‘Perryridge’ 8

12 Veprimi i riemërimit Në SQL është e mundur që të riemërohen si relacionet ashtu edhe atributet duke përdorur fjalën as: emri-i-vjetër as emri-i-ri Gjej emrin, numrin e kredisë dhe vlerën e kredisë për të gjithë klientët; riemëro kolonën loan-number me emrin Kredi-ID. select customer-name, borrower.loan-number as Kredi_ID, amount from borrower, loan where borrower.loan-number = loan.loan-number 9

13 Riemërimi i relacioneve
Gjej emrat e klientëve si dhe numrat e tyre të kredive për klientët që kanë ndonjë kredi në ndonjë degë. select customer-name, T.loan-number, S.amount from borrower as T, loan as S where T.loan-number = S.loan-number Gjej emrat e të gjithë degëve që kanë asete më të mëdha se ndonjë nga degët që ndodhen në Brooklyn. select distinct T.branch-name from branch as T, branch as S where T.assets > S.assets and S.branch-city = ‘Brooklyn’ 10

14 Veprimet me stringat Në SQL përfshihen edhe operatorë që përdoren për krahasimin e stringave. Modeli i stringës përcaktohet nga dy karaktere specialë: Përqind (%). Karakteri % zëvendëson një nënstringë të çfarëdoshme. vijë poshtë (_). Karakteri _ zëvendëson një karakter të çfarëdoshëm. Gjej emrat e të gjithë klientëve në rrugën e të cilëve përfshihet fjala “Main”. select customer-name from customer where customer-street like ‘%Main%’ Kur stringa që kërkohet përmban karakteret specialë atëherë përdoret fjala e gjuhës escape. P.sh. për të gjetur “Main%” like ‘Main\%’ escape ‘\’ Gjuha SQL ka edhe operatorë të tjerë që veprojnë me stringat për të kryer veprime të tilla si lidhja (+) kthimi nga shkronja te vogla ne të mëdha UPPER(shprehje), dhe anasjellas LOWER (shprehje) Gjetjen e gjatësisë së stringës LEN (shprehje) Nxjerrjen e një nënstringe SUBSTRING(shprehje, fillim, gjatesi). Etj.

15 Renditja e rezultateve
Për të realizuar renditjen e rezultateve përdoret seksioni ORDER BY Paraqit në rendin alfabetik emrat e të gjithë klientëve që kanë një kredi në degën Perryridge select distinct customer-name from borrower, loan where borrower loan-number = loan.loan-number and branch-name = ‘Perryridge’ order by customer-name është e mundur që të përdoren edhe fjalët e gjuhës desc për të përcaktuar një renditje në rendin zbritës dhe asc në rendin rritës, për secilin atribut që vendoset në seksionin ORDER BY; kur nuk përdoret asnjëra nga këto fjalë atëherë renditja është në rendin rritës. P.sh. order by customer-name desc

16 Veprimet me bashkësitë
Operatorët union, intersect, dhe except të gjuhës SQL veprojnë mbi relacionet përkatësisht si veprimet e algjebrës relacionale UNION, INTERSECT dhe MINUS Secili nga operatorët e mësipërm i eleminon në mënyrë automatike përsëritjet; Për të mbajtur në rezultat përsëritjet mund të përdoren këto operatorë të ndjekur nga fjala all, pra përkatësisht union all, intersect all dhe except all. Supozojmë se një rresht ndodhet m herë në r dhe n herë në s, atëherë, ky rresht ndodhet: m + n herë në r union all s min(m,n) herë në r intersect all s max(0, m – n) herë në r except all s Shënim: Operatorët intersect dhe except nuk janë pjesë e gjuhës SQL të SQL Server

17 Veprimet me bashkësitë
Gjej të gjithë klientët që kanë kredi, llogari ose të dyja: (select customer-name from depositor) union (select customer-name from borrower) Gjej të gjithë klientët që kanë kredi dhe llogari: (select customer-name from depositor) intersect (select customer-name from borrower) Gjej të gjithë klientët që kanë llogari por jo kredi: (select customer-name from depositor) except (select customer-name from borrower)

18 Funksionet përmbledhëse Aggregate Functions
Këto funksione veprojnë mbi vlerat e një kolone të një relacioni dhe kthejnë një vlerë avg: vlera mesatare min: vlera minimale max: vlera maksimale sum: shuma e vlerave count: numri i vlerave

19 Funksionet përmbledhëse
Gjej vlerën mesatare të balancave në degën Perryridge. select avg (balance) from account where branch-name = ‘Perryridge’ Gjej numrin e rreshtave në relacionin customer. select count (*) from customer Gjej numrin e depozituesve në bankë. select count (distinct customer-name) from depositor

20 Funksionet përmbledhëse – Group By
Gjej numrin e depozituesve për secilën degë. select branch-name, count (distinct customer-name) from depositor, account where depositor.account-number = account.account-number group by branch-name Shënim: Atributet që ndodhen në seksionin select jashtë një funksioni përmbledhës duhet të vendosen patjetër në listën e seksionit group by

21 Funksionet përmbledhëse – Seksioni HAVING
Gjej emrat e të gjitha degëve ku mesatarja e balancave të llogarive është më e madhe se $1,200. select branch-name, avg (balance) from account group by branch-name having avg (balance) > 1200 Shenim: predikatet që vendosen në seksionin having vlerësohen pasi janë formuar grupet, ndërsa predikatet e seksionit where vlerësohen para se të formohen grupet

22 Vlerat NULL Mund të ndodhë që vlerat e disa atributeve të një rreshti të jenë null Vlera null d.m.th. Se vlera është e panjohur ose se nuk ekziston një vlerë. Për të kërkuar vlerat null përdoret predikati is null. P.sh. Gjej të gjithë numrat e kredive në tabelën loan që e kanë null vlerën e atributit amount. select loan-number from loan where amount is null Rezultati i çdo veprimi aritmetik që përfshin vlerën null është null P.sh null jep vlerën null Funksionet përmbledhëse nuk i trajtojnë vlerat null (i injorojnë)

23 Vlerat NULL dhe logjika tre vlerëshe
Çdo krahasim me vlerën null jep si rezultat unknown P.sh. 5 < null ose null <> null ose null = null Logjika tre vlerëshe përdor edhe vlerën logjike unknown: OR: (unknown or true) = true, (unknown or false) = unknown (unknown or unknown) = unknown AND: (true and unknown) = unknown, (false and unknown) = false, (unknown and unknown) = unknown NOT: (not unknown) = unknown Në seksionin where nqs rezultati i predikatit unknown atëherë ai trajtohet sikur të kishte vlerën false

24 Vlerat NULL dhe funksionet përmbledhëse
Gjej totalin e vlerave të kredive select sum (amount) from loan Në këtë rast vlerat null injorohen Rezultati do të jetë null vetëm nqs nuk ka asnjë vlerë të ndryshme nga null Përveç count(*) të gjithë funksionet përmbledhëse i injorojnë vlerat null të atributeve që përmblidhen.

25 Queries të ndërfutura Në SQL brenda një query mund të përdoren disa nën-queries (subqueries). Një subquery është një shprehje e formës select-from- where. Zakonisht subqueries përdoren për të testuar pjesmarrjen në një bashkësi, për krahasimin e bashkësive dhe të kardinalitetit të tyre.

26 Query Shembull Gjej të gjithë klientët që kanë edhe llogari edhe kredi në bankë. select distinct customer-name from borrower where customer-name in (select customer-name from depositor) Gjej të gjithë klientët që kanë kredi por që nuk kanë llogari në bankë select distinct customer-name from borrower where customer-name not in (select customer-name from depositor)

27 Query Shembull Gjej të gjithë klientët që kanë edhe llogari edhe kredi në degën Perryridge select distinct customer-name from borrower, loan where borrower.loan-number = loan.loan-number and branch-name = “Perryridge” and (branch-name, customer-name) in (select branch-name, customer-name from depositor, account where depositor.account-number = account.account-number) Shënim: Kërkesa e mësipërme mund të shkruhet shumë më thjeshtë, por këtu është përdorur si ilustrim.

28 Krahasimi i bashkësive
Gjej të gjitha degët që kanë asete më të mëdha se ndonjë nga degët që ndodhen në Brooklyn. select distinct T.branch-name from branch as T, branch as S where T.assets > S.assets and S.branch-city = ‘Brooklyn’ E njëjta kërkesë duke përdorur operatorin > some select branch-name from branch where assets > some (select assets from branch where branch-city = ‘Brooklyn’)

29 Përkufizimi i operatorit SOME
F <krahasim> some r (t r | (F <krahasim> t) është i vërtetë). Ku <krahasim> mund të jetë:  5 6 (5< some ) = true (5< some ) = false 5 (5 = some ) = true 5 (5  some ) = true (pasi 0  5) 5 (= some)  in Por, ( some)  not in

30 Përkufizimi i operatorit ALL
F <Krahasim> all r (t r | (F < Krahasim > t) është i vërtetë 5 6 (5< all ) = false 6 (5< all ) = true 10 4 (5 = all ) = false 5 4 (5  all ) = true (pasi 5  4 dhe 5  6) 6 ( all)  not in However, (= all)  in

31 Query Shembull Gjej të gjitha degët që kanë asete më të mëdha se të gjitha degët që ndodhen në Brooklyn. select branch-name from branch where assets > all (select assets from branch where branch-city = ‘Brooklyn’)

32 Kontrolli për Relacione boshe
Operatori exists kthen një vlerë true në qoftë subquery që merr si argument nuk kthen një rezultat bosh. exists r r  Ø not exists r  r = Ø

33 Query Shembull Gjej të gjithë klientët që kanë llogari në të gjitha degët që ndodhen në Brooklyn. select distinct S.customer-name from depositor as S where not exists (select branch-name from branch where branch-city = 'Brooklyn' and branch-name not in (select R.branch-name from depositor as T, account as R where T.account-number = R.account-number and S.customer-name = T.customer-name)) (Skema)

34 Views Ofrojnë një mekanizëm që lejon fshehjen e disa të dhënave nga përdoruesit. Për të krijuar një view përdorim komandën: create view v as <shprehje query> ku: <shprehje query> është një query v është emri i views

35 Query Shembull Një view që përmban të gjitha degët dhe klientët e tyre
create view all-customer as (select branch-name, customer-name from depositor, account where depositor.account-number = account.account-number) union (select branch-name, customer-name from borrower, loan where borrower.loan-number = loan.loan-number) Gjej të gjithë klientët e degës Perryridge select customer-name from all-customer where branch-name = ‘Perryridge’

36 Relacione të derivuara
Gjej mesataren e balancave për degët që e kanë këtë mesatare të balancave më të madhe se $1200. select branch-name, avg-balance from (select branch-name, avg (balance) from account group by branch-name) as result (branch-name, avg-balance) where avg-balance > 1200 Vërejmë se në këtë rast nuk është nevoja të përdoret seksioni having, pasi në seksionin from është llogaritur relacioni i përkohshëm (view) result, dhe atributet e tij mund të përdoren direkt në seksionin where.

37 Modifikimi i Bazës së të Dhënave – DELETE
Fshij të gjithë rreshtat e llogarive në degën Perryridge delete from account where branch-name = ‘Perryridge’ Fshij të gjitha llogaritë në çdo degë që ndodhet në qytetin Needham. delete from account where branch-name in (select branch-name from branch where branch-city = ‘Needham’) delete from depositor where account-number in (select account-number from branch, account where branch-city = ‘Needham’ and branch.branch-name = account.branch-name) (Skema)

38 Query Shembull Fshij rreshtat e llogarive me balancë më të vogël se mesatarja e bankës. delete from account where balance < (select avg (balance) from account) Problem: kur fshihen rreshta nga tabela account, mesatarja e balancave ndryshon Zgjidhja në SQL: 1. Së pari, llogaritet avg-balance dhe gjenden të gjithë rreshtat që duhen fshirë 2. Pastaj, fshihen rreshtat e gjetur(pa kryer rillogaritjen e avg)

39 Modifikimi i Bazës së të Dhënave – INSERT
Shto një rresht të ri në account insert into account values (‘A-9732’, ‘Perryridge’,1200) ose në mënyrë të njëvlefshme insert into account (branch-name, balance, account-number) values (‘Perryridge’, 1200, ‘A-9732’) Shto një rresht të ri në account me balancë me vlerën null insert into account values (‘A-777’,‘Perryridge’, null)

40 Modifikimi i Bazës së të Dhënave – INSERT
Krijoni si një dhuratë për të gjithë klientët që kanë kredi në degën Perryridge, një llogari me $200. Përdorni numrin e kredisë si numër llogarie për llogaritë e reja insert into account select loan-number, branch-name, from loan where branch-name = ‘Perryridge’ insert into depositor select customer-name, loan-number from loan, borrower where branch-name = ‘Perryridge’ and loan.account-number = borrower.account-number Rezultati i seksionit select-from gjendet para se të fillojë shtimi i rreshtave (për këtë arsye mund të përdoren edhe instruksione të tilla si insert into tabela1 select * from tabela1

41 Modifikimi i Bazës së të Dhënave – UPDATE
Rrit vlerën e llogarive me balancë mbi $10,000 me 6%, ndërsa të gjithë të tjerët me 5%. Shkruajmë dy instruksione update: update account set balance = balance  where balance > 10000 update account set balance = balance  where balance  10000 Rradha e instruksioneve në këtë rast është e rëndësishme

42 Lidhja e Relacioneve (Tabelave)
Veprimet e lidhjes (Join) marrin në hyrje dy relacione dhe kthejnë si rezultat një relacion tjetër. Veprimet e lidhjes zakonisht përdoren në seksionin from Kushti i lidhjes – përcakton se cilët rreshta në dy relacionet kanë vlera të njëjta, dhe se cilët atribute janë prezent në rezultatin e lidhjes. Tipi i lidhjes – përcakton se si trajtohen rreshtat secilit relacion që nuk kanë vlera të njëjta me asnjë rresht të relacionit tjetër(mbi bazën e kushtit të lidhjes). Tipi i lidhjes Kushti i lidhjes inner join left outer join right outer join full outer join natural on <predikat> using (A1, A2, ..., An)

43 Lidhja e Relacioneve– Të dhëna për Shembujt
Relacioni loan amount 3000 4000 1700 branch-name Downtown Redwood Perryridge loan-number L-170 L-230 L-260 Relacioni borrower customer-name loan-number Jones Smith Hayes L-170 L-230 L-155 Shënim: nuk ka informacion në borrower për L-260 dhe nuk ka informacion në account për L-155

44 Lidhja e Relacioneve – Shembuj
loan inner join borrower on loan.loan-number = borrower.loan-number branch-name amount Downtown Redwood 3000 4000 customer-name loan-number Jones Smith L-170 L-230 loan left outer join borrower on loan.loan-number = borrower.loan-number branch-name amount Downtown Redwood Perryridge 3000 4000 1700 customer-name loan-number Jones Smith null L-170 L-230 L-260

45 Lidhja e Relacioneve – Shembuj
loan natural inner join borrower branch-name amount Downtown Redwood 3000 4000 customer-name Jones Smith loan-number L-170 L-230 loan natural right outer join borrower branch-name amount Downtown Redwood null 3000 4000 customer-name Jones Smith Hayes loan-number L-170 L-230 L-155

46 Lidhja e Relacioneve – Shembuj
loan full outer join borrower using (loan-number) branch-name amount Downtown Redwood Perryridge null 3000 4000 1700 customer-name Jones Smith Hayes loan-number L-170 L-230 L-260 L-155 Gjej të gjithë klientët që kanë ose llogari ose kredi (por jo të dy) në bankë. select customer-name from (depositor natural full outer join borrower) where account-number is null or loan-number is null

47 Data Definition Language (DDL)
Lejon jo vetëm krijimin e një bashkësie relacionesh por gjithashtu përcaktimin e informacioneve për secilin relacion, ku përfshihen: Skema e secilit relacion. Domain-i i vlerave që i shoqërohet çdo atributi. Kufizimet e integritetit Bashkësia e indekseve që të çdo relacioni. Siguria dhe autorizimi i informacionit për secilin relacion. Struktura fizike e ruajtjes në disk e secilit relacion.

48 Tipet e Domain-eve në SQL
char(n). Stringë me gjatësi fikse, që përcaktohet nga n. varchar(n). Stringë me gjatësi të ndryshueshme, me gjatësi maksimale të përcaktuar nga n. int. Integer. smallint. Small integer. numeric(p,d). Numër me numër të përcaktuar shifrash dhjetore, ku përdoruesi përcakton numrin e shifrave me p, dhe me d numrin e shifrave pas presjes. real, double. Numër me numër të ndryshueshëm shifrash dhjetore. float(n). Numër me numër të ndryshueshëm shifrash dhjetore, ku përdoruesi përcakton numrin e shifrave me n. Vlerat Null lejohen në çdo domain. Kur një atribut deklarohet si not null atëherë këtij atributi nuk mund ti jepet vlera null. Sipas standartit SQL-92 instruksioni create domain krijon tipe të rinj të dhënash create domain emer_personi char(20) not null

49 Tipet Date/Time në SQL date. Data, që përmbajnë vit (4 shifra), muaj dhe datë P.sh. date ‘ ’ time. Ora në një ditë, që përmban orën, minutat dhe sekondat. P.sh. time ’09:00:30’ time ’09:00:30.75’ timestamp: datë dhe ora e ditës P.sh. timestamp ‘ :00:30.75’ Interval: periudhë kohe P.sh. Interval ‘1’ ditè Duke zbritur ndërmjet vlerave të tipeve date/time/timestamp merret një vlerë e tipit interval Vlerat Interval mund të mblidhen (zbriten) me vlerat e tipit date/time/timestamp Nga vlerat e tipit date/time/timestamp mund të merren vlerat përbërëse me anë të funksioneve si YEAR, MONTH, DAY, DATEPART, DATENAME P.sh. Year(r.starttime) Vlerat e tipit string mund të konvertohen në një nga tipet date/time/timestamp me anë të funksionit cast P.sh. cast (<shprehje-string> as date)

50 Komanda CREATE TABLE Në SQL me anë të komandës create table mund krijohet një relacion: create table r (A1 D1, A2 D2, ..., An Dn, (integrity-constraint1), , (integrity-constraintk)) r është emri i relacionit çdo Ai është një emër atributi në skemën e relacionit r Di është tipi i të dhënave i atributit Ai . (domain) Shembull: create table branch (branch-name char(15) not null, branch-city char(30), assets integer)

51 Kufizimet e Integriteti në CREATE TABLE
not null primary key (A1, ..., An) check (P), ku P èshtè njè predikat Shembull: Deklaro branch-name si çelës primar për branch dhe siguro që vlerat e assets të jenë jo negative. create table branch (branch-name char(15), branch-city char(30) assets integer, primary key (branch-name), check (assets >= 0)) Deklarimi i kufizimit primary key në një atribut e siguron edhe kufizimin not null që nga SQL-92, ndërsa në SQL-89 duhet të shkruhet

52 Komandat DROP dhe ALTER TABLE
Komanda drop table fshin të gjithë informacionin që lidhet me një relacion nga baza e të dhënave. Komanda alter table përdoret për të shtuar atribute në një relacion ekzistues. alter table r add A D ku A është emri i atributit që do të shtohet në r ndërsa D është domain-i i A. Të gjithë rreshtave në tabelë i jepet vlera null për atributin e ri. Komanda alter table mund të përdoret edhe për të hequr atribute nga relacioni alter table r drop A ku A është emri i një atributi në relacionin r Në shumë dbms heqja e një atributi nuk lejohet

53 SQL DDL për një pjesë të Bazës së të dhënave të shembullit të Bankës


Download ppt "LEKSION 6 SQL. Struktura baze. Query-t. Veprimet me bashkesi."

Similar presentations


Ads by Google