आपके 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 पर नई पंक्ति सीमित करने की सुविधा का उपयोग करें।
यहां कुछ अच्छे उदाहरण हैं।