Download as pdf or txt
Download as pdf or txt
You are on page 1of 34

PRODUKTI KARTEZIAN & FUNKSIONET AGREGUESE

SISTEMET E BAZËS SË TË DHËNAVE


MEDINA SHAMOLLI
PËRMBAJTJA

 Kufizimet (çelësi kryesor dhe çelësi i huaj)


 Baza e lidhjeve/relacioneve mes tabelave
 Lidhjet/Relacionet: Semantika SQL
 Funksionet e Agregimit

2
VETITË E RELACIONEVE/TABELAVE

 Ka emër unik;
 Çdo celulë (cell) e tabelës/relacionit përmban saktësisht një vlerë atomike (të vetme);
 Çdo atribut/kolonë ka emër të veçantë;
 Vlerat e atributit/kolonës janë të gjitha nga i njëjti domain (tip i të dhënave);
 Çdo rresht/tuple është i veçantë; nuk ka rresht të kopjuar (identik);
 Radha e atributeve/kolonave nuk ka rëndësi;
 Radha e rreshtave/tuples nuk ka rëndësi.

3
ÇELËSI I RELACIONEVE/TABELAVE (ZGJIDHJA E
KUFIZIMIT/CONSTRAINT)

 Në bazën e të dhënave relacionale është e nevojshme që të identifikojmë një ose më shumë atribute (të quajtur çelësa relacional)
që në mënyrë unike identifikon çdo rresht në një relacion.
 ID-ja e studentit është çelësi për relacionin/tabelën e Studentit (secili studentë ka ID unike nga të tjerët).
 ISBN është çelës për relacionin/tabelën Libri (të gjithë Librat kanë ISBN unik).

 Ekzistojnë disa lloje të çelësave në databazën relacionale:


 Super çelësi (super key)
 Çelësi kandidat (candidate key)
 Çelësi primar/kryesor (primary key)
 Çelësi i jashtëm (foreign key)

4
ÇELËSI KRYESOR (PRIMARY KEY)

 Është çelës kandidat i cili është zgjedhur (selected) që të identifikoj rreshtat në formë unike në një relacion/tabelë.
 Për shkak se një relacion/tabelë nuk ka asnjëherë dy rreshta identik (të njëjtë), është gjithmonë e mundur të
identifikohet secili rresht në mënyrë unike. Kjo do të thotë që një relacion/tabelë do të ketë gjithmonë një çelës
primar.
 Kolona/atributi që është definuar si çelës primar nuk mund të jetë NULL si dhe duhet të përmbaj vlera unike (të
pa përsëritura).
 Duhet të ketë vetëm një çelës primar në një tabelë/relacion.
 Në rastin më të keq nëse nuk mund të definohet një çelës primar brenda një relacioni/tabele atëherë mund të
shfrytëzohet i gjithë grupi i atributeve si çelës kryesor/primar (zakonisht merret nëngrupi më i vogël i cili është i
mjaftueshëm për të dalluar rreshtat/tuples).

5
ÇELËSI I HUAJ (FOREIGN KEY)

 Është një kolonë, ose grup kolonash, në një tabelë, vlerat e të cilave korrespondojnë me vlerat e çelësit primar në
një tabelë tjetër.
 Për të shtuar një rresht me një vlerë të caktuar të çelësit të huaj, duhet të ekzistojë një rresht në tabelën
përkatëse me të njëjtën vlerë të çelësit primar.
 Tabela që përmban çelës të huaj (foreign key) quhet tabelë fëmijë kurse tabela që përmban çelës primar quhet
tabelë referencuese ose tabelë prind.
 Tipi i të dhënave të çelësit të huaj dhe çelësit primar duhet të jetë i njëjtë!

6
LIDHJA E TABELAVE (USE CASE)
Candidate Key
Candidate Key

Foreign Key
Primary Key

Primary Key
LIDHJA E TABELAVE (USE CASE)

STUDENTI
LENDA VLERESIM

8
LIDHJA E TABELAVE - ERD

 Shqyrtojmë skemat e tabelave:


 STUDENTI(id: char (PK), Emri: varchar, Mbiemri: varchar, Datalindjes: date, Email: varchar, NotaMesatare: float,
Qyteti: varchar)
 VLERESIMI (Studenti(FK): char, Lenda(FK): char, Nota: float, afatiProvimit: varchar)
 LËNDA(Id: char (PK), Emri: varchar, ECTS: int)
STUDENTI LENDA
1 VLERESIMI
Id (PK) 1 idLenda (PK)
M idStudenti (FK)
Emri M
idLenda (FK) Emri
Mbiemri ECTS
Nota
Datalindjes
AfatiiProvimit
Email
9
NotaMesatare Pra kemi IdStudenti (FK) i cili është çelës i huaj dhe i referohet tabelës Studenti.
Qyteti Kurse idLenda(FK) është çelës i huaj i cili i referohet tabelës Lënda.
DEKLARIMI I ÇELËSIT TË HUAJ NË SQL

STUDENTI(id: char (PK), Emri: varchar, Mbiemri: varchar, Datalindjes: date, Email: varchar, NotaMesatare: float, Qyteti: varchar)
VLERESIMI (Studenti(FK): char, Lenda(FK): char, Nota: float, afatiProvimit: varchar)
LËNDA(Id: char (PK), Emri: varchar, ECTS: int)

create table Studenti


create table Vlersimi /*Krijimi i tabeles/skemes
( ( Lënda*/
id_s char(3) Primary Key, idStudenti char(3), create table Lenda
Emri varchar(30) Not Null, idLenda char(5),
(
Mbiemri varchar(30) Not Null, Nota float,
afatiProvimit varchar(20), id_l char(5) Primary Key,
DataLindjes date,
Primary key (idStudenti,idLenda), Emertimi varchar(30) Not
Email varchar(50),
Foreign key (idStudenti) references Null,
NotaMesatare float,
Studenti (id_s), ECTS int
Qyteti varchar(20) Foreign key (idLenda) references )
) Lenda (id_l))
10
RREGULLAT PËR ÇELËSAT E HUAJ

 Çelësi i huaj paraqet kufizim në bazën e të dhënave relacionale dhe për këtë ne duhet të kemi parasysh disa
rregulla:
 Nuk mund të shtohet vlerë e caktuar si Foreign Key (në tabelën fëmijë) nëse nuk ekziston si Primary Key (në tabelën Prind)
 P.sh nuk mund të shtojmë një rresht në tabelën Vlerësimi nëse nuk kemi vlera referuese në tabelën Studenti dhe/ose Lënda.
 Edhe mungesa e njërës nga vlerat (ID e Studentit ose ID e Lëndës) nuk mund të realizoj shtim në tabelën Vlerësimi.
 Duhet të kemi kujdes kur fshijmë (delete) vlera të çelësit kryesor (Primary Key) nëse janë referencuar në ndonjë tabelë si
çelës i jashtëm (Foreign Key).
 P.sh nëse dëshirojmë të fshijmë studentin me ID: S002 atëherë nuk mund të ndodh fshirja për shkak se ky student është përmendur
(referuar) në tabelën Vlerësimi.
 Në anën tjetër nëse duhet që të fshijmë patjetër një vlerë (rresht) nga tabela përkatëse (e deklaruar si PK) , atëherë duhet
të fshihen edhe vlerat në të gjitha tabelat që ajo vlerë është referuar (të deklaruara si FK)
 SQL ofron mundësi përkatëse për trajtimin e këtyre çështjeve dhe do të mbulohet në ligjëratat në vazhdim.

11
KUFIZIMET E RELACIONEVE

12
RASTI I STUDIMIT
Si rast studimi po trajtojmë vlerësimin e studentëve
për lëndët përkatëse të cilët ata kanë përfunduar.
/*Krijimi i tabeles/skemes Studenti*/
create table Studenti
( /*Krijimi i tabeles/skemes
id_s char(3) Primary Key, relacionale Vlersimi*/
Së pari krijojmë bazën e të dhënave: Emri varchar(30) Not Null, create table Vlersimi
Mbiemri varchar(30) Not Null, (
create database Ligj_03 DataLindjes date, idStudenti char(3),
Email varchar(50), idLenda char(5),
Për të krijuar skemën përkatëse NotaMesatare float, Nota float,
në bazën e të dhënave që sapo Qyteti varchar(20) afatiProvimit varchar(20),
krijuam: ) Primary key
/*Krijimi i tabeles/skemes Lënda*/ (idStudenti,idLenda),
use Ligj_03 create table Lenda Foreign key (idStudenti)
( references Studenti (id_s),
id_l char(5) Primary Key, Foreign key (idLenda)
Emertimi varchar(30) Not Null, references Lenda (id_l))
ECTS int
--ky është një koment në SQL ) 13

/* edhe ky është një koment në SQL */


RASTI I STUDIMIT (INSERTIMI I TË DHËNAVE)
--Insertimi i të dhënave në tabelën Lënda

INSERT [dbo].[Lenda] ([id_l], [Emertimi], [ECTS]) VALUES (N'40CS1', N'Shkenca Kompjuterike 1', 4)
INSERT [dbo].[Lenda] ([id_l], [Emertimi], [ECTS]) VALUES (N'40HAL', N'Hyrje ne Algoritme ', 5)
INSERT [dbo].[Lenda] ([id_l], [Emertimi], [ECTS]) VALUES (N'40MT2', N'Matematike 2', 6)
INSERT [dbo].[Lenda] ([id_l], [Emertimi], [ECTS]) VALUES (N'41SBD', N'Sistemet e bazës së të dhënave', 6)
INSERT [dbo].[Lenda] ([id_l], [Emertimi], [ECTS]) VALUES (N'41WEB', N'Inxhieri e Web-it', 5)

-- Insertimi i të dhënave në tabelën Studenti

INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S01', N'Agnesa', N'Beqiraj', CAST(N'1997-10-11' AS Date),
N'ab@gmail.com', 3.7, N'Prishtine')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S02', N'Shend', N'Gashi', CAST(N'1993-05-05' AS Date),
N'sg@yahoo.com', 5, N'Lipjan')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S03', N'Alban', N'Krasniqi', CAST(N'2000-12-07' AS Date),
N'ak@hotmail.com', 4.2, N'Prishtine')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S04', N'Ines', N'Hoxha', CAST(N'1994-06-05' AS Date),
N'ih@live.com', 4.3, N'Peje')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S05', N'Bekim', N'Hasani', CAST(N'1999-01-09' AS Date),
N'bh@hotmail.com', 3.8, N'Gjilan')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S06', N'Flora', N'Kelmendi', CAST(N'1994-07-08' AS Date),
N'fk@gmail.com', 4.8, N'Gjakove')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S07', N'Albina', N'Hyseni', CAST(N'2000-07-10' AS Date),
N'ah@gmail.com', 3.5, N'Ferizaj')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S08', N'Adelina ', N'Sefaj', CAST(N'2000-10-07' AS Date),
N'as@yahoo.com', 4.1, N'Peje')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S09', N'Egzon', N'Bajrami', CAST(N'1999-07-05' AS Date),
N'eb@gmail.com', 2.9, N'Ferizaj')
INSERT [dbo].[Studenti] ([id_s], [Emri], [Mbiemri], [DataLindjes], [Email], [NotaMesatare], [Qyteti]) VALUES (N'S10', N'Dardan', N'Daka', CAST(N'2002-08-12' AS Date),
N'dd@gmail.com', 3.7, N'Gjilan') 14
RASTI I STUDIMIT (INSERTIMI I TË DHËNAVE)

--Insertimi i të dhënave në tabelën Vlerësimi

INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S02', N'40CS1', 8, N'Janar')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S02', N'41SBD', 6, N'Prill')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S02', N'41WEB', 9, N'Shkurt')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S05', N'40HAL', 9, N'Shkurt')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S05', N'40MT2', 9, N'Prill')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S05', N'41WEB', 10, N'Prill')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S07', N'41WEB', 7, N'Prill')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S08', N'40MT2', 8, N'Shkurt')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S09', N'40CS1', 6, N'Prill')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S09', N'40HAL', 8, N'Prill')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S09', N'41WEB', 6, N'Janar')
INSERT [dbo].[Vlersimi] ([idStudenti], [idLenda], [Nota], [afatiProvimit]) VALUES (N'S10', N'40HAL', 7, N'Janar')

Shënim: Skripten e SQL e gjeni edhe në Moodle.


Ju lutem që për momentin të injoroni sintaksën (pasi që do të mësoni në ligjëratat në vijim të gjitha detajet).
15
PYETËSORI NË SHUMË TABELA (PRODUKTI KARTEZIAN)

 Operacioni i produktit kartezian përcakton një relacion që është lidhja e çdo rreshti (tuples) të një
relacioni/tabele me të gjitha rreshtat (tuples) të relacionit/tabelës tjetër.
 P.sh nëse kemi relacionet/tabelat P dhe Q atëherë produkti kartezian i këtyre dy tabelave do të shprehej si P x Q:
 Rezultati i produktit kartezian rrjedh nga relacioni (lidhja) e dy apo më shumë tabelave.

16
PRODUKTI KARTEZIAN (SHEMBULL)

/*Të shfaqen të gjithë studentët të cilët janë vlerësuar në afatin e shkurtit: */


select s.Emri, s.Mbiemri, v.Nota, l.Emertimi
Tabelat prej nga do të merren të
from Studenti s, Vlersimi v, Lenda l dhënat sipas produktit kartezian
where s.id_s = v.idStudenti and l.id_l = v.idLenda (Studenti x Vleresimi x Lenda)

and v.afatiProvimit like 'Shkurt’

Rezultati
Lidhja e tabelave duke përfshirë
barazimin e PK dhe FK sipas tabelave
Kushti sipas afatit të përkatëse.
provimit (Shkurt) 17
FUNKSIONET E AGREGIMIT (GRUPIMIT) NË SQL

 Meqë shumica e të dhënave përmbajnë numra dhe neve na duhet që ato të dhëna të mblidhen apo të kthehen në
një formë të përpunuar të rezultatit të cilat kthehen si një raport atëherë përdoren funksionet e agregimit.
 Këto funksione janë listuar në tabelën më poshtë:

 Këto funksione në SQL veprojnë si grupim i të dhënave të rreshtave duke kthyer një rezultat të vetëm për gjithë
grupin duke marrë parasysh edhe kushtet përkatëse. 18
FUNKSIONET E AGREGIMIT (GRUPIMIT) NË SQL

 Përveç funksionit COUNT(*) të gjitha funksionet tjera injorojnë vlerat null.


 Këto funksione përdoren për fushat numerike dhe si rezultat kthejnë vetëm një vlerë (varet nëse përdorim funksionin
GROUP BY).
 Funksionet agreguese mund të përdoren vetëm në deklaratën SELECT dhe HAVING.
 Funksioni COUNT(*) numëron të gjithë rreshtat duke përfshirë edhe vlerat NULL të ndonjë celule si dhe duplikimet
(vlerat e përsëritura).
 Për të eleminuar vlerat e përsëritura mund të përdoret deklarata DISTINCT.
 DISTINCT mund të përdorët edhe në funksionet tjera agreguese si SUM, AVG.
 Nuk ka ndonjë ndikim që të përdoret në funksionet MAX dhe MIN.
 DISTINCT ka ndikim vetëm në njërën kolonë të tabelës/relacionit (SELECT)
 Pra nuk mund të kemi p.sh SELECT DISTINCT emri, DISTINCT QYTETI.
19
COUNT

 Ky funksion kthen numrin e rreshtave në tabelë që përmbush kushtin e përcaktuar në deklaraten WHERE .
 Nëse kushti WHERE nuk është specifikuar, atëherë pyetësori (query) kthen numrin total të rreshtave në tabelë.

Shembull:

Sintaksa: /*Numroni studentët sipas qytetit*/


SELECT s.Qyteti, count(*) [Nr I studenteve]
SELECT COUNT (emri_kolonës) FROM Studenti s
FROM emri_tabël (lista tabelave) GROUP BY s.Qyteti
WHERE kushti; ORDER BY [Nr i studenteve] desc
20
COUNT(*),VS COUNT (EMRIKOLONES) DHE
COUNT(DISTINCT EMRIKOLONES)

ID Emri Paga

1 A 500
 Count(*): Kthen numrin total të të dhënave/rreshtave d.m.th 6.
2 B 450
 Count(paga): Kthen numrin total të vlerave NOT NULL në kolonën
‘Paga’ d.m.th 5. 3 C NULL

 Count(DISTINCT paga): Kthent numrin total të vlerava të veqanta 4 D 480


NOT NULL në kolonën ‘Paga’ d.m.th 4
5 E 450

6 F 600

21
SQL SUM()

 Ky funksion përdorët për të kalkuluar shumën totale të një kolone numerike.

Shembull:

Sintaksa: /*Të gjeni sa ECTS janë ligjeruar në


semestrin 3*/
SELECT SUM (emri_kolonës) SELECT SUM(l.ECTS) [Nr Kredive ne
FROM emri_tabeles Semestrin3]
WHERE kushti; FROM Lenda l

22
SQL SUM() (VAZHDIM)

/*Të shfaqeni numrin e kredive të arritura nga


secili Student*/
SELECT S.Emri, S.Mbiemri, SUM(l.ECTS) [Nr Total i
Kredi]
FROM Studenti s, Lenda l, Vlersimi v
WHERE s.id_s=v.idStudenti AND l.id_l=v.idLenda
AND v.Nota>5
GROUP BY S.Emri, S.Mbiemri

23
SQL MIN()

 Ky funksion përdorët për të kthyer vlerën më të ulët (vogël) nga një kolonë numerike.

Shembull:
Sintaksa: /*Të e gjeni cila është nota mesatare më
ulët e regjistruar në tabelën Studenti*/
SELECT MIN (emri_kolonës) SELECT MIN(s.NotaMesatare) [NotaMesatare me
FROM emri_tabeles e Ulet]
WHERE kushti; FROM Studenti s

24
SQL MAX()

 Ky funksion përdorët për të kthyer vlerën më të lartë (madhe) nga një kolonë numerike.

Shembull:

/*Të e gjeni cila është nota mesatare më e


Sintaksa: lartë e regjistruar në tabelën Studenti*/
SELECT MAX (emri_kolonës) SELECT MAX(s.NotaMesatare) [NotaMesatare me
FROM emri_tabeles e lartë]
WHERE kushti; FROM Studenti s

25
SQL AVG()

 Ky funksion përdorët për të kthyer vlerën mesatare nga një kolonë numerike.

Shembull:

/*Të e gjeni cila është nota mesatare më e


Sintaksa: lartë e regjistruar në tabelën Studenti*/
SELECT AVG (emri_kolonës) SELECT AVG(s.NotaMesatare) [NotaMesatare e
FROM emri_tabeles pergjithshme]
WHERE kushti; FROM Studenti s

26
DEKLARATA ORDER BY

 Përdorët për të renditur rezultatin sipas vlerave të një ose më shumë kolonave.
 Renditja e paracaktuar (default) është Ascending (nga më e vogla te më e madhja).
 Mund të përdoret te kolonat numerike (renditja e numrave) dhe jo numerike (renditja e tekstit sipas alfabetit).
 ORDER BY mund të përdoret si Asscending (ASC) dhe Descending (DESC).

Shembull:
Sintaksa:
/* Të renditen studentët sipas numrit të kredive të arritura,
nga studenti që ka më shumë kredi te ai që ka më pak kredi*/
SELECT listaKolonave
FROM listaTabelave Select s.Emri, s.Mbiemri, sum(l.ECTS) as [Kredite]
from Studenti s, Vlersimi v, Lenda l
[WHERE [listaKushtëshve ] where s.id_s = v.idStudenti and v.idLenda = l.id_l
[ORDER BY listaKolonave [ASC | group by s.Emri, s.Mbiemri
order by [Kredite] desc 27
DESC] ]
GROUP BY

 Secila nga funksionet agreguese (SUM, AVG, COUNT, MIN, MAX) kthejnë si rezultat vetëm një rezultat total
përmbledhës (raport).
 Shpesh na duhet që të gjejmë subtotal të rreshtave deri në një total final.
 Për ta bërë këtë ne mund të përdorim GROUP BY.
 GROUP BY ndryshe quhet si pyetësor i grupuar (grouped query) sepse ai grupon të dhënat nga deklarata
SELECT dhe prodhon një rresht të vetëm për secilin grup.
 Kolonat të cilat përdoren në GROUP BY quhen si kolona grupuese (grouped columns).
 Sipas rregullave, deklarata SELECT dhe deklarata GROUP BY janë të lidhura ngushtë me njëra tjetrën.
 Çfarë do kolone e përmendur në SELECT duhet që të përmendet patjetër në GROUP BY. (nuk vlen e kundërta,
mund të përdoret një kolonë në GROUP BY dhe të mos përfshihet në SELECT).
28
GROUP BY (SINTAKSA)

SELECT <lista e atributit (eve) >


FROM <lista e tabelave>
[WHERE <kriteri (kushti)>]
[GROUP BY <grupimin e atributit (eve)>]
[HAVING < kushti e grupit >]
[ORDER BY < lista e atributit (eve) [ASC | DESC] >]

SELECT shprehja1, shprehja2, ... shprehja_n, aggregate_function (shprehja)


FROM Tabelat
WHERE kushtet
GROUP BY shprehja1, shprehja2, ... shprehja_n
Having funksioni_agregimit (shprehja)> shprehja
Order by shprehja1, ... shprehja_n ASC

29
GROUP BY (SHEMBUJ)

/*Numroni studentët sipas qytetit*/


SELECT s.Qyteti, count(*) [Nr Studneteve sipas Qytetit]
FROM Studenti s
Group by s.Qyteti

/*Renditni studentët sipas notës mesatare me te mire' */


Select v.idStudenti, (Sum(Nota)/count (v.idStudenti)) as [Nota Mesatare]
FROM Vlersimi v
Group by v.idStudenti
30
Order By [Nota Mesatare] desc
HAVING

 Ne e dimë që deklarata WHERE përdoret për të vendosur kushte në kolona, por çka nëse duam të vendosim
kushte në grupe?
 Këtu hyn në përdorim deklarata HAVING.
 Ne mund të përdorim deklaraten HAVING për të vendosur kushte për grupet e fituara në rezultate
përfundimtare.
 Pra, ne duhet të përdorim deklaraten HAVING nëse duam të përdorim ndonjë nga funksionet agreguese (count,
sum, avg, min dhe max) si kusht. P.sh:
Shembull:
Shënim: Sipas të
/*Te shfaqen studentet qe jane notuar në 2 ose me shume lëndë*/ dhënave aktuale,
Select s.Emri, count(v.nota) nrLendeve
From Studenti s, Vlersimi v, Lenda l kemi vlerësim të
Where s.id_s=v.idStudenti and l.id_l=v.idLenda studentëve në 1 ose 31
Group by s.Emri 3 lëndë.
having count(v.nota)>=2;
SHEMBUJ TË TJERË TË FUNKSIONEVE AGREGUESE

/*Shfaqeni noten mesatare të studentëve që kanë kaluar më shumë se një lënde me


sukses.*/
SELECT S.Emri, (Sum(v.Nota)/count (v.idLenda)) as [Nota Mesatare]
FROM Studenti s, Vlersimi v
WHERE s.id_s=v.idStudenti and v.Nota>5
GROUP BY S.Emri
HAVING count (v.idLenda)>1

/*Shfaqni numrin e lëndëve për studentët që kanë kaluar dhe totali i kredive të arritur nga ta*/
SELECT s.Emri, s.Mbiemri, count(v.idLenda) 'Nr Lendeve', sum(l.ECTS) [Kreditë]
FROM Studenti s, Vlersimi v, Lenda l
WHERE s.id_s=v.idStudenti and l.id_s=v.idLenda and v.Nota>5
GROUP BY s.Emri, s.Mbiemri
HAVING count (v.idLenda)>1 /*Përdoret për të filtruar funksionet e agregimit*/
Order By [kreditë] desc 32
REFERENCAT

 Database System Concepts book (chapter 3)


 Database systems a practical approach to design, implementation, and management by Begg, Carolyn E. Connolly,
Thomas M

33
Pyetje?

34

You might also like