You are on page 1of 75

KAPITULLI 8

SQL-99: Percaktimi i Skemes,


Kufizimet Kryesore, dhe
Queries

Percaktimi i te Dhenes,
Kushtezimet, dhe Ndryshimet e
Skemes

Perdoret per CREATE, DROP, dhe


ALTER pershkrimet e tabelave
(relacioneve) te nje databaze.

CREATE TABLE

Specifikon nje relacion te ri baze duke i dhene atij nje


emer, dhe duke specifikuar secilin prej atributeve te
tij dhe tipet e tyre te te dhenave (INTEGER, FLOAT,
DECIMAL(i,j), CHAR(n), VARCHAR(n))
Per nje atribut mund te jete specifikuar nje kufizim
NOT NULL
CREATE TABLE DEPARTAMENTI
( DEMER VARCHAR(10) NOT NULL,
DNUMER INTEGER NOT NULL,
MGID CHAR(9),
MGDATFILLIM CHAR(9) );
3

CREATE TABLE

Ne SQL2, mund te perdoret komanda CREATE TABLE per te specifikuar


atributet primary key , secondary keys, dhe referential integrity
constraints (foreign keys).
Atributet Key mund te specifikohen nepermjet frazave PRIMARY KEY
dhe UNIQUE
CREATE TABLE DEPT
(
DEMER VARCHAR(10) NOT NULL,
DNUMER INTEGER NOT NULL,
MGID CHAR(9),
MGDATFILLIM CHAR(9),
PRIMARY KEY (DNUMER),
UNIQUE (DEMER),
FOREIGN KEY (MGID) REFERENCES PUN );

DROP TABLE

Perdoret per te hequr nje relacion (base


table) dhe percaktimin e tij
Relacioni nuk mund te perdoret me pas
ne queries, updates, ose cdo komande
tjeter meqenese pershkrimi i tij nuk
ekziston me
Shembull:
DROP TABLE VARTES;
5

ALTER TABLE

Perdoret per te shtuar nje atribut tek nje nga relacionet baze
Atributi i ri do te kete NULL-e ne te gjithe tuples te relacionit
djathtas komandes qe ekzekutohet; qe ketej kushtezimi NOT
NULL nuk lejohet per nje atribut te tille
Shembull:
ALTER TABLE PUNONJESI ADD DETYRA
VARCHAR(12);

Perdoruesit e databazes munden akoma te fusin nje vlere per


atributin e ri DETYRA per cdo tuple te PUNONJESI. Kjo mund te
realizohet duke perdorur komanden UPDATE .

Vecorite Suplementare te SQL-2


dhe SQL-99

CREATE SCHEMA
REFERENTIAL INTEGRITY
OPTIONS

CREATE SCHEMA

Specifikon nje skeme te re databaze


duke i dhene asaj nje emer

REFERENTIAL INTEGRITY
OPTIONS

Ne mund te specifikojme RESTRICT, CASCADE, SET NULL ose


SET DEFAULT ne referential integrity constraints (foreign keys)
CREATE TABLE DEPT
(
DEMER VARCHAR(10) NOT NULL,
DNUMER INTEGER NOT NULL,
MGID CHAR(9),
MGDATFILLIM CHAR(9),
PRIMARY KEY (DNUMER),
UNIQUE (DEMER),
FOREIGN KEY (MGID) REFERENCES PUN
ON DELETE SET DEFAULT ON UPDATE
CASCADE );

REFERENTIAL INTEGRITY
OPTIONS (vazhdim)
CREATE TABLE
PUN
(
EMRI VARCHAR(30) NOT NULL,
ID CHAR(9),
DATELINDJA DATE,
DNO INTEGER DEFAULT 1,
SUPERVID CHAR(9),
PRIMARY KEY (ID),
FOREIGN KEY (DNO) REFERENCES DEPT
ON DELETE SET DEFAULT ON UPDATE CASCADE,
FOREIGN KEY (SUPERVID) REFERENCES PUN
ON DELETE SET NULL ON UPDATE CASCADE );

10

Tipe te Tjera te Dhenash


ne SQL2 dhe SQL-99

DATE:
Perbehet prej year-month-day ne formatin yyyy-mm-dd
TIME:
Perbehet prej hour:minute:second ne formatin hh:mm:ss
TIME(i):
Perbehet prej hour:minute:second plus i nje shifer shtese qe
specifikon fraksionet e nje sekonde
formati eshte hh:mm:ss:ii...i
TIMESTAMP:
Ka njekohesisht komponentet DATE dhe TIME

11

Tipe te Tjera te Dhenash


ne SQL2 dhe SQL-99

INTERVAL:
Specifikon nje vlere relative me teper se nje
vlere absolute
Mund te jete intervale DAY/TIME ose
intervale YEAR/MONTH
Mund te jete pozitive ose negative kur
mblidhet ose zbritet nga nje vlere absolute,
rezultati eshte nje vlere absolute.
12

Retrieval Queries ne SQL

SQL ka nje statement baze per perzgjedhjen (retrieving) e


informacionit nga nje databaze; SELECT statement
Ky nuk eshte i njejte si veprimi SELECT i algjebres relacionale
Dallimi kryesor midis SQL dhe modelit relacional formal:
SQL lejon nje tabele (relacion) te kete dy ose me teper tuples
qe jane identike ne te gjitha vlerat e atributeve te tyre.
Qe ketej, nje relacion SQL (table) eshte nje multi-set (shpesh i
quajtur nje bag) tuples; nuk eshte nje bashkesi tuples
Relacionet SQL mund te kufizohen per tu krijuar duke
specifikuar atributet PRIMARY KEY ose UNIQUE , ose duke
perdorur opsionin DISTINCT ne nje query

13

Retrieval Queries ne SQL


(vazhd.)

Forma kryesore e SQL SELECT statement quhet nje mapping


ose nje SELECT-FROM-WHERE bllok
SELECT <attribute list>
FROM <table list>
WHERE <condition>
<attribute list> eshte nje liste e emrave te atributeve vlerat e
te cileve do te perzgjidhen nga query
<table list> eshte nje liste e emrave te relacioneve te
nevojshme per te kryer query-n
<condition> eshte nje shprehje e kushtezuar (Boolean) qe
identifikon tuples qe duhet te perzgjidhen nga query

14

Skema Relacionale e Databazes


KOMPANIA

15

Databaza KOMPANIA e Populluar

16

Databaza KOMPANIA e Populluar

17

Databaza KOMPANIA e Populluar

18

Queries
te thjeshta ne SQL

Queries baze ne SQL i korrespondojne perdorimit te veprimeve


SELECT, PROJECT, dhe JOIN te algjebres relacionale
Te gjithe shembujt e meposhtem perdorin databazen KOMPANIA
Shembull i nje simple query ne nje relacion
Query 0: Te gjendet datelindja e punonjesit emri i te cilit eshte Ilir
Mali'.
Q0: SELECT DatLindja
FROM PUNONJESI
WHERE EMRI=Ilir AND MBIEMRI=Mali
Ne menyre te ngjashme me ciftin SELECT-PROJECT te veprimeve te
algjebres relacionale; Fjala SELECT- specifikon atributet e projektuara
dhe fjala WHERE specifikon kushtet e perzgjedhjes
Megjithate, rezultati i query mund te permbaje duplicate tuples

19

Queries
te thjeshta ne SQL
(vazhd.)

Query 1: Jepni emrin e te gjithe punonjesve qe punojne ne


departamentin e Kerkimit.
Q1: SELECT EMRI, MBIEMRI
FROM PUNONJESI, DEPARTAMENTI
WHERE DEMER=Kerkimit AND
DNUMER=DNO
Eshte i njejte me sekuencen SELECT-PROJECT-JOIN te
veprimeve te algjebres relacionale
(DEMER=Kerkimit') eshte nje selection condition
(korrespondues I nje veprimi SELECT ne algjebren relacionale)
(DNUMER=DNO) eshte nje join condition (korrespondues I nje
veprimi JOIN ne algjebren relacionale)

20

Queries
te thjeshta ne SQL
(vazhd.)

Query 2: Per cdo projekt me vendodhje ne Tirane, listoni


numrin e projektit, numrin e departamentit qe e kontrollon, dhe
mbiemrin dhe datelindjen e manaxherit.
Q2: SELECT PNUMER, DNUMER, MBIEMRI, DATLINDJA
FROM PROJEKT, DEPARTMENTI, PUNONJESI
WHERE DNUMER=DNUMER AND MGID=ID
AND PVENDODHJE=Tirane'
Ne Q2, kemi dy join conditions
Join condition DNUMER=DNUMER lidh nje projekt me
departamentin e tij te kontrollit
Join condition MGID=ID lidh departamentin e kontrollit me
punonjesin qe e manaxhon departamentin

21

Aliases, * dhe DISTINCT,


Mungesa e fjales WHERE
Ne SQL, ne mund te perdorim te njejtin emer
per dy (ose me teper) atribute sa kohe qe
atributet jane ne relacione te ndryshme
Nje query qe i referohet dy ose me teper
atributeve me te njejtin emer percakton
emrin e atributit nepermjet emrit te relacionit
duke vene emrin e relacionit perpara emrit te
atributit
Shembull:
PUNONJESI.MBIEMRI,
DEPARTAMENTI.DEMER

22

ALIASES

Disa queries duhet ti referohen te njejtit relacion dy here


Ne kete rast, per emrin e relacionit perdoren aliases
Query 8: Per cdo punonjes, gjeni emrin e punonjesit dhe emrin
e supervizorit te tij te drejtperdrejte.
Q8: SELECT P.EMRI, P.MBIEMRI, S.EMRI, S.MBIEMRI
FROM PUNONJESI P S
WHERE P.SUPERV.ID=S.ID
Ne Q8, emrat alternative P dhe S te relacioneve quhen aliases
ose variabla tuple per relacionin PUNONJESI
Ne mund ti mendojme P dhe S si dy kopje te ndryshme te
PUNONJESI; P paraqet punonjesit ne rolin e te supervizuareve
dhe
S paraqet punonjesit ne rolin e supervizoreve
23

ALIASES (vazhd.)

Aliasing mund te perdoret gjithashtu ne cdo


SQL query per komoditet
Mund te perdoret gjithashtu fjala celes AS
per te specifikuar aliases
Q8: SELECT P.EMRI, P.MBIEMRI,
S.EMRI,
S.MBIEMRI
FROM PUNONJESI AS P, PUNONJESI
AS S
WHERE P.SUPERVID=S.ID
24

MOS SPECIFIKIMI I Fjales


WHERE

Nje mungese e fjales WHERE tregon mos pasje


kushti; keshtu qe, do te perzgjidhen te gjithe tuples
te relacioneve te percaktuara pas fjales FROM
Kjo eshte ekuivalente me kushtin WHERE TRUE
Query 9: Jepni vlerat e ID per te gjithe punonjesit.
Q9: SELECT ID
FROM PUNONJESI
Ne se pas fjales FROM eshte specifikuar me teper se
nje relacion dhe nuk ka join condition, atehere do te
perzgjidhet PRODUKTI CARTEZIAN i tuples

25

MOS SPECIFIKIMI I Fjales


WHERE (vazhd.)

Shembull:
Q10: SELECT ID, DEMER
FROM PUNONJESI, DEPARTAMENTI
Eshte shume e rendesishme te specifikohet
cdo kusht selection dhe join ne fjalen
WHERE; ne se nje kusht i tille eshte nuk
vihet, mund te merren si rezultat relacione jo
korrekte dhe shume te gjata.
26

PERDORIMI I *

Per te perzgjedhur te gjitha vlerat e atributeve te


tuples te selektuara, perdoret simboli * , i cili
vendoset per te gjitha atributet
Shembuj:
Q1C: SELECT *
FROM PUNONJESI
WHERE DNO=5
Q1D: SELECT *
FROM PUNONJESI, DEPARTAMENTI
WHERE DEMER=Kerkimit' AND DNO=DNUMER
27

Perdorimi I DISTINCT

SQL nuk e trajton nje relacion si nje bashkesi; mund te shfaqen


duplicate tuples
Per te eliminuar duplicate tuples ne nje rezultat query, perdret
fjala celes DISTINCT
Per shembull, rezultati i Q11 mund te kete vlera te dubluara per
PAGEN nderkohe qe Q11A nuk ka asnje vlere te dubluar
Q11: SELECT PAGA
FROM PUNONJESI
Q11A: SELECT DISTINCT PAGA
FROM PUNONJESI

28

VEPRIMET E BASHKESIVE

SQL ka te perfshira ne menyre direkte disa veprime


te bashkesise
Ekziston nje veprim bashkimi (UNION), dhe ne disa
versione te SQL ekzistojne veprimet e diferences
(MINUS) dhe te prerjes (INTERSECT)
Relacionet rezultat te ketyre veprimeve jane bashkesi
tuples; duplicate tuples eliminohen nga rezultati
Veprimet e bashkesise zbatohen vetem mbi
relacionet union compatible; te dy relacionet duhet te
kene te njejtat atribute dhe atributet duhet te
shfaqen ne te njejtin rend
29

VEPRIMET E BASHKESIVE
(vazhd.)

Query 4: Beni nje liste te te gjithe numrave te projekteve per


projektet ne te cilat ben pjese nje punonjes mbiemri i te cilit
eshte Mali si punonjes ose si manaxher i departamentit qe
kontrollon projektin.
Q4: (SELECT PNUMER
FROM PROJEKT, DEPARTAMENTI, PUNONJESI
WHERE DNUMERP=DNUMER AND MGID=ID
AND MBIEMRI=Mali')
UNION (SELECT PNUMER
FROM PROJEKT, PUNON_NE, PUNONJESI
WHERE PNUMER=PRNUMER AND PID=ID AND
MBIEMRI=Mali')

30

NESTING i QUERIES

Nje SELECT query e plote, e quajtur nested query , mund te


jete e specifikuar brenda fjales WHERE te nje query tjeter, e
quajtur outer query
Disa nga querite e meparshme mund te specifikohen ne nje
forme alternative duke perdorur nesting
Query 1: Jepni emrin dhe datlindjen e te gjithe punonjesve qe
punojne per departamentin e Kerkimit.
Q1: SELECT EMRI, MBIEMRI, DATLINDJA
FROM PUNONJESI
WHERE DNO IN (SELECT DNUMER
FROM DEPARTAMENTI
WHERE DEMER=Kerkimit' )

31

NESTING I QUERIES
(vazhd.)

Nested query selekton numrin e departamentit te Kerkimit


Outer query zgjedh nje tuple PUNONJESI nese vlera DNO e tij
eshte ne rezultatin e ndonje nested query
Operatori i krahasimit IN krahason nje vlere v me nje bashkesi
(ose multi-set) vlerash V, dhe vlereson ne TRUE ne se v eshte
nje nga elementet ne V.
Ne pergjithesi, ne mund te kemi disa nivele te nested queries
Nje reference tek nje atribut i shprehur qarte i referohet
relacionit te deklaruar ne nested query me te thelle
Ne kete shembull, nested query nuk eshte e lidhur me outer
query

32

CORRELATED NESTED
Queries

Ne se nje kusht ne fjalen WHERE te nje nested query i referohet nje


atributi te nje relacioni te deklaruar ne outer query , dy queries
thuhet se jane correlated
Rezultati i nje correlated nested query eshte i ndryshem per cdo
tuple (ose kombinim tuples) te relacionit (relacioneve) outer query
Query 12: Jepni emrin e cdo punonjesi qe ka nje vartes me te
njejtin emer si punonjesi.
Q12: SELECT P.EMER, P.MBIEMRI
FROM PUNONJESI AS P
WHERE P.ID IN (SELECT PID
FROM VARTES
WHERE PID=P.ID AND
P.EMRI=VARTES_EMER)

33

CORRELATED NESTED
Queries
(vazhd.)

Ne Q12, nested query ka nje rezultat te ndryshem per cdo tuple ne


outer query
Nje query e shkruajtur me blloqet nested SELECT... FROM... WHERE...
dhe duke perdorur operatoret e krahasimit = ose IN mundet gjithmone
te shprehet si nje bllok i vetem. Per shembull, Q12 mund te shkruhet si
ne Q12A
Q12A: SELECT P.EMRI, P.MBIEMRI
FROM PUNONJESI P, VARTES V
WHERE P.ID=V.PID AND
P.EMRI=V.VARTES_EMER
SQL origjinale ka gjithashtu nje operator krahasimi CONTAINS, i cili
perdoret ne lidhje me nested correlated
Ky operator eshte larguar nga gjuha pasi ka veshtiresi ne
implementimin e tij ne menyre eficiente

34

CORRELATED NESTED
Queries
(vazhd.)

Shume implementime te SQL nuk e kane kete operator


Operatori CONTAINS krahason dy bashkesi vlerash, dhe kthen TRUE nese nje
bashkesi permban te gjitha vlerat ne bashkesine tjeter (na kujton veprimin
division te algjebres).
Query 3: Gjeni emrin e cdo punonjesi qe punon te te gjitha projektet e
kontrolluara nga departamenti me numer 5.
Q3: SELECT EMRI, MBIEMRI
FROM PUNONJESI
WHERE ( (SELECT PRNUMER
FROM PUNON_NE
WHERE ID=PID)
CONTAINS
(SELECT PNUMER
FROM PROJEKT
WHERE DNUMER=5) )

35

CORRELATED NESTED
Queries
(vazhd.)

Ne Q3, nested query e dyte, qe nuk eshte


correlated me outer query, gjen numrat e
projekteve te te gjithe projekteve te
kontrolluara nga departamenti 5
Nested query i pare , qe eshte correlated,
gjen numrat e projekteve ne te cilat punojne
punonjesit, i cili eshte i ndryshem per cdo
tuple te PUNONJESI per shkak te correlation

36

FUNKSIONI EXISTS

EXISTS perdoret per te kontrolluar nese


rezultati i nje correlated nested query
eshte bosh (nuk permban tuples) ose jo
Ne mund ta formulojme Query 12 ne
nje forme alternative qe perdor EXISTS
si Q12B me poshte

37

FUNKSIONI EXISTS
(vazhd.)

Query 12: Gjeni emrin e cdo punonjesi qe ka


nje vartes me te njejtin emer si punonjesi.
Q12B: SELECT EMRI, MBIEMRI
FROM PUNONJESI
WHERE EXISTS (SELECT *
FROM VARTES
WHERE ID=PID AND
EMRI=VARTES_EMER)
38

FUNKSIONI EXISTS
(vazhd.)

Query 6: Gjeni emrat e punonjesve qe nuk kane


vartes.
Q6:

SELECT EMRI, MBIEMRI


FROM PUNONJESI
WHERE NOT EXISTS (SELECT *
FROM VARTES
WHERE ID=PID)
Ne Q6, correlated nested query gjen te gjithe
tuples te VARTES qe lidhen me nje PUNONJES tuple.
Ne se nuk ekziston asnje, atehere zgjidhet ai tuple i
PUNONJESI.
39

BASHKESITE EXPLICIT-e

Eshte e mundur gjithashtu te perdoret nje bashkesi


explicit-e (e numerueshme) vlerash ne fjalen
WHERE ne vend qe te perdoret nje nested query
Query 13: Gjeni ID ne e te gjithe punonjesve qe
punojne ne projektet me numer 1, 2, ose 3.
Q13: SELECT DISTINCT PID
FROM PUNON_NE
WHERE PRNUMER IN (1, 2, 3)

40

NULL-et NE SQL QUERIES

SQL pranon queries qe kontrollojne ne se nje vlere eshte NULL


(mungon ose e papercaktuar ose jo e aplikueshme)
SQL perdor IS ose IS NOT per te krahasuar NULL-et pasi e
konsideron cdo vlere NULL te ndryshme nga vlerat e tjera NULL,
keshtu qe krahasimi i barazise nuk eshte i pershtatshem.
Query 14: Geni emrat e te gjithe punonjesve qe nuk kane
supervizore.
Q14: SELECT EMRI, MBIEMRI
FROM PUNONJESI
WHERE SUPERVID IS NULL
Shenim : Ne se eshte specifikuar nje join condition , tuples me
vlera NULL per atributet join nuk jane perfshire ne rezultat

41

Vecoria e Joined Relations


ne SQL

Mund te specifikohet nje "joined relation" ne fjalen


FROM
Duket si cdo relacion tjeter por eshte rezultat i nje
join
Lejon perdoruesin te specifikoje tipe te ndryshme te
joins (regular "theta" JOIN, NATURAL JOIN, LEFT
OUTER JOIN,
RIGHT OUTER JOIN, CROSS JOIN, etj)
Ky konstrukt mund te jete me i thjeshte per tu
kuptuar se sa perzierja se bashku e te gjithe select
join conditions ne fjalen WHERE.
42

Vecoria e Joined Relations


ne SQL (vazhd.)

Konsiderojme query Q1 qe gjen emrin e cdo


punonjesi qe punon per departamentin e Kerkimit.
Mund te jete me e thjeshte se pari te specifikohet nje
join e PUNONJESI dhe DEPARTAMENTI, dhe me pas
te zgjidhen tuples dhe atributet e deshiruara.
Q1A: SELECT EMRI, MBIEMRI
FROM (PUNONJESI JOIN DEPARTAMENTI ON
DNO=DNUMER)
WHERE DEMER=Kerkimit

43

Vecoria e Joined Relations


ne SQL (vazhd.)

Koncepti i nje joined table lejon gjithashtu


perdoruesin te specifikoje tipe te ndryshme te
join, si NATURAL JOIN, dhe tipe te ndryshme
te OUTER JOIN.
Ne nje NATURAL JOIN ne dy relacione R dhe
S, nuk specifikohet join condition; krijohet
prej R dhe S nje (equi)join condition i
nenkuptuar per cdo cift atributesh me te
njejtin emer.
Cdo cift i tille atributesh perfshihet vetem nje
here ne relacionin rezultat.
44

Vecoria e Joined Relations


ne SQL (vazhd.)

Ne se emrat e atributeve join nuk jane te


njejte ne relacionet baze, eshte e mundur te
riemertohen atributet, dhe me pas te
zbatohet nje NATURAL JOIN.
Q1B : SELECT EMRI, MBIEMRI
FROM (PUNONJESI NATURAL JOIN
(DEPARTAMENTI AS DEPT (DEMER, DNO,
MGID, MGDATFILLIM)))
WHERE DEMER = Kerkimit
45

Vecoria e Joined Relations


ne SQL (vazhd.)

Tipi default i nje join ne nje join table eshte nje


inner join, ku nje tuple perfshihet ne rezultat vetem
nese nje matching (koincidues) tuple ekziston ne
relacionin tjeter.
Q8A: SELECT P.MBIEMRI AS PUNONJES_EMER,
S.MBIEMRI AS SUPERVISOR_EMER
FROM PUNONJESI AS P, PUNONJESI AS S
WHERE P.SUPERVID=S.ID
Ne QUERY-n me siper vetem punonjesit qe kane nje
supervizor perfshihen ne rezultat; nje tuple
PUNONJESI vlera e te cilit per SUPERVID eshte NULL
nuk eshte perfshire.
46

Vecoria e Joined Relations


ne SQL (vazhd.)

Ne se kerkohet qe ne rezultatin e query-se te


perfshihen te gjithe punonjesit, mund te perdoret nje
outer join.
Q8B: SELECT P.MBIEMRI AS PUNONJES_EMER,
S.MBIEMRI AS SUPERVIZOR_EMER
FROM PUNONJESI P LEFT OUTER JOIN PUNONJESI
S ON P.SUPERVID=S.ID)
Opsionet qe perdoren per specifikimin e tabelave ne
SQL2 perfshijne INNER JOIN (i njejte me JOIN), LEFT
OUTER JOIN, RIGHT OUTER JOIN, dhe FULL OUTER
JOIN.

47

Vecoria e Joined Relations


ne SQL (vazhd.)

Eshte e mundur gjithashtu te perdorim


specifikimin join brenda nje tjeter join (nest).
Q2A : SELECT PNUMER, DNUMER, MBIEMRI,
DATLINDJA
FROM ((PROJEKT JOIN DEPARTAMENTI ON
DNUMERP=DNUMER) JOIN PUNONJESI ON
MGID=ID)
WHERE PVENDODHJE=Tirane
48

FUNKSIONET AGGREGATE

Perfshijne COUNT, SUM, MAX, MIN, dhe AVG


Query 15: Gjeni pagen maksimale, minimale, dhe
pagen mesatare te punonjesve.
Q15: SELECT MAX(PAGA), MIN(PAGA),
AVG(PAGA)
FROM PUNONJESI
Disa zbatime te SQL mund te mos lejojne me teper
se nje funksion ne fjalen SELECT

49

FUNKSIONET AGGREGATE
(vazhd.)

Query 16: Gjeni pagen maksimale, minimale,


dhe mesatare te punonjesve qe punojne per
departamentin e Kerkimit.
Q16: SELECT MAX(PAGA), MIN(PAGA),
AVG(PAGA)
FROM PUNONJESI, DEPARTAMENTI
WHERE DNO=DNUMER AND
DEMER=Kerkimit'
50

FUNKSIONET AGGREGATE
(vazhd.)

Queries 17 dhe 18: Gjeni numrin total te punonjesve


ne kompani (Q17), dhe numrin e punonjesve ne
departamentin e Kerkmit (Q18).
Q17:

SELECT COUNT (*)


FROM PUNONJESI

Q18:

SELECT COUNT (*)


FROM PUNONJESI, DEPARTAMENTI
WHERE DNO=DNUMER AND
DEMER=Kerkimit
51

GRUPIMI

Ne shume raste, ne duam te zbatojme


funksionet agregate mbi nengrupe tuples ne
nje relacion
Cdo nengrup tuples konsiston ne bashkesi
tuples qe kane te njejten vlere per atributet e
grupimit
Funksioni zbatohet mbi cdo nengrup ne
menyre te pavarur
SQL ka nje GROUP BY per specifikimin e
atributeve te grupimit, i cili mund te shfaqet
gjithashtu ne fjalen SELECT
52

GRUPIMI
(vazhd.)

Query 20: Per cdo departament, gjeni numrin e departamentit, numrin


e punonjesve te departamentit, dhe pagen e tyre mesatare.
Q20:SELECT DNO, COUNT (*), AVG (PAGA)
FROM PUNONJESI
GROUP BY DNO
Ne Q20, tuples te PUNONJESI jane ndare ne grupe - - cdo grup ka te
njejten vlere per atributin e grupimit DNO
Funksionet COUNT dhe AVG zbatohen mbi secilin grup te tuples vec e
vec
Fjala SELECT perfshin vetem atributin e grupimit dhe funksionet qe
do te zbatohen ne secilin grup te tuples
Nje join condition mund te perdoret ne lidhje me grupin

53

GRUPIMI
(vazhd.)

Query 21: Per cdo projekt, gjeni numrin e projektit,


emrin e projektit, dhe numrin e punonjesve qe
punojne ne kete projekt.
Q21:

SELECT PNUMER, PEMER, COUNT (*)


FROM PROJEKT, PUNON_NE
WHERE PNUMER=PRNUMER
GROUP BY PNUMER, PEMER

Ne kete rast, grupimi dhe funksionet jane zbatuar


pas join te dy relacioneve

54

HAVING

Shpesh ne duam te zgjedhim vlerat e


ketyre funksioneve per vetem ato prej
grupeve qe plotesojne disa kushte
Per te specifikuar nje kusht
perzgjedhjeje ne grupe (me teper se ne
tuples individuale) perdoret fjala
HAVING
55

HAVING
(vazhd.)

Query 22: Per cdo projekt ne te cilin punojne me


teper se dy punonjes, gjeni numrin e projektit, emrin
e projektit, dhe numrin e punonjesve qe punojne ne
kete projekt.
Q22: SELECT PNUMER, PEMER, COUNT(*)
FROM PROJEKT, PUNON_NE
WHERE PNUMER=PRNUMER
GROUP BY PNUMER, PEMER
HAVING COUNT (*) > 2

56

Krahasimi ne Nenvarg

Operatori i krahasimit LIKE perdoret


per te krahasuar stringje te pjesshme
Dy karaktere te rezervuara
perdoren:'%' (ose '* ne disa zbatime),
qe zevendesojne nje numer arbitrar
karakteresh, dhe '_ qe zevendeson nje
karakter te vetem arbitrar
57

Krahasimi ne Nenvarg
(vazhd.)

Query 25: Gjeni te gjithe punonjesit


datelindja e te cileve eshte ne Korrik. Vlera e
atributit Dat.Lindja duhet te permbaje
nenvargun Korr.
Q25:

SELECT EMRI, MBIEMRI


FROM PUNONJESI
WHERE DAT.LINDJA LIKE
'%Korr%
58

Krahasimi ne Nenvarg
(vazhd.)

Query 26: Gjeni te gjithe punonjesit qe kane lindur


ne vitet 1950. Ketu, '5' duhet te jete karakteri i 8-te i
vargut (ne lidhje me formatin e dates), keshtu qe
vlera e DatLindjes eshte '_______5_', me cdo
underscore si nje place holder per nje karakter te
vetem arbitrar.
Q26:

SELECT EMRI, MBIEMRI


FROM PUNONJESI
WHERE DAT.LINDJA LIKE
'_______5_
59

VEPRIMET ARITMETIKE

Operatoret standarte aritmetike '+', '-, '*', and '/' (per


mbledhjen, zbritjen, shumezimin, dhe pjesetimin, respektivisht)
mund te zbatohen ne vlera numerike ne nje rezultat query ne
SQL
Query 27: Paraqitni efektin e dhenies se te gjithe punonjesve qe
punojne ne ProduktiX te nje shtese prej 10%.
Q27:
AND

SELECT EMRI, MBIEMRI, 1.1*PAGA


FROM PUNONJESI, PUNON_NE, PROJEKT
WHERE ID=PID AND PNUMER=PRNUMER
PEMER='ProduktiX

60

ORDER BY

Fjala ORDER BY perdoret per te renditur tuples ne nje query


rezultat bazuar ne vlerat e disa atributeve
Query 28: Jepni nje liste te te gjithe punonjesve dhe projekteve
ne te cilat punon secili prej tyre, te renditur sipas departamentit
dhe brenda secilit departament te renditur sipas rendit alfabetik
te mbiemrit te punonjesit.
Q28:

SELECT DEMER, MBIEMRI, EMRI, PEMER


FROM DEPARTMENTI, PUNONJESI,
PUNON_NE,
PROJEKT
WHERE DNUMER=DNO AND ID=PID AND
PNUMER=PRNUMER
ORDER BY DEMER, MBIEMRI

61

ORDER BY (vazhd.)

Renditja default eshte renditja


ascending e vlerave
Ne mund te specifikojme fjalen celes
DESC nese duam nje rend descending;
fjala celes ASC mund te perdoret per te
specifikuar ne menyre te dukshme
rendin ascending , edhe pse ai eshte
default
62

Permbledhje e SQL Queries

Nje query ne SQL mund te perbehet prej maksimumi


6 fjalesh, por vetem dy te parat, SELECT dhe FROM,
jane te detyrueshme. Fjalet jane specifikuar ne
rendin e meposhtem:
SELECT <attribute list>
FROM <table list>
[WHERE <condition>]
[GROUP BY <grouping attribute(s)>]
[HAVING <group condition>]
[ORDER BY <attribute list>]

63

Permbledhje e SQL Queries


(vazhd.)

SELECT liston atributet ose funksionet qe do te perzgjidhen


FROM specifikon te gjitha relacionet (ose aliases) e nevojshme
ne query por jo ato te nevojshme ne nested queries
WHERE specifikon kushtet per perzgjedhje dhe join te tuples
prej relacioneve te specifikuara ne FROM
GROUP BY specifikon atributet e grupimit
HAVING specifikon nje kusht per perzgjedhjen e grupeve
ORDER BY specifikon nje renditje per shfaqjen e rezultatit te nje
query
Nje query vleresohet se pari duke zbatuar WHERE, me pas
GROUP BY dhe HAVING, dhe ne fund SELECT

64

Specifikimi i Updates ne SQL

Ekzistojne tre komanda ne SQL per te


modifikuar databazen: INSERT,
DELETE, dhe UPDATE

65

INSERT

Ne formen e tij me te thjeshte, perdoret


per te shtuar nje ose me teper tuples
ne nje relacion
Vlerat e atributeve duhet te listohen ne
te njejtin rend si atributet e specifikuara
ne komanden CREATE TABLE

66

INSERT (vazhd.)

Shembull:

U1: INSERT INTO PUNONJESI


VALUES ('Rikard', 'Marini', '653298', '30-DHJ-52',
'M', 37000,'987654', 4 )
Nje forme alternative e INSERT specifikon ne menyre te dukshme
emrat e atributeve qe korrespondojne me vlerta ne tuple e ri
Atributet me vlera NULL mund te lihen jashte
Shembull: Shtoni nje tuple per nje punonjes te ri per te cilin ne njohim
vetem atributet EMRI, MBIEMRI, dhe ID.

U1A:

INSERT INTO PUNONJESI (EMRI, MBIEMRI, ID)


VALUES ('Rikard', 'Marini', '653298')

67

INSERT (vazhd.)

Shenim i Rendesishem: Vetem


kushtezimet e specifikuara ne komandat
DDL zbatohen automatikisht nga DBMSja kur zbatohen modifikimet ne
databaze
Nje variant tjeter i INSERT lejon shtimin
e multiple tuples qe rezulatojne nga nje
query ne nje relacion
68

INSERT (vazhd.)

Shembull: Supozojme qe duam te krijojme nje tabele te perkohshme qe


permban emrin, numrin e punonjesve, dhe pagat totale per cdo departament.
Nje tabele DEPTS_INFO krijohet nga U3A, dhe mbushet me informacionin e
pergjithshem te perzgjedhur nga databaza me query ne U3B.
U3A:

CREATE TABLE DEPTS_INFO


(DEPT_EMER VARCHAR(10),
NR_I_PUN INTEGER,
TOTAL_PAGA INTEGER);

U3B:

INSERT INTO DEPTS_INFO (DEPT_EMER,


NR_I_PUN, TOTAL_PAGA)
SELECT DEMER, COUNT (*), SUM (PAGA)
FROM DEPARTAMENTI, PUNONJESI
WHERE DNUMER=DNO
GROUP BY DEMER ;

69

INSERT (vazhd.)

Shenim: Tabela DEPTS_INFO nuk mund


te modifikohet ne se ne ndryshojme
tuples ose ne tabelen DEPARTAMENTI
ose ne ate PUNONJESI pas perfundimit
te U3B. Do te na duhet te krijojme nje
pamje (view) per ta mbajtur nje tabele
te tille te perditesuar.

70

DELETE

Heq tuples nga nje relacion


Perfshin nje WHERE per te zgjedhur tuples qe do te
fshihen
Tuples fshihen vetem prej nje tabele ne nje moment
te dhene (po te mos jete specifikuar CASCADE ne nje
referential integrity constraint)
Nje mungese e WHERE specifikon qe te gjithe tuples
ne relacion do te fshihen; ne kete menyre tabela
behet nje tabele boshe
Numri i tuples qe fshihen varet nga numri i tuples ne
relacionin qe ploteson kushtet ne WHERE
Referential integrity duhet te zbatohen
71

DELETE
(vazhd.)

Shembuj:
U4A:

DELETE FROM PUNONJESI


WHERE MBIEMRI='Braja

U4B:

DELETE FROM PUNONJESI


WHERE ID='123456

U4C:

DELETE FROM PUNONJESI


WHERE DNO IN
(SELECT DNUMER
FROM DEPARTAMENTI
WHERE DEMER=Kerkimit')

U4D:

DELETE FROM PUNONJESI

72

UPDATE

Perdoret per te modifikuar vlerat e atributeve


te nje ose me teper tuples te zgjedhur
Nje WHERE zgjedh tuples qe do te
modifikohen
Nje fjale SET specifikon atributet qe do te
modifikohen dhe vlerat e tyre te reja
Cdo komande modifikon tuples ne te njejtin
relacion
Referential integrity duhet te zbatohen
73

UPDATE (vazhd.)

Shembull: Ndryshoni vendodhjen dhe numrin


e departamentit qe kontrollon projektin me
numer 10 ne Burrel dhe 5, respektivisht
U5:

UPDATE PROJEKT
SET PVENDODHJE = 'Burrel',
DNUMERP = 5
WHERE PNUMER=10
74

UPDATE (vazhd.)

Shembull : I beni te gjithe punonjesve te departamentit te Kerkimit


nje rritje page prej 10%.
U6: UPDATE PUNONJESI
SET PAGA = PAGA *1.1
WHERE DNO IN (SELECT DNUMER
FROM DEPARTAMENTI
WHERE DEMER=Kerkimit')

Ne kete kerkese, vlera e modofikuar PAGA varet nga vlera origjinale


PAGA ne cdo tuple
Atributi PAGA ne te djathte te = i referohet vleres se vjeter te PAGA
perpara modifikimit
Atributi PAGA ne te majte te = i referohet vleres se re te PAGA pas
modifikimit

75

You might also like