gjuhasql - olti.fgjm.edu.alolti.fgjm.edu.al/sql.pdf · sql aktualeeshtezhvillimii...
TRANSCRIPT
Gjuha SQLOltion Fociro
Departamenti i GjeoInformatikes
Baze Te Dhenash
Departamenti i GjeoInformatikes
Universiteti Politeknik i Tiranes
1
SQL (Structured Query Language) = DDL + DML
Gjuha SQL ekzekuton pyetjen, perkufizimin dhe perditesimin e
te dhenave.
SQL si gjuhe per pyetjen e nje DB eshte me deklarativ se
Baze Te Dhenash
HYRJE
SQL si gjuhe per pyetjen e nje DB eshte me deklarativ se
algjebra relazionale.
SQL eshte flesibel dhe espresiv(perdorimi i join dhe dhe
operatori in)
2
Dy elemente te rendesishem e ndajne SQL nga Algjebra
Relacionale:
(1)resultatet e projektimeve jane multi-bashkesi ne vend te
bashkesive (si default duplicatet nuk fshihen)
Baze Te Dhenash
SQL vs. Algjebra Relacionale
(2)vlerat vs. relacioneve (resultati i aplikimit i nje funksioni te
agreguar mund te meret ne raste te vecanta si vlere dhe jo si
relacion)
3
SQL aktuale eshte zhvillimi i nje gjuhe pyetjesh per DBMS, i
propozuar ne fillim prane laboratoreve te kerkimit te IBM ne
gjysmen e dyte te viteve ’70.
Duke filluar nga vitet 80, u be objekt i nje aktiviteti intensiv per
Baze Te Dhenash
Situata e pergjithshme
Duke filluar nga vitet 80, u be objekt i nje aktiviteti intensiv per
standartizimin, zhvilluar ne pergjithesi prane ANSI(American
National Standards Institute) dhe ISO(International Organization
for Standardization).
Processi i standartizimit eshte gjithmone en zhvillim(SQL base,
SQL-2, SQL-3)
4
Nje pyetje SQL mund te permbaje deri ne 6 klausola nga te cilat
vetem dy te parat jane te detyrueshme:
SELECT <lista e atributeve> (target list)
FROM <lista e tabelave>
WHERE <kushti>
Baze Te Dhenash
Gjuha e Pyetjeve SQL
WHERE <kushti>
GROUP BY <lista e atributeve(sipas grupimit)>
HAVING <kushti (i grupit)>
ORDER BY <lista e atributeve>
Tre rreshtat e pare formojne bllokun kryesor (i quajtur
mapping).
5
SELECT specifikon atributet dhe/ose funksionet (ne pergjithsi
espresionet) vlerat e te cilave jane resultati i vleresimit te
pyetjes . Mund te specializohet ne shume menyra (p.sh.
Perdorimi i fjales celes DISTINCT).
FROM specifikon te gjitha tabelat ku duhet te hyhet per te
Baze Te Dhenash
Blluku Kryesor
FROM specifikon te gjitha tabelat ku duhet te hyhet per te
rekuperuar informacione qe kerkohen nga pyetja.
WHERE specifikon kushtet (vleresime Booleane) per
seleksionimin e rreshtave te tabelave te kerkuara tek klauzola
FROM (kushte seleksionimi dhe kushte Join; ne SQL-2 kushtet e
Join vendosen dhe tek klauzola FROM).
6
Blloku kryesor: SELECT-FROM-WHERE
Sintaksa:
SELECT AtrEspr [[AS]ALIAS]
Baze Te Dhenash
Pyetjet Baze
SELECT AtrEspr [[AS]ALIAS]
FROM Tabela [[AS]ALIAS]
WHERE Kushti
7
(Tabela 1 - Punonjes): emer, mbiemer, ID, adresa, seksi, rroga,
supervizor, dep
(Tabela 2 - Departamenti): d_numer, d_emer, manaxher
(Tabela 3 – Projekti): p_numer, p_emer, d_numer
(Tabela 4 – Punon_Ne): pun, projekti, ore_javore
Baze Te Dhenash
Tabelat e Shembujve
(Tabela 4 – Punon_Ne): pun, projekti, ore_javore
(Tabela 5 – Personat_Ngarkim): pun, emri, seksi, datelindja,
lidhja
8
Shembulli 1: Te gjendet rroga e punonjesve qe e kane mbiemrin
Shehu.
SELECT Rroga AS RrogaShehu
FROM Punonjesi
WHERE Mbiemri = ‘Shehu‘
Baze Te Dhenash
Perdorimi i Alias dhe perdorimi i yllit
WHERE Mbiemri = ‘Shehu‘
Shembulli 2: Te gjendet te gjitha inforamzionet e punonjesve qe
e kane mbiemrin Shehu.
SELECT *
FROM Punonjesi
WHERE Mbiemri = ‘Shehu'
9
Shembulli 3: Te gjendet rroga mujore e punonjesve qe e kane
mbiemrin Shehu.
SELECT Rroga/12 AS RrogaShehu
FROM Punonjesi
WHERE Mbiemri = ‘Shehu‘
Baze Te Dhenash
Perdorimi i espresioneve dhe JOIN
WHERE Mbiemri = ‘Shehu‘
Shembulli 4: Per cdo punonjes te gjendet emri i departamentit
ku punon.
SELECT ID, d_emer
FROM Punonjesi, Departamenti
WHERE dep= d_numer
10
Shembulli 5: Te gjendet rroga e cdo punonjesi.
SELECT ID, Rroga
FROM Punonjesi
Shembulli 6: Te gjenden nivelet e pagave te punonjesve te
Baze Te Dhenash
Nen Blloku SELECT-FROM dhe DISTINCT
Shembulli 6: Te gjenden nivelet e pagave te punonjesve te
nderrmarjes
SELECT DISTINCT Rroga
FROM Punonjesi
11
Shembulli 7: Per cdo punonjes te gjenden numrat e projekteve
mbi te cilat punon
SELECT Punonjesi.ID, P.projekti
FROM Punonjesi, Punon_Ne AS P
WHERE ID = pun
Baze Te Dhenash
Shenimet me pike
WHERE ID = pun
Shembulli 8: Te gjenden emrat dhe datelindjet e personave ne
ngarkim te cdo punonjesi
SELECT ID, P.emri, P.datelindja
FROM Punonjesi, Persona_Ngarkim AS P
WHERE ID = pun
12
Shembulli 9: Te gjenden emer dhe mbiemer i supervizoreve te
punonjesve qe punojne ne departamentin 10
SELECT S.emer, S.mbiemer
FROM Punonjesi AS I S
WHERE I.dep = 10 AND I.supervizor = S.ID
Baze Te Dhenash
Alias dhe operazionet e riemerimit
Shembulli 10: Te gjenden projektet qe kane te pakten nje
departament te perbashket
SELECT P1.p_numer, P2.p_numer
FROM Projekti AS P1 P2
WHERE P1.d_numer = P2.d_numer AND
P1.p_numer < P2.p_numer13
Pyetjet e mbivendosura: ne klausolen WHERE, SQL lejon
krahasimin me ane te operatoreve standart nje vlere me
rezultatin e ekzekutimit te nje pyetje SQL te mbivendosur.
Ne rastin me te thjeshte kjo vlere eshte vlera e nje atributi te
dhene.
Baze Te Dhenash
Pyetjet e mbivendosura
dhene.
Si mund te kryhet krahasimi i nje vlere me nje bashkesi
vlerash(te mara nga ekzekutimi i pyetje SQL)? Perdorimi i fjaleve
celes ANY(SOME) dhe ALL.
14
Si vleresohen pyetjet e mbivendosura? Nje vleresim per cdo
rresht ose kombinim rreshtash te pyetjes te ciles i perkasin.
Fjala celes ANY: rreshti kenaq kushtin nqs krahasimi (me
operatorin e dhene) midis vleres qe atributi merr dhe njerit nga
rreshtat e pyetjes se mbivendosur eshte i vertete.
Baze Te Dhenash
Perdorimi I ANY dhe ALL
rreshtat e pyetjes se mbivendosur eshte i vertete.
Fjala celes ALL: rreshti kenaq kushtin nqs krahasimi (me
operatorin e dhene) midis vleres qe atributi merr dhe secilit nga
rreshtat e pyetjes se mbivendosur eshte i vertete.
15
Shembulli 11: Te gjendet ID e punonjesve qe kane te njejtin
mbiemer me nje punonjes qe punon ne departamentin 10
SELECT ID
FROM Punonjes
WHERE mbiemri = ANY ( SELECT mbiemri
Baze Te Dhenash
Shembuj te perdorimit te ANY dhe ALL
WHERE mbiemri = ANY ( SELECT mbiemri
FROM Punonjes
WHERE dep = 10)
16
Shembulli 12: Te gjenden te gjithe departamentet ne te cilet
nuk punon asnje punonjes qe ka rroge me te madhe se 80.000
leke
SELECT d_numer
FROM Departamenti
Baze Te Dhenash
Shembuj te perdorimit te ANY dhe ALL - 2
FROM Departamenti
WHERE d_numer <> ALL ( SELECT dep
FROM Punonjes
WHERE rroga > 80.000)
17
Per te kontrolluar perkatesine e nje vlere ne nje bashkesi
vlerash qe jane rezultat e nje pyetje te nidifikuar mund te
perdoret operatori IN (ekuivalent ANY) dhe NOT IN (ekuivalent
<> ALL).
Shembulli 13: Te seleksionohen punonjesit qe bejne psese tek
departamenti me manaxher Iliri.
Baze Te Dhenash
Operatori IN
departamenti me manaxher Iliri.
SELECT *
FROM Punonjes
WHERE dep IN ( SELECT d_numer
FROM Departamenti
WHERE manaxher = Ilir)
18
SQL perdor nje funksion Boolean (funksioni EXISTS) qe lejon
verifikimin nese resultati i nje pyetje te nidifikuar eshte bosh
apo jo.
Shembulli 14: Te seleksionohen punonjesit qe nuk kane persona
ne ngarkim
Baze Te Dhenash
Funksioni Boolean EXISTS
SELECT id
FROM Punonjes
WHERE NOT EXISTS ( SELECT *
FROM Personat_Ngarkim
WHERE id = pun)
19
Shembulli 15: Te seleksionohen emri dhe mbiemri i
manaxhereve qe kane te pakten nje person ne ngarkim
SELECT emer, mbiemer
FROM Punonjes
WHERE EXISTS ( SELECT *
Baze Te Dhenash
Funksioni Boolean EXISTS - 2
WHERE EXISTS ( SELECT *
FROM Departamenti
WHERE id = manaxher)
AND
( SELECT *
FROM Personat_Ngarkim
WHERE id = pun)
20
SQL perdor disa funksione te agreguara si COUNT, SUM, AVG,
MAX dhe MIN.
Shembulli 16: Te gjendet shuma totale e pagave te dhena nga
nderrmarja per punonjesit e saj, paga mesatare, paga
maksimale dhe paga minimale.
Baze Te Dhenash
Funksioni te agreguara ne SQL
SELECT SUM(rroga), AVG(rroga), MAX(rroga), MIN(rroga)
FROM Punonjes
21
Operatori COUNT lejon numerimin e rreshtave te nje tabele
(opcioni *), numrin e vlerave te ndryshme qe ka nje atribut (fjala
celes DISTINCT).
Shembulli 17: Te gjendet numri i punonjesve te departamentit 3.
SELECT COUNT (*)
Baze Te Dhenash
Funksioni te agreguara ne SQL - 2
SELECT COUNT (*)
FROM Punonjes
WHERE dep = 3
Shembulli 18: Te gjendet numri i niveleve te pagave
SELECT COUNT (DISTINCT rroga)
FROM Punonjes
22
Shembulli 19: Te gjendet emri dhe mbiemri i punonjesve qe
kane me shume se 3 persona ne ngarkim.
SELECT emer, mbiemer
FROM Punonjes
WHERE ( SELECT COUNT (*)
Baze Te Dhenash
Relacionet si Vlera
WHERE ( SELECT COUNT (*)
FROM Personat_Ngarkim
WHERE id = pun) >= 3
23
Elementet themelore:
-perkufizimi i dominit
-perkufizimi i skemes dhe i tabelave
-perkufizimi i kufizimimeve
-specifikimi i vlerave default
Baze Te Dhenash
Perkufizimi i te dhenave ne SQL
-specifikimi i vlerave default
-kufizime intrarelacionale
-kufizime interrelacionale
-modifikimi i skemave
24
Domini percakton bashkesite e vlerave qe atributet mund te
marin.
Dy tipe:
-domine elemntare, te vena ne dispozicion nga SQL
-domine te perkufizuara nga perdoruesi (me ane te komandave)
Baze Te Dhenash
Perkufizimi i dominit
-domine te perkufizuara nga perdoruesi (me ane te komandave)
Dominet elementare:
-germat
-tipet numerike egzakte dhe te rrumbullakosur
-intervale dhe caste kohore
25
SQL perkufizon nje skeme si nje koleksion objektesh(dominet,
tabelat,…)
Sintaksa: create schema [EmriSkemes]
[ [ authorization ] Autorizimi ]
{ perkufizimi i elementeve te skemes }
Baze Te Dhenash
Perkufizimi i skemes
ku autorizimi eshte emri i pronarit te skemes( nqs nuk vendoset
atehere pronari eshte ai qe ka egzekutuar komanden)
Nqs emri i skemes nuk vendoset atehere skema mer emrin e pronarit.
Shembull: CREATE SCHEMA nderrmarja AUTHORIZATION Kasemi
26
Nje tabele SQL eshte e perbere nga nje bashkesi atributesh, me
dominet relative, dhe nga nje bashkesi kufizimesh.
Krijimi i nje tabele:
CREATE TABLE DEPARTIMENTI (
d_numer INTEGER PRIMARY KEY,
d_emer VARCHAR(20),
Baze Te Dhenash
Perkufizimi i tabelave
d_emer VARCHAR(20),
manaxheri CHAR(16),
UNIQUE(d_emer),
FOREIGN KEY (manaxheri ) REFERENCES Punonjes(ID),
ON DELETE SET NULL,
ON UPDATE CASCADE
)
27
Sintaksa (per perkufizimin e tabelave):
CREATE TABLE EmriTabeles
(
EmriAtributit Domini [VleraDefault] [Kufizimet]
KufizimeTeTjera
Baze Te Dhenash
Perkufizimi i tabelave - 2
KufizimeTeTjera
)
Tabela eshte fillimisht boshe. Krijuesi ka te gjitha privilegjet mbi
kete tabele (privilegjet per te hyre dhe per te modifikuar
tabelen).
28
Ne perkufizimin e tabelave mund te referohen dominet
elementare ose dominet e perkufizuara nga perdoruesit.
Sintaksa:
CREATE DOMAIN EmriDominit AS TipiTeDhenave
Baze Te Dhenash
Perkufizimi i domineve
CREATE DOMAIN EmriDominit AS TipiTeDhenave
[VleraDefault]
[kufizimet]
Shembull:
CREATE DOMAIN IDENTIFIKUES AS CHAR(16)
29
Termi Vlera DEFAULT mund te perdoret ne krijimin e tabelave dhe
domineve i cili specifikon vleren qe nje atribut merr ne momentin qe
shtohet nje rresht i tabeles pa vlere te percaktuar per kete atribut.
Sintaksa:
DEFAULT < VlerePergjithshme | user | NULL >
Baze Te Dhenash
Specifikimi i vlerave DEFAULT
VlerePergjithshme eshte nje vlere qe respekton dominin(e atributit).
User vendos si vlere default emrin e perdoruesit qe ka perditsuar
tabelen.
Shembull: dep SMALLINT DEFAULT 1
30
Kufizime intrarelacionale dhe interrelacionale.
Kufizimet intrarelacionale jane kufizime qe i perkasin vetem nje
tabele te vetme (kufizimet NOT NULL, UNIQUE dhe PRIMARY
KEY).
Baze Te Dhenash
Specifikimi i kufizimeve
Kufizimet interrelacionale jane kufizime qe i perkasin me shume
se nje tabele (kufizimi FOREIGN KEY).
31
Kufizimi NOT NULL: vlera NULL nuk mund te perdoret si vlere e
atributit.
Shembull: mbiemri varchar(20) NOT NULL
Kufizimi UNIQUE:applicohet nje ose shume atributeve dhe
Baze Te Dhenash
Kufizimet intrarelacionale
Kufizimi UNIQUE:applicohet nje ose shume atributeve dhe
imponon qe rreshta te ndryshem te se njejtes tabele te kene
vlera te ndryshme te ketij atributi.
Shembull: d_emer varchar(20) UNIQUE
32
Kufizime mbi nje atribut vs. nje bashkesi atributesh
emer VARCHAR(20) NOT NULL UNIQUE,
mbiemer VARCHAR(20) NOT NULL UNIQUE
vs.
emer VARCHAR(20) NOT NULL,
mbiemer VARCHAR(20) NOT NULL,
Baze Te Dhenash
Kufizimet intrarelacionale - 2
mbiemer VARCHAR(20) NOT NULL,
UNIQUE(emer,mbiemer)
Kufizimi PRIMARY KEY: munt te perkufizohet vetem nje here per cdo
tabele.
emer VARCHAR(20),
mbiemer VARCHAR(20),
PRIMARY KEY (emer,mbiemer)
33
Mund te perkufizohet ne dy menyra (menyra e dyte eshte e
detyrueshme nqs celesi primar eshte i perbere nga me shume
se nje atribut)
dep SMALLINT REFERENCES DEPARTIMENTI(d_numer)
Baze Te Dhenash
Kufizimet interrelacionale – Celesat e Jashtem
vs.
...
manaxher CHAR(16),
...
FOREIGN KEY (manaxher) REFERENCES PUNONJESI(ID),
ON DELETE SET NULL,
ON UPDATE CASCADE
34
Reaksione e mundeshme per operacionet e modifikimit/fshirjes:
-CASCADE:vlera e re vendoset tek te gjitha rreshta e tabeles
-SET NULL: atributit i vendoset vlera NULL
Baze Te Dhenash
Kufizimet interrelacionale - Celesat e Jashtem - 2
-SET DEFAULT: atributit i vendoset vlera DEFAULT
-NO ACTION: nuk modifikohet asgje.
Sintaksa: on < DELETE | UPDATE >
< CASCADE | SET NULL | SET DEFAULT | NO ACTION >
35
Operacione qe lejojne modifikimin e permbajtjes se nje DB jane:vendosja,
fshirja dhe modifikimi i te dhenave.
Komanda per vendosjen e nje rreshti te nje tabele(dy menyra alternative):
INSERT INTO emriTabeles [(ListaAtributeve)]
< VALUES (ListaVlerave) | SelectSQL >
Baze Te Dhenash
Perditesimi i te dhenave ne SQL: vendosja
Shembull:vendosje e nej rreshti
INSERT INTO DEPARTAMENTI(d_numer, d_emer)
VALUES (5, ‘Inxhinieria')
Shembull:vendosje e nje bashkesie rreshtashINSERT INTO PUNONJESIT5
( SELECT ID, emer, mbiemer, rroga
FROM Punonjes
WHERE dep = 5)
36
Menyra e pare perdoret ne brendesi te programeve (‘embedded SQL’)
per te mbushur nje tabele me te dhena qe zakonisht jepen direkt nga
perdoruesi me ane te nje formi ose maske.
Menyra e dyte lejon vendosjen e te dhenave qe ekzistojne ne brendesi
te DB.
Baze Te Dhenash
Perditesimi i te dhenave ne SQL: vendosja - 2
te DB.
Atributeve qe nuk u jepet nje vlere u vendoset vlera default dhe ne
rast se nuk ka nje vlere default vendoset vlera NULL. Ne rast se shkel
nje perkufizim NOT NULL atehere vendosja nuk kryhet nga DBMS.
Korrespondenza midis atributeve dhe vlerave qe duhen vendosur
jepet sipas radhes qe atributet kane ne tabele.
37
Komanda per fshirjen e rreshtave te nje tabele:
DELETE FROM emriTabeles [WHERE kushti]
Kjo komande fshin ato rreshta te tabeles ku plotesohet kushti; ne rast
se nuk vendoset klauzola WHERE atehere komanda fshin te gjitha
rreshtat e tabeles.
Ne qoftese ekziston nje perkufizim interrelacional me politeke
Baze Te Dhenash
Perditesimi i te dhenave ne SQL: fshirja
Ne qoftese ekziston nje perkufizim interrelacional me politeke
CASCADE atehere fshirja do te perhapet dhe ne tabela te tjera sipas
celesave te jashtem qe jane vendosur.
Shembull:fshirja e nje rreshti
DELETE FROM DEPARTAMENTI WHERE d_emer = ' Inxhinieria'
38
Ne klausolen WHERE mund te vendosen edhe pyetje SQL te nidifikuara
qe mund te referohen ne tabela te tjera.
Shembull:fshirja e nje bashkesie rreshtash te nje tabele(te fshihen
departamentet qe nuk kane punonjes)
Baze Te Dhenash
Perditesimi i te dhenave ne SQL: fshirja - 2
DELETE FROM DEPARTAMENTI
WHERE d_numer NOT IN ( SELECT dep
FROM Punonjes)
39
Komanda per modifikimin e rreshtave te nje tabele:
UPDATE emriTabeles
SET Atributi = < vlera | SelectSQL | NULL | DEFAULT >
[ WHERE Kushti ]
UPDATE lejon modifikimin e nje ose me shume atributeve qe plotesojne
Baze Te Dhenash
Perditesimi i te dhenave ne SQL: modifikimi
UPDATE lejon modifikimin e nje ose me shume atributeve qe plotesojne
kushtin ne klausolen WHERE. Ne rast se mungon klausola WHERE atehere
modificohen te gjitha rreshtat e tabeles.
Vlera e re mund te jete:
-resultati i vleresimit te nje espresioni mbi atributet e tabeles
-resultati i nje pyetje SQL
-vlera NULL
-vlera DEFAULT per dominin
40
Shembull: modifikimi i nje rreshti te vetem(te rritet rroga me 5000 leke
per punonjesin KJDSH45735)
UPDATE Punonjesi
SET rroga = rroga + 5000
WHERE ID = KJDSH45735
Baze Te Dhenash
Perditesimi i te dhenave ne SQL: modifikimi - 2
Shembull: modifikimi i nje bashkesie rreshtash(te rritet me 10% rroga
e te gjithe punonjesve te departamentit Inxhinieria)
UPDATE Punonjesi
SET rroga = rroga * 1.1
WHERE dep = ‘Inxhinieria’
41