Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

पेजिनेशन क्वेरी में ROWNUM कैसे काम करता है?

आपके 4 प्रश्न हैं, और सभी ROWNUM . के उपयोग और कार्यक्षमता के इर्द-गिर्द घूमते हैं . मैं एक-एक करके प्रत्येक प्रश्न का उत्तर दूंगा।

<ब्लॉकक्वॉट>

क्यों (यह मेरा पहला प्रयास था जब तक कि मैं SO पर खोज नहीं करता) * उस व्यक्ति से चुनें जहां पंक्तिबद्ध> 100 और पंक्ति संख्या <110; 0 पंक्तियाँ लौटाता है?

थॉमस कायटे द्वारा ROWNUM और पेजिनेशन के बारे में अच्छी व्याख्या यहाँ।

एक ROWNUM विधेय चरण . से गुजरने के बाद मान एक पंक्ति को असाइन किया जाता है क्वेरी की लेकिन क्वेरी से पहले कोई सॉर्टिंग या एकत्रीकरण करता है। साथ ही, एक ROWNUM मान असाइन किए जाने के बाद ही बढ़ता है, यही कारण है कि निम्न क्वेरी कभी भी एक पंक्ति नहीं लौटाएगी:

select * 
  from t 
 where ROWNUM > 1;

क्योंकि पहली पंक्ति के लिए ROWNUM> 1 सत्य नहीं है, ROWNUM 2 तक आगे नहीं बढ़ता है। इसलिए, कोई भी ROWNUM मान कभी भी 1 से अधिक नहीं हो सकता है।

<ब्लॉकक्वॉट>

कुछ ऐसा करने का कोई आसान तरीका क्यों नहीं है जैसे Select ... FROM ... WHERE rownum BETWEEN निचलाबाउंड और अपरबाउंड ?

हाँ वहाँ है। Oracle 12c . से आगे, आप नई टॉप-एन रो लिमिटिंग . का उपयोग कर सकते हैं विशेषता। मेरा उत्तर यहाँ देखें।

उदाहरण के लिए, नीचे दी गई क्वेरी कर्मचारियों को चौथे उच्चतम . के बीच लौटाएगी सातवें उच्चतम वेतन . तक आरोही क्रम में:

SQL> SELECT empno, sal
  2  FROM   emp
  3  ORDER BY sal
  4  OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

     EMPNO        SAL
---------- ----------
      7654       1250
      7934       1300
      7844       1500
      7499       1600

SQL>
<ब्लॉकक्वॉट>

परिणामी मूल्यों में r कॉलम से कैसे छुटकारा पाएं?

select * , बाहरी क्वेरी में आवश्यक कॉलम नामों को सूचीबद्ध करें। बार-बार क्वेरी का उपयोग करने के लिए, एक दृश्य बनाना एक साधारण एक बार की गतिविधि है।

वैकल्पिक रूप से, SQL*Plus . में आप NOPRINT . का उपयोग कर सकते हैं आज्ञा। यह उस कॉलम नाम को प्रदर्शित नहीं करेगा जिसे आप प्रदर्शित नहीं करना चाहते हैं। हालांकि, यह केवल SQL*Plus में काम करेगा।

उदाहरण के लिए,

COLUMN column_name NOPRINT

उदाहरण के लिए,

SQL> desc dept
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------
 DEPTNO                                             NUMBER(2)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(13)

SQL> COLUMN dname NOPRINT
SQL> COLUMN LOC NOPRINT
SQL> SELECT * FROM dept;

    DEPTNO
----------
        10
        20
        30
        40

SQL>
<ब्लॉकक्वॉट>

क्या यह सही पेजिनेशन सुनिश्चित करता है?

हाँ, अगर आप पेजिनेशन क्वेरी को सही ढंग से लिखते हैं।

उदाहरण के लिए,

SELECT val
FROM   (SELECT val, rownum AS rnum
        FROM   (SELECT val
                FROM   t
                ORDER BY val)
        WHERE rownum <= 8)
WHERE  rnum >= 5;

       VAL
----------
         3
         3
         4
         4

4 rows selected.

SQL>

या, जैसा कि मैंने ऊपर दिखाया है, 12c पर नई पंक्ति सीमित करने की सुविधा का उपयोग करें।

यहां कुछ अच्छे उदाहरण हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विजुअल C# 2008 . में tnsnames.ora को पार्स करना

  2. Oracle में DATEADD () के लिए समतुल्य कार्य

  3. ओरेकल में वैश्विक अस्थायी तालिकाओं से बचने के तरीके

  4. Oracle में सभी तालिकाओं को कैसे सूचीबद्ध करें

  5. निर्देशिका में फाइलों की सूची खोजने में समस्या