Oracle 12c versiyasında Top N Selectlərin tərtibi
Oracle 12c versiyasında SQL –də edilmiş yeniliklərdən biri də Top N selectlərin tərtibindədir.
İzaha keçməzdən əvvəl aşağıda göstərilən cədvəli yaradaq, göstərilən insert əmrlərini yerinə yetirək və izahı həmin cədvəlin üzərində aparaq.
–cədvəlin yaradılması
create table test1(id number, name varchar2(10));
–sətrlərin cədvələ əlavə edilməsi
insert into test1 values(1,’A’);
insert into test1 values(2,’B’);
insert into test1 values(3,’C’);
insert into test1 values(4,’D’);
insert into test1 values(4,’E’);
insert into test1 values(4,’F’);
insert into test1 values(5,’G’);
insert into test1 values(6,’H’);
12c versiyasına qədər Top N tipli select əmrləri yazmaq üçün inline view istifadə edilirdi.
Məsələn, Test1 cədvəlindən İD üzrə sıralamada ilk 4 (ən kiçik İD-li) sətri çıxaran select əmrini aşağıdakı kimi yaza bilərdik:
–ilk 4 sətri çıxaran sql (12c-dən əvvəlki versiyalarda)
select * from (select * from test1 order by id)
where rownum<=4;
Nəticə:
Oracle 12c versiyasında isə Top N select-lərini yazmaq daha asanlaşdırılıb.
Belə ki, yeni offset N rows, fetch next N rows only, fetch first N rows only, fetch next N percent rows only, fetch first N percent rows only, fetch next N rows with ties, fetch next N percent rows with ties ifadələrini istifadə etməklə daha asan şəkildə Top N selectləri yaza bilərik. Aşağıda hər bir ifadənin mənasını və nümunəsini izləyə bilərik.
1.offset N rows – müəyyən olunmuş sıralama üzrə N sətirdən sonraki sətirləri çıxarmaq üçün istifadə olunur.
–ilk 2 sətri nəzərə almamaqla, digər sətrləri çıxaran sql
select * from test1 order by id offset 2 rows;
Nəticə: İD-si 1 və 2 olan (ilk 2) sətirlər çıxmayıb.
2.fetch next N rows only – müəyyən olunmuş sıralama üzrə ilk N sayda sətirləri çıxarmaq üçün istifadə olunur.
–ilk 4 sətri çıxaran sql
select * from test1 order by id fetch next 4 rows only;
Nəticə: İD üzrə sıralama aparılır və yalnız ilk 4 sətr çıxır.
Qeyd: next fetch ifadəsini next first ifadəsi ilə əvəz etmək olar. Eyni nəticə çıxaracaq.
–ilk 4 sətri çıxaran sql
select * from test1 order by id fetch first 4 rows only;
Nəticə: (ilk 4 sətr)
3.fetch next N percent rows only – müəyyən olunmuş sıralama üzrə ilk N faiz (ümumi sətr sayına nisbətdə) sayda sətirləri çıxarmaq üçün istifadə olunur.
— ümumi sətr sayının 25%-i qədər sayda ilk sətrləri çıxarır
select * from test1 order by id fetch next 25 percent rows only;
Nəticə: cədvəldə cəmi 8 sətr, 8-in 25%-i =2 sətr
4.fetch next N rows with ties – müəyyən olunmuş sıralama üzrə ilk N sayda sətirləri çıxarmaq üçün istifadə olunur. Əgər sonuncu (N-ci) sətrin sıralanma aparılan sütun üzrə təkrarları varsa, sətir sayı N-dən çox ola bilər.
/* ilk 4 sətri çıxaran sql, sıralama aparılan sütuna görə sonuncu sətrin təkrarları varsa,
hamısı çıxacaq, yəni say 4-dən çox da ola bilər*/
select * from test1 order by id fetch next 4 rows with ties;
Nəticə: siralama İD sütununa görə təyin olunub (order by İD). İD = 4 olan sətirlər hamsı çıxır. Sətirlərin sayı 4-dən çoxdur (6 sətr)
Mövzuda hər hansı anlaşılmazlıq yaranardığı halda, zəhmət olmasa, fikirlərinizi bölüşəsiniz.
Comments: 3
Tesekkur edirem, Shahin m.
Cox faydali oldu.
Diqqətinizə görə minnətdaram.
Təşəkkür edirəm. Çox faydalı məlumat oldu mənim üçün.