Te marrim te dhena nga SQL Server.
Sintaksa e komandes SELECT
SELECT (liste me kollona ose *)
FROM emertabele
WHERE (shprehje llogjike)
.GROUP BY (liste me kollona)
HAVING (shprehje llogjike)
Per shembull per te afishuar te dhenat e punonjesit me kodin 1 do te shkruanim komanden e meposhtme:
SELECT *
FROM employees
WHERE EmployeeId=1
Shprehja llogjike mund te jete e perbere nga disa shprehje llogjike te lidhura nepermjet operatoreve llogjike AND,OR. Ne kete rast eshte e rekomandueshme te perdoren kllapat per te percaktuar prioritetin e veprimeve.
Per shembull komanda me poshte afishon listen e punonjesve qe jane zonja ose zonjusha
SELECT *
FROM employees
WHERE TitleOfCourtesy = 'Ms.' OR TitleOfCourtesy = 'Mrs.'
Operatori BETWEEN
Komanda e meposhtme afishon nje liste me punonjesit qe jane marre ne pune vitin e fundit:
SELECT firstname, lastname, hiredate
FROM employees
WHERE hiredate >= ‘1-Jan-2010’ AND hiredate <=‘31-Dec-2010’
Kjo komande mund te shkruhet ne nje menyre me te pembledhur duke perdorur operatorin BETWEEN
SELECT firstname, lastname, hiredate
FROM employees
WHERE hiredate
between ‘1-Jan-2010’ AND ‘31-Dec-2010’
Operatori NOT
Operatori NOT na mundeson llogaritjen e te kundertes se nje shprehje llogjike.
Shembulli i meposhtem, i cili afishon nje liste te punonjesve qe nuk jane marre ne pune vitin e fundit.
SELECT firstname, lastname, hiredate
FROM employees
WHERE hiredate
NOT between ‘1-Jan-2010’ AND ‘31-Dec-2010’
Operatori IN
Operatori IN krahason nje shprehje kundrejt nej liste vlerash. Lista e vlerave mund te jete statike ose nje liste me vlera e kthyer nga nje komande SELECT. Shembujt e meposhtem ilustrojne te dy keto raste:
Komanda e meposhtme afishon te gjithe punonjesite, mbiemri i te cileve nuk ndodhet ne listen (‘Jones’, ‘Smith’, ‘Keenan’)
SELECT firstname, lastname
FROM employees
WHERE lastname NOT IN (‘Jones’, ‘Smith’, ‘Keenan’)
Ndersa komanda e meposhtme afishon nje liste me punonjesit qe nuk kane realizuar asnje shitje
SELECT firstname, lastname
FROM employees
WHERE EmployeeId
NOT IN
(SELECT EmployeeId from Ordes)
Operatori EXISTS
Komanda e meposhtme afishon nje liste me punonjesit qe kane realizuar te pakten nje shitje
SELECT * from Employees
where
exists
(
select * from Orders where Orders.EmployeeID=Employees.EmployeeID
)
Operatoti LIKE
Operatori LIKE eshte nej operator mbi stringjet, dhe mundeson krahasimin e nje stringu(teksti) kundrejt nje maske , qe permban shkronja, numra , shenja pikesimi si edhe disa simbole te vecante si % dhe _ qe quhen wildcards.
Tabela me poshte sqaron funksionin e wildcards
Simboli % nenkupton nje numer variabel simbolesh nga 0 deri ne n.
Simboli _ nenkupton saktesisht nje simbol
psh [a-f] nenkupton nje shkronje nga a deri f
psh [^a-f] nenkupton nje shkronje cfaredo meperkashtim te intervalit a deri f
[abc] nenkupton nje simbol a ose b ose c
[^abc] nenkupton nje simbol cfaredo me perjashtim te a, b dhe c
Shembujt e meposhtem sqarojne funksionin e operatorit LIKE:
Komanda
SELECT * from employees where Firstname like ‘A%’
afishon nje liste te punonjesve emrat e te cileve fillojne me shkronjen A , ndersa komanda e meposhtme:
SELECT * from employees where homephone like ‘(206) _ _ _-_ _ _ _’
afishon nje liste te punonjesve te cilet e kane numrin e telefonit me prefix (206) , e me pas vazhdon me 3 shifra, vazhdon me simbolin - dhe me pas ka kater shifra.
Operatori IS NULL
Per te testuar nese nje kollone e caktuar ka vleren NULL duhet te perdorim operatorin IS NULL (ose IS NOT NULL kur duam te gjejme vlera jo boshe).
Nuk eshte e mundur te krahasojme per vlera NULL me shenjen e barazimit.
Homephone=NULL konsiderohet gabim , shkrimi korrekt do te ishte Homephone IS NULL
Per shembull, komanda e meposhtme:
SELECT * from Employees where Birthdate IS NULL
afishon nje liste te punonjesve per te cilet nuk e kemi te regjistruar datelindjen, ndersa komanda e meposhtme:
SELECT * from Employees where Birthdate
IS NOT NULL
afishon nje liste te punonjesve per te cilet e kemi te regjistruar datelindjen.
Te rendisim rezultatin nepermjet klauzoles ORDER BY
Klauzola Order By, mundeson te rendisim rezultatin e nje query sipas nje ose disa kollonash.
ASC - ASCENDING, percakton rendin rrites ndersa
DESC - DESCENDING, percakton rendin zbriter
Nese nuk e percaktojme SQL nenkupton qe po kerkojme ti rendisim rreshtat ne rendin rrites ASC.
Per shembull, komanda e meposhtme:
SELECT firstname, lastname
FROM Employees
ORDER BY firstname
afishon nje liste te punonjesve te renditur sipas emrit te tyre ne rendin rrites (A->Z), ndersa komanda e meposhtme:
SELECT firstname, lastname
FROM Employees
ORDER BY firstname DESC ,lastname ASC
afishon nje liste te punonjesve te renditur sipas emrit te tyre ne rendin zbrites(Z->A) dhe me pas sipas mbiemrit ne rendin rrites (A->Z)
Funksionet e Grupit
Ka disa funksione te SQL qe aplikohen mbi grupet e rreshtave. Keto funksione si psh SUM, COUNT etj, shoqerohen me klauzolen GROUP BY.
Tabela me poshte paraqet nje pershkrim te funksioneve te grupit:
AVG - Mesatarja
COUNT - Numeron vlerat
MAX - maksimumi
MIN - minimumi
SUM - shuma
STDEV - Deviacioni standart (statitike)
VAR - Varianca ( statistike )
Ne rastin e SELECT te shoqeruar me Group By, vetem kollonat qe ndodhen ne listen e GROUP BY mund te jene ne listen e kollonave te SELECT.
Rezultatet pas grupimit mund te filtrohen nepermjet HAVING BY, e cila eshte e ngjashme me WHERE, por ne dallim nga kjo e fundit aplikohet pas llogaritjes se rezultateve mbi rreshtat e grupuara.
Per shembull, komanda e meposhtme afishon numrin e shitjeve per cdo kod punonjesi:
SELECT EmployeeId,
Count(*) ‘NoOfOrdersHeDealed’
from Orders
Group by (EmployeeId)
ndersa komanda e meposhtme afishon kodin e nje porosise dhe vleren financiare te saj si total
SELECT OrderId,SUM(Quantity*UnitPrice) 'totalamount' from [Order Details]
Group by OrderID
Ndersa komanda e meposhtme afishon vetem kodet e punonjesve qe kane bere me shume se 10 shitje:
SELECT EmployeeId,
Count(*) ‘NoOfOrdersHeDealed’
from Orders
Group by (EmployeeId)
Having Count(*) >10