SQL-də ən yaxşı maddə

Bu bənd sorğunun ilk N sayını göstərmək üçün istifadə olunur. SQL, TOP bəndini dəstəkləmir. Ancaq ROWNUM istifadə edir.

BOOK_COPY -dan ilk 5 qeydi almaq üçün sorğu yazın masaları əvvəlcə ROWNUM olmadan bir sorğu yazaq.

SELECT * FROM BOOK_COPY
  WHERE TO_CHAR (RECEIVED_DATE, 'YYYY') = '2014';


SELECT * FROM BOOK_COPY
  WHERE TO_CHAR (RECEIVED_DATE, 'YYYY') = '2014';

İndi ROWNUM bəndinin nəticəyə nə etdiyini görə bilərik. Nəticə dəstindən ilk 5 qeydləri göstərdi. Nəticələri çeşidləmir, ancaq nəticə setindən ilk 5 qeydləri seçir.

Aşağıdakı sorğunu nəzərdən keçirin.

SELECT * FROM BOOKS
WHERE ROWNUM = 3;

Bu sorğular cədvəldən heç bir qeyd gətirmədi. Niyə? ROWNUM yalançı bir sütundur və DB, cədvəl və ya digər DB obyektləri ilə heç bir əlaqəsi yoxdur. Sorğu icra edildikdə dəyər alır. Yəni, sorğu icra edildikdə və nəticələnən qeydləri əldə etdikdə, ROWNUM dəyəri bir artırılır. Bu səbəbdən sorğuda ROWNUM <5 dedikdə, şərt yerinə yetirilənə qədər ROWNUM dəyərlərini yoxlayır və 4 qeyd göstərir. Ancaq ROWNUM = 3 yazdıqda və sorğu icra edildikdə, seçilmiş sorğunu yerinə yetirir, sorğunun ilk qeydini alır, sonra ROWNUM 1 olur və ROWNUM = 3 yoxlayır? 1 = 3 olan səhvdir və birinci sətri atır, sorğunun ikinci sətrini alır, çünki birinci sətir bizdən 1-i YALDIRILDI və yenidən satırın atılmasını təmin edən 1 = 3 yoxlayın. Bu proses bütün qeydlər axtarılana və sorğunun bütün qeydləri atılana qədər davam edir. Buna görə heç bir nəticə göstərilmir. Eyni yoxlama ROWNUM> 3 istifadə edildikdə olur, yəni; sorğu hər qeyd üçün 1> 3 yoxlayır və qeydləri atır. Buna görə ROWNUM-da>,> = və ya operatorla sorğu etdikdə heç bir qeyd əldə etmirik. ROWNUM ilə yalnız <= və <operatorları istifadə edilə bilər.

Şərh yaz

Translate »