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.
No comments:
Post a Comment