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

शीर्ष खंड का उपयोग करके SQL सर्वर क्वेरी में लौटाई गई पंक्तियों को सीमित करें

SQL सर्वर में, आप TOP . का उपयोग कर सकते हैं एक क्वेरी परिणाम सेट से लौटाई गई पंक्तियों को सीमित करने के लिए खंड। यह क्लॉज LIMIT के समान कार्यक्षमता प्रदान करता है MySQL में, और ROWNUM Oracle में, हालांकि इनमें से प्रत्येक के कार्य करने के तरीके में अंतर है।

नीचे TOP . का उपयोग करने के उदाहरण दिए गए हैं SQL सर्वर में सेट परिणाम को सीमित करने के लिए क्लॉज।

उदाहरण 1 - मूल उपयोग

यहां एक बुनियादी उदाहरण दिया गया है कि कैसे TOP काम करता है:

SELECT TOP(3) * 
FROM Albums;

परिणाम:

+-----------+-----------------------+---------------+------------+-----------+
| AlbumId   | AlbumName             | ReleaseDate   | ArtistId   | GenreId   |
|-----------+-----------------------+---------------+------------+-----------|
| 1         | Powerslave            | 1984-09-03    | 1          | 1         |
| 2         | Powerage              | 1978-05-05    | 2          | 1         |
| 3         | Singing Down the Lane | 1956-01-01    | 6          | 3         |
+-----------+-----------------------+---------------+------------+-----------+

इस मामले में मैंने परिणामों को केवल तीन पंक्तियों तक सीमित कर दिया।

चलिए फिर से क्वेरी चलाते हैं, लेकिन इस बार TOP . के बिना खंड:

SELECT * 
FROM Albums;

परिणाम:

+-----------+--------------------------+---------------+------------+-----------+
| AlbumId   | AlbumName                | ReleaseDate   | ArtistId   | GenreId   |
|-----------+--------------------------+---------------+------------+-----------|
| 1         | Powerslave               | 1984-09-03    | 1          | 1         |
| 2         | Powerage                 | 1978-05-05    | 2          | 1         |
| 3         | Singing Down the Lane    | 1956-01-01    | 6          | 3         |
| 4         | Ziltoid the Omniscient   | 2007-05-21    | 5          | 1         |
| 5         | Casualties of Cool       | 2014-05-14    | 5          | 1         |
| 6         | Epicloud                 | 2012-09-18    | 5          | 1         |
| 7         | Somewhere in Time        | 1986-09-29    | 1          | 1         |
| 8         | Piece of Mind            | 1983-05-16    | 1          | 1         |
| 9         | Killers                  | 1981-02-02    | 1          | 1         |
| 10        | No Prayer for the Dying  | 1990-10-01    | 1          | 1         |
| 11        | No Sound Without Silence | 2014-09-12    | 9          | 4         |
| 12        | Big Swing Face           | 1967-06-01    | 4          | 2         |
| 13        | Blue Night               | 2000-11-01    | 12         | 4         |
| 14        | Eternity                 | 2008-10-27    | 12         | 4         |
| 15        | Scandinavia              | 2012-06-11    | 12         | 4         |
| 16        | Long Lost Suitcase       | 2015-10-09    | 7          | 4         |
| 17        | Praise and Blame         | 2010-06-26    | 7          | 4         |
| 18        | Along Came Jones         | 1965-05-21    | 7          | 4         |
| 19        | All Night Wrong          | 2002-05-05    | 3          | 2         |
| 20        | The Sixteen Men of Tain  | 2000-03-20    | 3          | 2         |
| 21        | Yo Wassup                | 2019-03-12    | 9          | 3         |
| 22        | Busted                   | 1901-05-11    | 9          | 3         |
+-----------+--------------------------+---------------+------------+-----------+

इसलिए हम देख सकते हैं कि पहली क्वेरी एक बड़े सेट से केवल पहले तीन लौटाती है।

उदाहरण 2 - खंड के अनुसार आदेश का उपयोग करना

माइक्रोसॉफ्ट का कहना है कि हमेशा ORDER BY . का उपयोग करना सबसे अच्छा अभ्यास है TOP . का उपयोग करते समय खंड। ऐसा इसलिए है, क्योंकि यह अनुमान लगाने का एकमात्र तरीका है कि कौन सी पंक्तियाँ TOP . से प्रभावित हैं ।

इसलिए, हम निम्नलिखित के लिए पहला उदाहरण फिर से लिख सकते हैं:

SELECT TOP(3) * 
FROM Albums
ORDER BY AlbumId;

परिणाम:

+-----------+-----------------------+---------------+------------+-----------+
| AlbumId   | AlbumName             | ReleaseDate   | ArtistId   | GenreId   |
|-----------+-----------------------+---------------+------------+-----------|
| 1         | Powerslave            | 1984-09-03    | 1          | 1         |
| 2         | Powerage              | 1978-05-05    | 2          | 1         |
| 3         | Singing Down the Lane | 1956-01-01    | 6          | 3         |
+-----------+-----------------------+---------------+------------+-----------+

यह समझना महत्वपूर्ण है कि ऑर्डरिंग परिणामों को कैसे प्रभावित करता है। अन्यथा आप अप्रत्याशित परिणामों के साथ समाप्त हो सकते हैं।

अगर मैं फिर से उसी क्वेरी का उपयोग करता हूं, लेकिन एक अलग कॉलम द्वारा ऑर्डर करता हूं तो यहां क्या होता है:

SELECT TOP(3) * 
FROM Albums
ORDER BY ArtistId;

परिणाम:

+-----------+-------------------+---------------+------------+-----------+
| AlbumId   | AlbumName         | ReleaseDate   | ArtistId   | GenreId   |
|-----------+-------------------+---------------+------------+-----------|
| 1         | Powerslave        | 1984-09-03    | 1          | 1         |
| 7         | Somewhere in Time | 1986-09-29    | 1          | 1         |
| 8         | Piece of Mind     | 1983-05-16    | 1          | 1         |
+-----------+-------------------+---------------+------------+-----------+

क्रम में सम्मिलित करना, हटाना और अद्यतन करना

ध्यान दें, हालांकि आप TOP . का उपयोग कर सकते हैं INSERT में क्लॉज , UPDATE , MERGE , और DELETE कथन, आप सीधे ORDER BY निर्दिष्ट नहीं कर सकते हैं इन बयानों में खंड। हालांकि, आप अर्थपूर्ण कालानुक्रमिक क्रम में पंक्तियों को सम्मिलित करने, हटाने या संशोधित करने के लिए उप-चयन कथन का उपयोग कर सकते हैं।

उदाहरण 3 - WITH TIES तर्क का उपयोग करना

आप वैकल्पिक WITH TIES . का उपयोग कर सकते हैं सीमित परिणाम सेट में अंतिम स्थान के लिए टाई करने वाली सभी पंक्तियों को वापस करने का तर्क। ORDER BY . का उपयोग करते समय यह केवल लागू होता है (और केवल उपयोग किया जा सकता है) खंड।

यदि ORDER BY WITH TIES . का उपयोग करके क्लॉज दो या दो से अधिक पंक्तियों को अंतिम स्थान के लिए टाई करने का कारण बनता है , उन सभी को वापस कर देगा। यह वास्तव में आपके द्वारा निर्दिष्ट की तुलना में अधिक पंक्तियों को वापस करने का कारण बन सकता है।

इसे एक उदाहरण से आसानी से समझाया जा सकता है।

SELECT TOP(3) WITH TIES *
FROM Albums
ORDER BY ArtistId;

परिणाम:

+-----------+-------------------------+---------------+------------+-----------+
| AlbumId   | AlbumName               | ReleaseDate   | ArtistId   | GenreId   |
|-----------+-------------------------+---------------+------------+-----------|
| 1         | Powerslave              | 1984-09-03    | 1          | 1         |
| 7         | Somewhere in Time       | 1986-09-29    | 1          | 1         |
| 8         | Piece of Mind           | 1983-05-16    | 1          | 1         |
| 9         | Killers                 | 1981-02-02    | 1          | 1         |
| 10        | No Prayer for the Dying | 1990-10-01    | 1          | 1         |
+-----------+-------------------------+---------------+------------+-----------+

यहां, मैं निर्दिष्ट करता हूं कि केवल शीर्ष 3 पंक्तियों को वापस किया जाना चाहिए, लेकिन 5 वास्तव में वापस आ गए हैं। ऐसा इसलिए है क्योंकि एक ही कलाकार आईडी का उपयोग करने वाली 5 पंक्तियाँ हैं, और इसलिए पंक्तियाँ 3 - 5 सभी अंतिम स्थान के लिए बाँध रही हैं। इस मामले में मैं WITH TIES का उपयोग करता हूं उन सभी को वापस करने के लिए।

अगर मैं WITH TIES हटा दूं , केवल 3 पंक्तियाँ लौटाई जाती हैं:

SELECT TOP(3) *
FROM Albums
ORDER BY ArtistId;

परिणाम:

+-----------+-------------------+---------------+------------+-----------+
| AlbumId   | AlbumName         | ReleaseDate   | ArtistId   | GenreId   |
|-----------+-------------------+---------------+------------+-----------|
| 1         | Powerslave        | 1984-09-03    | 1          | 1         |
| 7         | Somewhere in Time | 1986-09-29    | 1          | 1         |
| 8         | Piece of Mind     | 1983-05-16    | 1          | 1         |
+-----------+-------------------+---------------+------------+-----------+

ध्यान दें कि WITH TIES तर्क केवल SELECT . में निर्दिष्ट किया जा सकता है कथन, और केवल तभी जब वे ORDER BY . का उपयोग करते हैं खंड। साथ ही, अभिलेखों को बांधने का लौटाया गया क्रम मनमाना है।

उदाहरण 4 - प्रतिशत का उपयोग करना

आपके पास पंक्तियों की निर्धारित संख्या के बजाय प्रतिशत मान निर्दिष्ट करने का विकल्प भी है। ऐसा करने के लिए, PERCENT . का उपयोग करें तर्क।

उदाहरण:

SELECT TOP(10) PERCENT * 
FROM Albums
ORDER BY AlbumId;

परिणाम:

+-----------+-----------------------+---------------+------------+-----------+
| AlbumId   | AlbumName             | ReleaseDate   | ArtistId   | GenreId   |
|-----------+-----------------------+---------------+------------+-----------|
| 1         | Powerslave            | 1984-09-03    | 1          | 1         |
| 2         | Powerage              | 1978-05-05    | 2          | 1         |
| 3         | Singing Down the Lane | 1956-01-01    | 6          | 3         |
+-----------+-----------------------+---------------+------------+-----------+

ध्यान दें कि भिन्नात्मक मानों को अगले पूर्णांक मान तक पूर्णांकित किया जाता है। इस मामले में, 22 पंक्तियों में से 10 प्रतिशत 2.2 है, लेकिन क्योंकि इसे गोल किया गया था, हम 3 पंक्तियों के साथ समाप्त होते हैं।

इसलिए प्रतिशत को दोगुना करने से पंक्तियों की संख्या दोगुनी होने की आवश्यकता नहीं है:

SELECT TOP(20) PERCENT * 
FROM Albums
ORDER BY AlbumId;

परिणाम:

+-----------+------------------------+---------------+------------+-----------+
| AlbumId   | AlbumName              | ReleaseDate   | ArtistId   | GenreId   |
|-----------+------------------------+---------------+------------+-----------|
| 1         | Powerslave             | 1984-09-03    | 1          | 1         |
| 2         | Powerage               | 1978-05-05    | 2          | 1         |
| 3         | Singing Down the Lane  | 1956-01-01    | 6          | 3         |
| 4         | Ziltoid the Omniscient | 2007-05-21    | 5          | 1         |
| 5         | Casualties of Cool     | 2014-05-14    | 5          | 1         |
+-----------+------------------------+---------------+------------+-----------+

इस मामले में, 22 का 20 प्रतिशत 4.4 है। एक बार फिर, इसे गोल किया गया है, और हमें 5 पंक्तियाँ मिलती हैं।

उदाहरण 5 - कोष्ठक हटाना

TOP . का उपयोग करते समय कोष्ठक को हटाना संभव है खंड, हालांकि, इसकी अनुशंसा नहीं की जाती है।

किसी भी तरह, पिछले उदाहरण से कोष्ठक हटाने का एक उदाहरण यहां दिया गया है:

SELECT TOP 20 PERCENT * 
FROM Albums
ORDER BY AlbumId;

परिणाम:

+-----------+------------------------+---------------+------------+-----------+
| AlbumId   | AlbumName              | ReleaseDate   | ArtistId   | GenreId   |
|-----------+------------------------+---------------+------------+-----------|
| 1         | Powerslave             | 1984-09-03    | 1          | 1         |
| 2         | Powerage               | 1978-05-05    | 2          | 1         |
| 3         | Singing Down the Lane  | 1956-01-01    | 6          | 3         |
| 4         | Ziltoid the Omniscient | 2007-05-21    | 5          | 1         |
| 5         | Casualties of Cool     | 2014-05-14    | 5          | 1         |
+-----------+------------------------+---------------+------------+-----------+

Microsoft अनुशंसा करता है कि आप हमेशा कोष्ठक का उपयोग करें, क्योंकि यह INSERT में इसके आवश्यक उपयोग के साथ संगति प्रदान करता है , UPDATE , MERGE , और DELETE बयान।

पिछड़े संगतता कारणों से कोष्ठक वैकल्पिक हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में मेमोरी सेटिंग के महत्व को समझना

  2. SQL सर्वर गुम अनुक्रमणिका

  3. SQL सर्वर डेटाबेस स्नैपशॉट -4

  4. SQL सर्वर में एक क्वेरी टाइमआउट को मजबूर करना

  5. dtexec का उपयोग करके SSIS पैकेज चलाना