SQL Server

SELECT - daha sonra və daha dərin

SELECT - daha sonra və daha dərin

Transact-SQL-in əsasları olan SELECT əmrinin imkanlarını öyrənməyi davam edək. O ciddi müəyyən edilmiş məlumatların cədvəldən çıxartmaq xassəsinə malikdir. Başlanğıc üçün cədvəldən müəyyən edilmiş sütunların seçilməsinə baxaq. Bu SELECT əmrindən sütunların çıxarılması ilə əldə edilir.
Sual:

SELECT sname, comm
FROM Salespeople

Nəticə aşağıdakı kimi olacaq:

sname    comm
-------- -----------
Иванов   12
Петров   13
Егоров   10
Сидоров  11
Шилин    15

DISTINCT - sizin SELECT əmrində olan təkrar olunan qiymətlərin aradan qaldırılmasını təmin edir. Tutaq ki siz bilmək istəyirsiniz ki hal hazırda hansı agentlərin sizin sifariş cədvəlinizdə sifarişçiləri var. Sizə agentlərin neçə sifarişi olduğu bilmək lazım deyil, sizə sadəcə olaraq agentlərin kodları (snum) lazımdır. Bunun üçün siz növbətiləri daxil edəcəksiniz:

SELECT snum
FROM Orders

və belə nəticə alacaqsınız:

snum        
----------- 
1007
1004
1001
1002
1007
1002
1001
1003
1002
1001

Gördüyünüz kimi kodlar təkrar olunurlar. Təkrarsız siyahının alınması üçün növbətiləri daxil etmək lazımdır:

SELECT DISTINCT snum
FROM Orders

Artıq nəticə ayrı cürdür:

snum
-----------
1001
1002
1003
1004
1007

DISTINCT-i SELECT əmrində yalnız bir dəfə istifadə etmək olar. Əgər bir neçə sütun seçilibsə onda DISTINCT tam eyni olan sətirləri çıxardır. Bir neçə qiymətləri eyni olan sətirlər qalacaqlar.

DISTINCT yerinə siz ALL göstərə bilərsiniz. Bu əks təsir edəcək, sətirlərin oxşarlığı yadda qalacaq. Bu heç bir arqumentin yazılmamasına oxşayır. Ona görə də ALL sadəcə olaraq başa salıcı arqumentdir.

Cədvəllər çox böyük olmaq meylinə malikdirlər. Bir halda ki sizi onlardan bəziləri maraqlandırır onda bu sətirləri seçmək üçün qayda təyin etmək imkanı var.

WHERE - cədvəlin ixtiyari sətiri üçün qayda təyin edən və doğru və ya yalnış olan SELECT əmrinin təklifidir. Əmrə yalnız cədvəlin verilmiş sətirləri yerinə yetirən sətirlərini yetirən sətirləri verir. Tutaq ki siz Moskvada olan agentlərin ad və komissiyonnularının adlarını görmək istəyirsiniz. Bundan sadə heç nə yoxdur:

SELECT sname, city
FROM Salespeople
WHERE city = 'Москва'

Sualda WHERE təklifi olanda SQL Server bütün cədvələ sətir-sətir baxır və hər bir sətirdə verilmiş təklifin doğruluğunu yoxlayır.

Qeyd
'Москва' tipli sətir konstantları Transact-SQL-də apostrof ', və ya dırnaq" ilə məhdudlaşırlar.

İndi isə WHERE təklifini rəqəm tipli ədədlər üçün qurmağa çalışaq. Sifarişçilər (Customers) cədvəlinin rating sütununun sifarişçiləri bu ədədlərin köməkliyi ilə bir neşə kriteriyaya əsaslanmış qruplara bölmək üçün təyin olunub. Məsələn bu əvvəlki sifarişlərin ölçüsündən aslı olan kreditin qiymətlənməsi və qiyməti forması ola bilər. Reytinqi 100 olan bütün sifarişçiləri seçək:

SELECT *
FROM Customers
WHERE rating = 100

Burda dirnaq işarəsindən istifadə olunmur, yəni ki - bunlar ədəd tiplidirlər. Sorğunun nəticəsi:

CNUM  CNAME              CITY    RATING      SNUM
----- ------------------ ------- ----------- -----------
2001  ТОО Рога и копыта  Москва  100         1001
2006  Clemens            Лондон  100         1001
2007  ОАО "ООО"          ТОМСК   100         1004

İndi siz cədvələ sizə lazım olan informasiyanın sizə verilməsi üçün onu necə məcbur etmək üsullarını bilirsiniz. Əsas olur ki siz cədvəldən min sətir içərisindən birini seçmək üsulunu bilirsiniz. Şərtlər çətin ola bilər, lakin elə bu SQL dilini daha güclü edir.