Professional Documents
Culture Documents
SQL Urdheresat PDF
SQL Urdheresat PDF
IT Software Developer
Prishtine – 2001,2002
Verzioni : 1.0
Structured
Query
Language
00 - Permbajtja
01 - Hyrja
02 - SELECT
03 - WHERE
04 - INSERT INTO
05 - UPDATE
06 - ORDERED BY
07 - AND & OR
08 - BETWEEN .. AND
09 - Aliases
10 - JOIN
11 - CREATE
12 - ALTER
13 - Agregate Functions
14 - GROUP BY
15 - SELECT INTO
Valon Hoti
SQL Hapat Themelore
SQL Hyrje
Pershkrimi se cka eshte SQL dhe si mund te perdoret
SQL SELECT
si te perdoret komanda SELECT per selektimin e te dhenave nga tabelat ne SQL.
SQL WHERE
Si te perdoret klauzula WHERE per percaktimin e kriteriumeve ne tabele
SQL UPDATE
Si te perdoret komanda UPDATE per te ndrruar shenimet ose rreshtin ne tabel.
SQL DELETE
How to use the DELETE statement to delete rows in a table.
SQL ORDER BY
Si te perdoret komanda ORDER BY te cilat e bejne renditjen sipas nje definicionit te caktuar
SQL BETWEEN...AND
Si te perdoret BETWEEN....AND per te gjetur shenimet e caktuar ne nje rang.
SQL Aliases
Si te perdoren aliaset per kolona dhe tabela
SQL JOIN
Si te selektohen shenimet nga me shume se nje tabel.
SQL CREATE
Si te krijohen bazat e te dhenave ,tabelat si dhe si te fshihen ato.
SQL Functions
Si te perdoren funksionet e ndertuara ne SQL.
SQL GROUP BY
Si te perdoret funksioni GROUP BY ne SQL.
SQL eshte nje ANSI (American National Standards Institute) standard I gjuheve kopmjuterike per qasjen
dhe manipulimin me sistemet e bazave te dhenave. Komandat e SQL perdoren per leximin dhe
ndryshimin e shenimeve ne bazat e te dhenave. SQL punon me bazat e te dhenave sikurs te perogrameve
siq jan MS Access, DB2, Informix, MS SQL Server, Oracle, Sybase, e tjera.
Fatkeqesisht, jane disa verzionet te ndryshme te gjuhes SQL, por per te qen kompatibil me standardin
ANSI, ata duhet te perkrahin fjalet njejta te rezervuara per SQL siq jan SELECT, UPDATE, DELETE,
INSERT, WHERE, edhe te tjera.
Verejtje: Shume programe te baza te dhenave SQL gjithashtu kan ekstenzionet e tyre prioritare si
shtojca ne standardin e SQL.
Nje baze e te dhenave shpesh permban 1 ose me shume tabela. Secila table identifikohet me emrin e
tij(p.sh.. "Personet" or "Porosit"). Tabelat permbajne rekorde(reshta) me shenime.
Tabela siq shihet permban tre rekorde (nje per secilin person) dhe kater kolona (Mbiemri, Emri, Adresa,
dhe Qyteti).
SQL Pytesoret
Pytesori si kjo:
Mbiemri
Hoti
Ademi
Fejza
Verejtje: Disa sisteme te bazave te dhenave kerkojne qe ne fund te komandave te ju vendoset presja
ose pikepresja.Ne kete tutorial nuk kemi vendosur presje ose pikepresje.
SQL (Structured Query Language) eshte nje sintakse per ekzukutimin e pyetesoreve. Por SQL gjuhet
permbajne sintaksen per ndrrim, vendosje, dhe fshirje te recordeve.
Keto komanda se bashku e formojne “Data Manipulation Language (DML)” pjese e SQL
“Data Definition Language (DDL)” eshte pjese e SQL e cila lejon tabelat e bazes se te dhenave te jene te
krijuara apo te fshira. Ne gjithashtu munde te definojme indekset(qeleset), te cilat veqojn lidhjen ne mes
te tabelave si dhe imponojne permbajtjen ne mes tabelave
Komanda SELECT perdoret per te I selektuar shenimet ne tabele. Rezultati tabular eshte I ruajtur
ne tabelat rezultuese (quhet pjesa-rezultat).
Sintaksa:
SELECT emrin_e_kolenes-ave
FROM emri_tabeles
Per te I selektuar kolonat me emra "Mbiemri" dhe "Emri", perdoret komanda SELECT sikurse qe
eshte kjo si vijon:
Tabela "Personet"
Mbiemri Emri
Hoti Valon
Ademi Gzim
Hasani Mimoza
Per te selektuar tere kolonat nga tabela "Personet" perdorim simbolin * ne vend te emrave te
kolonave siq vijon me poshte :
Rezultati prej SQL pyetesoreve eshte I ruajtur ne rang-rezultat. Shumica e sistemeve softuerike te
bazave te dhenave lejon navigimin neper rang-rezultate me funksionet te programuara si p.sh.:
Move-To-First-Record(shko ne fillim te rekordit te pare), Get-Record-Content(lexo permbajtjen e
rekordit), Move-To-Next-Record(shko te tjetri record me radhe), etj.
Per te mesuar rreth ketyre funksioneve se si thirren nga gjuhet programuese e kemi ne tutoriale te
programimit.
Pikepresja eshte menyra standarde per te ndare secilin komande te SQL ne sistemet e bazave te
dhenave duke lejuar ne ate menyre te ekzekutohen me shume se nje komande e SQL ne nje
renditje te nje pas njeshme ne server.
A eshte e nevojshme a jo? Nese perdorim bazat te dhenave sikurse MS Access apo Ms Sql Server
nuk ka nevoj per secilen pikepresje ne secilen komand te SQL , por disa baza te dhenave e shtytin
me force qe te perdoret ajo gjithesesi.
Me SQL, krejt cka nevojitet eshte te shtojme fjalen e rezervuar DISTINCT pas komandes SELECT :
Sintaksa:
Per te selektuar te gjitha vlerat nga tabela qe quhet “Kompanite” ne do te perdorim komanden
SELECT ne kete menyre:
Tabela Porosite
Kompanite NumriPorosise
IT Department 3412
BRK 2312
IT Department 4678
Shtepia Mallrave Lux 6798
Rezultati eshte :
Kompanite
IT Department
BRK
IT Department
Shtepia Mallrave Lux
Rezultati do te jete:
Kompanite
IT Department
BRK
Shtepia Mallrave Lux
Klauzula WHERE
Per te selektuar shenimet nga baza e te dhenave nga nje tabele ne baze te nje kushti te caktuar
,atehere e shtojm klauzulen WHERE gjate perdorimit te komandes SELECT .
Sintaksa
Operatori Pershkrimi
= Barbarte
<> Jo Barabarte
> Me e madhe se
< Me e vogel se
>= Me e madhe ose e barabart
<= Me e vogel ose e barabart
BETWEEN Ne mes te rangut
LIKE Sipas nje kushti te per afert
Per te selektuar personet te cilet jetojn ne qytetin "Mitrovica", ne ja shtojme klauzulen WHERE gjate
perdorimit te komandes SELECT :
Tabela “Personet"
Perdorimi I thojzave
SQL per vlerat text perdore thojza te thjeshta (shume sisteme te bazave te dhenave mund te
perdorin edhe thojza te dyfishta “). Ndersa vlerat numerike nuk kan nevoje te futen ne thojza.
Mire :
SELECT * FROM Personet WHERE Emri='Valon'
Keq:
SELECT * FROM Personet WHERE Emri=Valon
Mire:
SELECT * FROM Personet WHERE Viti>1965
Keq:
SELECT * FROM Personet WHERE Viti>'1965'
kushti LIKE
Sintaksa
Shenja "%" mund te perdoret si gjoker (per shenjat qe mungojn perpara apo pas shenimit te
perafert)
perdorimi LIKE
Komanda INSERT INTO perdoret per te shtuar rreshta te reja net abele.
Sintaksa
Ne tabelen "Personet" :
Do te kemi si rezultat:
Tabela "Personet" :
Do te kemi rezultat
Sintaksa
UPDATE emri_tabels
SET emri_kolones = vlera_re
WHERE emri_kolones = vlera_caktuar
Tabela “Personet”:
Rezultaton tabelen:
UPDATE Personet
SET Adresa = 'Soliteri kalter ', Qyteti = 'Prishtine'
WHERE Mbiemri = 'Arifi'
Sintaksa
Tabela “Personet”:
Fshirja e rreshtit
Rezultati do te jete :
Eshte e mundeshme te fshihen te gjitha rreshtat pa e fshire tabelen fare. Kjo do te thot qe atributet
,indekset,struktura do te jete e pa prekur:
Renditja e rreshtave
Klauzula ORDER BY perdoret per rrenditjen ose sortimin e tabeles apo me saktesisht te kolones
Porosite:
Kompanite NumriPorosise
BRK 3412
Ardi 5678
IT Department 2312
IT Department 6798
Shembull
Rezulton tabelen:
Kompanite NumriPorosise
Ardi 5678
BRK 3412
IT Department 6798
IT Department 2312
Shembull 2:
Te paraqiten Kompanite sipas renditje me alphabet dhe numrit te porosive ne renditje numerike:
Kompanite NumriPorosise
Ardi 5678
BRK 3412
IT Department 2312
IT Department 6798
Shembull 3
Rezulton tabelen:
Kompanite NumriPorosise
IT Department 6798
IT Department 2312
BRK 3412
Ardi 5678
Shembull 4
Rezulton tabelen:
Kompanite NumriPorosise
IT Department 2312
IT Department 6798
BRK 3412
Ardi 5678
Operatore AND dhe OR
Operatori AND paraqet rreshta vetem nese te gjitha kushte e listimit jane te plotesuar. Ndersa
operatori OR paraqet rreshtat vetem nese ndonje prej kushteve te listimit jan te plotesuar.
Shembull
Perdorimi i operatorit AND per te paraqitur te gjithe personat qe e kan emrin "Adnan",si dhe qe e
kan mbiemrin "Doroci":
Do te na paraqitet tabela :
Rezultati:
Shembull
Ju gjithashtu munde ti kombinoni operatoret AND dhe OR (duke i perdorur kllapat per format
komplekse te operacioneve):
Rezulton:
Operatoret BETWEEN ... AND selektojn nje range te shenimeve ne mes te dy vlerave te caktuara.
Keto vlera mund te jene numra,tekst ,data.
Shembull 1
Per te I paraqitur ne menyre alfabetike personet prej(duke I perfshi edhe ata) "Hoti" dhe
eksluzivisht "Hoxha", perdoren komandat e SQL siq vijojn me poshte :
Rezulton:
Rezulton:
Sintaksa:
Sintaksa:
Tabela (Personet):
EmriFamiljar EmriPersonal
Doroci Adnan
Ademi Gzim
Arifi Aferdita
Shembull perdorim i tabelave si alias
Tabela (Personet):
Tabela Puntoret:
Mbiemri Emri
Doroci Adnan
Ademi Gzim
Arifi Aferdita
Lidhjet dhe qelesat
Ndonjehere na nevojitet te selektojme shenimet prej dy a me shume tabela per te fituar rezultate te
duhura qe na nevojitetn. Atehere ne e bejme lidhjen ne mes dy a me shume tabelave
Tabelat ne baza te dhenave mundet te kene secila relacionet e veta perms qelesit identifikues. Qelsi
primar eshte nje identifikator unik net abele dhe ka per qellim te I kontrolloj dhe punoj me
shenimet neper tabel pa patur nevoje per perseritjen e te gjitha shenimeve neper secilin tabele.
Ne tabelen me poshte "Puntoret" kolona "Punteori_ID" eshte qelsi, qe nenkupton qe asnje rreshte
ne at tabele nuk mund te kete shenim te njejt . Puntori_ID dallon dy personet nese kane emrin e
njejte.
Puntoret:
Puntori_ID Emri
01 Hoti, Valon
02 Ademi,Gzim
03 Arifi,Luljeta
04 Jonuzi,Ilir
Porosite:
Shembull
Rezultati do te jete
Emri Produktet
Hoti,Valon Printeri
Arifi,Luljeta Tabela
Arifi,Luljeta Karrige
Shembull
SELECT Puntoret.Emri
FROM Puntoret, Porosite
WHERE Puntoret.Puntori_ID=Porosite.Puntori_ID
AND Porosite.Produktet='Printeri'
Rezulton
Emri
Hoti,Valon
Perdorimi i fjales se rezervuar JOIN
Ose ne mund te selektojm shenimet ne dy e me shume tabela duke perdorur fjalen e rezervuar
JOIN ne kete menyre:
Sintaksa
Fjala rezervuar INNER JOIN ka per detyre te kthej rezultatin nga tere reshtat nga te dy tabelat ku
ata jane te njejta. Nese ka rreshta ne tabelen “Puntoret” te cilat nuk perputhen me tabeln “Porosite”
tere ato rreshta nuk do te listohen.
Rezultati
Emri Produktet
Hoti,Valon Printeri
Arifi,Luljeta Tabela
Arifi,Luljeta Karrige
Shembull LEFT JOIN
Sintaksa
Fjala rezervuar LEFT JOIN te gjitha rreshtat prej tabeles (Puntoret), nese ato nuk perputhen me
rreshta e tabeles (Porosite). Nese ekziston ndonje rreshte ne tabelen “Puntoret” e cila nuk
perputhet me at ne tabelen “Porosite” ato do te listohen
Rezultati si vijon
Emri Produktet
Hoti,Valon Printeri
Ademi,Gzim
Arifi,Luljeta Tabele
Arifi,Luljeta Karrige
Jonuzi,Ilir
Shembull RIGHT JOIN
Sintaksa
Fjala rezervuar RIGHT JOIN te gjitha rreshtat nga tabela e dyte(Porosite), vetem nese ato nuk
perputhen me rreshtat e tabeles (Puntoret). Nese ka ndonje rreshte ne tabelen Porosite dhe nuk
perputhet me ate ne tabelen Puntoret, ato rreshta gjithashtu do te listohen.
Rezulton tabelen
Emri Produkti
Hoti,Valon Printeri
Arifi,Luljeta Tabele
Arifi,Luljeta Karrige
Shembull
SELECT Puntoret.Emri
FROM Puntoret
INNER JOIN Porosite
ON Puntoret.Puntori_ID=Porosite.Puntori_ID
WHERE Porosite.Produkti = 'Printer'
Rezulton
Emri
Hoti,Valon
Krijimi i bazes se dhenave
Krijimi i tabeles
Shembull
Ky shembull demonstron se si krijohet tabela me emrin "Personet", e cila ka kater kolona. Emrat e
kolonave do te jene "Mbiemri", "Emri", "Adresa", dhe "Mosha":
Ndersa ky shembull tregon se mund te caktoni gjatesin maksimale per secilen fushe:
Krijimi i indekseve
Indekset krijohen ne tabele per arsye qe ti gjej rreshta ne tabele shume me shpejt. Eshte e
mundeshme qe te krijohen indekset ne nje a me shume kolonat te tabeles, dhe secili indeks mund
te kete emerin e vet. Ata qe I perdorin nuk munde te I shohin indekset por mund te I perdorin per
ta shpejtuar punen gjate punimit me pyetesoret
Verejte: Ndryshimi “freskimi” shenimve ne tabelen me indeksa merr kohe me shume se sa tabela
pa indeksa, kjo eshte per arsye se ndrrimi behet ne te gjitha indekset. Keshtu , te krijohet indekset
veten ne ato kolona ne te cilen do te behet kerkesat per kriteriume.
Indeksi unik
Krijimi i indekseve unike. Indeksi unik nenkupton qe dy rreshta nuk munde te kene vler te njejte.
Krijimi I nje indeksi te thjeshte. Kur perdorimi I fjales se rezervuar UNIQUE nuk eshte bere,
indeksat me vlerat te perseritura jan te lejuara.
Shembull
Nese deshirojm qe vlerat e indekseve te paraqiten ne forme renese “nga fundi deri ne fillim” atehere
ju duhet qe te shtoni fjalen e rezervuar DESC pas emrit te kolones:
Fshirja indeksit
Komanda ALTER TABLE perdoret per shtimin apo largimin e kolonave nga tabela.
Verejtej: Disa sisteme te baza te dhenave nuk lejojn fshirjen e kolonave ne tabelat e bazave te
dhenave(DROP COLUMN emri_kolones).
Personet:
Shembull
Rezulton:
Shembull
Rezulton:
Sintaksa e funksioneve
Tipet e funksioneve
Ka disa tipe themelore te funksioneve ne SQL. Tipet themelore jane siq vijon:
• Funksionet Agregate
• Funksionet Skalare
Funksionet Agregate
Funksionet Agregate punojne me vlera te kolektuara , por si rezultat e kthejne vetem nje vlere.
Verejtej: Nese perdoret me shume artikuj tjere net abele permes komandes SELECT, atehere
SELECT duhe te kete klauzulen GROUP BY!!
Tabela "Personet"
Emri Mosha
Hoti,Valon 34
Beqiri,Agim 45
Dauti,Bekim 19
Funksionet agregate ne MS Access jane :
Function Description
AVG(emri_kolones) Kthen vleren mesatare qe gjindet ne kolone
COUNT(emri_kolones) Kthen numri e rreshtave (pa i numruar rreshtat NULL)
COUNT(*) Kthen numrin e rreshtave gjithesej sa jan ne tabele
FIRST(emri_kolones) Kthen vleren qe gjindet ne rekordin e pare te asaj kolone
LAST(emri_kolones) Kthen vleren qe gjindet ne rekordin e fundit te asaj kolone
MAX(emri_kolones) Kthen vleren me te madhe qe eshte ne at kolone
MIN(emri_kolones) Kthen vleren me te vogel qe eshte ne at kolone
STDEV(emri_kolones)
STDEVP(emri_kolones)
SUM(emri_kolones) Kthen Shumen totale qe eshte ne at kolone
VAR(emri_kolones)
VARP(emri_kolones)
Funksioni Pershkrimi
AVG(emri_kolones) Kthen vleren mesatare qe gjindet ne at kolone
BINARY_CHECKSUM
CHECKSUM
CHECKSUM_AGG
COUNT(emri_kolones) Kthen numrin e rreshtave (pa i numruar rreshtat NULL)
COUN(*) Kthen numrin e rreshtave qe ka ne at tabele
COUNT(DISTINC emri_kolones) Kthen numrin nga Funksioni DISTINC ne kolone
FIRST(emri_kolones) Kthen vleren e pare te rekordit ne at kolone
LAST(emri_kolones) Kthen vleren e fundit te rekordit ne at kolone
MAX(emri_kolones) Kthen vleren maksimale qe gjindet ne at kolone
MIN(emri_kolones) Kthen vleren minimale qe gjindet ne at kolone
STDEV(emri_kolones)
STDEVP(emri_kolones)
SUM(emri_kolones) Kthen shumen totale ne ate kolone
VAR(emri_kolones)
VARP(emri_kolones)
Funksionet Skalare
Funksionet skalare jane funksionet qe punojn me nje vlere te caktuar, dhe kthejn rezultat bazuar
nga vlera hyres.
Funksionet Pershkrimi
UCASE(c) Fushat I kthen ne shkronja te medha
LCASE(c) Fushat I kthen ne shkronja te vogla
MID(c,start[,end]) Nxjerr karakterin e caktuar nga TEKSTI
LEN(c) Kthen gjatesin e tekstit
INSTR(c) Kthen rezultat numeric te pozites se caktuar te nje karakteri ne
tekst
LEFT(c,number_of_char) Kthen pjesen e majte te ndonje teksti te kerkuar
RIGHT(c,number_of_char) Kthen pjesen e djath te ndonje teksti te kerkuar
ROUND(c,decimals) Rumbullakon numrin me pike dhjetore ne nje numer te plote
MOD(x,y) Kthen mbetjen nga rezultati i pjestimit te dy numrave
NOW() Kthen rezultat daten aktuale
FORMAT(c,format) Ndrron menyren e paraqitjes
DATEDIFF(d,date1,date2) Perdoret per kalkulimet ne diference te datave
Funksionet agregate (sikurse SUM) shpesh ka nevoj te ju shtohet GROUP BY
funksionaliteti .
GROUP BY...
GROUP BY... eshte shtuar ne SQL sepse funksionet agregate (sikurse SUM) kthen vlera aggregate
nga kolona sa here te thirret , si dhe pa funksionin GROUP BY eshte e pa mundur te gjendet
shuma per secilin grup individual per vlerat e kolones.
Shembull GROUP BY
Tabela "Shitjet":
Kompanite Sasia
IT Department 5500
Ardi 4500
IT Department 7100
Kthen rezultat:
Kompanit SUM(Sasia)
IT Department 17100
Ardi 17100
IT Department 17100
Rezultati permbi eshte I pakuptueshem dhe nuk eshte me pjese e funksioneve agregate.Prandaj
duhet te perdoret klauzula GROUP BY per te zgjedhur kete problem:
Kompanit SUM(Sasia)
IT Department 12600
Ardi 4500
HAVING...
HAVING... i eshte shtuar SQL sepse fjala e rezervuar WHERE nuk perdoret gjate thirrjeve te
funksionve agregate (sikurse SUM), si dhe pa fjalen e rezervuar HAVING... eshte e pamundur qe te
thirren kushtet per rezultat.
Tabela "Shitjet":
Kompanit Sasia
IT Department 5500
Ardi 4500
IT Department 7100
Na kthehet ky rezultat
Komanit SUM(Sasia)
IT Department 12600
Komanda SELECT INTO
Komanda SELECT INTO shpesh perdoret per te krijuar kopje rezerver te arkivuara te tabelave per
arkivimin e rekordeve.
Sintaksa
Klauzula IN munde te perdoret nese e kopjojm tabelen nje baze te dhenave tjeter:
Nese doni te i kopjoni vetem sa fusha ate munde te e beni duke I listuar ato, me ndihmen e
komandes SELECT :
Ju gjithashtu mund te perdorni klauzulen WHERE. Shikoni kete shembull p.sh. tabela
"Personet_kopjarezerve" me dy kolona (Emri dhe Mbiemri) duke I nxjerr vetem personet qe jetojn
ne "Mitrovice" nga tabela "Personet":
Selektimi i shenimeve nga me shume tabela gjithashtu eshte e mundeshme. Shembulli I ardheshem
krijon kopjen ne nje tabele te re "Porosite_e_puntoreve_kopja" e cila permban shenimet prej dy
tabelave Puntoret dhe Porosite:
SELECT Puntoret.Emri,Porosite.Produkti
INTO Porosite_e_puntoreve_kopja
FROM Puntoret
INNER JOIN Porosite
ON Puntoret.Puntori_ID=Porosite.Puntori_ID