2009-05-06 12 views
14

SQL सर्वर में, शीर्ष का उपयोग क्वेरी में पंक्तियों की पहली संख्या को वापस करने के लिए किया जा सकता है। उदाहरण के लिए, SQL सर्वर शीर्ष के लिए समकक्ष

SELECT TOP 100 * FROM users ORDER BY id
का उपयोग किसी साइट के लिए पंजीकृत पहले 100 लोगों को वापस करने के लिए किया जा सकता है। (यह जरूरी नहीं है कि यह सबसे अच्छा तरीका है, मैं इसे सिर्फ एक उदाहरण के रूप में उपयोग कर रहा हूं)।

मेरा प्रश्न है - अन्य डेटाबेस, जैसे ओरेकल, माईएसक्यूएल, पोस्टग्रेएसक्यूएल, आदि में शीर्ष के बराबर क्या है? यदि कोई समकक्ष कीवर्ड नहीं है, तो आप एक ही परिणाम प्राप्त करने के लिए क्या कामकाज की सिफारिश कर सकते हैं?

+0

डुप्लिकेट: http://stackoverflow.com/questions/595123/is-there-an-ansi-sql-alternative-to-the-mysql-limit-keyword –

+0

तकनीकी रूप से, हाँ। लेकिन केवल अगर आप mysql LIMIT कीवर्ड जानते हैं जो मैंने उस समय नहीं किया था। –

उत्तर

20

पहले 100 पंक्तियों का चयन करने के लिए:

MySQL और PostgreSQL:

SELECT * 
FROM Table 
ORDER BY 
     column 
LIMIT 100 

Oracle:

SELECT * 
FROM (
     SELECT t.* 
     FROM table 
     ORDER BY 
       column 
     ) 
WHERE rownum <= 100 

ध्यान दें कि आप एक सबक्वेरी यहाँ की जरूरत है। यदि आप सबक्वायरी नहीं जोड़ते हैं, तो ROWNUM यादृच्छिक क्रम में पहले 10 पंक्तियों का चयन करेगा और फिर उन्हें column द्वारा क्रमबद्ध करें।

100 और 300 के बीच पंक्तियों का चयन करने के लिए:

MySQL:

SELECT * 
FROM TABLE 
ORDER BY 
     column 
LIMIT 100, 200 

PostgreSQL:

SELECT * 
FROM Table 
ORDER BY 
     column 
OFFSET 100 LIMIT 200 

Oracle:

SELECT * 
FROM (
     SELECT t.*, ROW_NUMBER() OVER (ORER BY column) AS rn 
     FROM table 
     ) 
WHERE rn >= 100 
     AND rownum <= 200 

ध्यान दें कि ROWNUM BETWEEN 100 AND 200 के साथ इसे सरल बनाने का प्रयास (बाहरी क्वेरी में rn BETWEEN 100 AND 200 के विपरीत) Oracle में कुछ भी वापस नहीं करेगा!

RN BETWEEN 100 AND 200Oracle में भी काम करेगा लेकिन कम कुशल है।

+0

से शुरू होता है यह मानकीकृत क्यों नहीं है? क्या @ocdecia पोस्ट किया गया बिल्कुल स्पष्ट नहीं है, मुझे लगता है कि mysql और postgre नोटेशन सबसे अच्छे – Pablote

+0

@Pablote हैं: क्योंकि ओरेकल मेरे से बड़ा है, और Sybase (जो SQL सर्वर चालू है) केवल 4 वर्ष छोटा है। उस समय कोई मानक नहीं था। और समय के मानकों के अनुसार, कुछ भी बदलने के लिए रास्ता बहुत पहले से मौजूद था। – Quassnoi

+0

@Pablote: क्या @ocdecio पोस्ट anayltic कार्यों हैं, रिकॉर्डसेट सीमित नहीं है। उनका उपयोग रिकॉर्डसेट को सीमित करने के लिए किया जा सकता है, लेकिन यह उनका मुख्य लक्ष्य नहीं है। – Quassnoi

1
LIMIT 100 

SELECT * FROM foo ORDER BY bar LIMIT 100 
6

Postgres और MySQL के लिए में के रूप में यह केवल LIMIT कीवर्ड है।

SELECT * 
    FROM users 
ORDER BY id 
LIMIT 100; 
1

आप ओरेकल में रैंक() और DENSE_RANK() का उपयोग कर सकते हैं। Here ओरेकल में DENSE_RANK के साथ पेजिनेशन और शीर्ष-एन प्रश्नों को कैसे समझाया जाए, यह पूछने के लिए AskTom वेबसाइट का एक लिंक है।

1

ओरेकल:

select * from (select * from foo ORDER BY bar) where rownum < 100 
यह कैसे AskTom में काम करने के लिए एक अच्छा विवरण के साथ

select First 100 * from foo ORDER BY bar 

Ingres सवाल पहले से ही से पहले StackOverflow में जवाब था:

Ingres में एक ही क्वेरी से होगा।

+0

तो, क्वेरी वास्तव में से करना चाहिए: चयन * से (foo आदेश से पट्टी से चयन *) जहां ROWNUM <100 आदेश के बाद शीर्ष 100 पाने के लिए ... – Sean

+0

ओह, यह होना चाहिए <= 100 के रूप में राउनम 1 – Sean

3

यह मानक एसक्यूएल है (Oracle और SQL सर्वर इसे लागू):

प्रदर्शन जानकारी के लिए अपने ब्लॉग में लेख देखें। यह 100 पंक्तियों तक लौटने का एक उदाहरण है:

 SELECT ID_CONTROL FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID_CONTROL) 
     ROWNUMBER, ID_CONTROL FROM IWS_CONTROL WHERE 
     CURRENT_STATE = 15 AND CURRENT_STATUS=0) A WHERE ROWNUMBER <= 100) 
+0

यह अच्छा है। पता नहीं था कि आप यह कर सकते हैं। – Zack

0

ओरेकल में आप एक टॉप-एन क्वेरी का उपयोग करना चाहते हैं।

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

select * 
    from (SELECT * 
      FROM foo 
      where foo_id=[number] 
     order by foo_id desc) 
where rownum <= 3 

यह आपको शीर्ष तीन परिणाम आप बनाना होगा मिल जाएगा (क्योंकि मैं उप क्वेरी में desc द्वारा आदेश)

1

डीबी 2 में इस तरह आपकी क्वेरी देखो:

चुनें * tblData से पहले 10 पंक्तियां केवल;

2

एसक्यूएल कहीं भी में, यह एसक्यूएल सर्वर के रूप में ही है:

SELECT TOP 100 * FROM users ORDER BY id 

तुम भी परिणाम सेट के बीच में शुरू कर सकते हैं अगर आप चाहते हैं:

SELECT TOP 100 START AT 50 * FROM users ORDER BY id 

150 वीं पंक्तियों के माध्यम से 50 वीं हो जाता है परिणाम सेट का।

संबंधित मुद्दे