"से 1 का चयन" क्या करता है?


80

मैंने कुछ लेख पढ़े लेकिन वास्तव में समझ नहीं आया कि क्या करता select 1 fromहै? कोई कहता है "आपको select 1इसके बजाय उपयोग करना चाहिए select *"। यहाँ एक उदाहरण तालिका दी गई है:

cust_id     cust_name       cust_address

1000000001  Village Toys    Mapl
1000000002  Kids Place      South
1000000003  Fun4All         Sunny
1000000004  Fun4All         Riverside
1000000005  The Toy Store   53rd

जब मैं लिखूंगा select 1 from customer_tableकि यह कथन क्या करता है तो परिणाम क्या होगा ?


लगभग एक दशक पहले, उदाहरण के लिए एक खंड के select 1बजाय सुझाव देना उचित था । आशावादी को बहुत पहले सुधार दिया गया था। यह "इस परिणाम सेट से सभी कॉलम प्राप्त करें" के लिए एक प्रतिस्थापन कभी नहीं था । select *EXISTS
डेमियन_इन_उन्नीवर

12
क्या तुमने कोशिश की???
जिमी डी

जवाबों:


73
select 1 from table

तालिका में प्रत्येक पंक्ति के लिए 1 का एक कॉलम लौटाएगा। आप इसे एक बयान के साथ उपयोग कर सकते हैं, यह जांचने के लिए कि क्या आपके पास किसी दिए गए कुंजी के लिए प्रविष्टि है, जैसे कि:

if exists(select 1 from table where some_column = 'some_value')

आपका मित्र शायद जो कह रहा था वह मेज से चुनिंदा * के साथ थोक चयन करने के बजाय है, आपको उन स्तंभों को निर्दिष्ट करना चाहिए जिनकी आपको ठीक से आवश्यकता है, दो साल के लिए:

1) प्रदर्शन और आप वास्तव में जरूरत से ज्यादा डेटा प्राप्त कर सकते हैं।

2) क्वेरी का उपयोगकर्ता कॉलम के क्रम पर भरोसा कर सकता है। यदि आपकी तालिका अपडेट हो जाती है, तो ग्राहक को अपेक्षा से भिन्न क्रम में कॉलम प्राप्त होंगे।


33

निर्माण आमतौर पर "अस्तित्व" चेक में उपयोग किया जाता है

if exists(select 1 from customer_table where customer = 'xxx')

या

if exists(select * from customer_table where customer = 'xxx')

दोनों निर्माण बराबर हैं। अतीत में लोगों ने कहा कि चयन * बेहतर था क्योंकि क्वेरी गवर्नर फिर सबसे अच्छा अनुक्रमित कॉलम का उपयोग करेगा। यह सच साबित नहीं हुआ है।


24

यह वही करता है जो आप पूछते हैं, उस तालिका में प्रत्येक पंक्ति के लिए SELECT 1 FROM tableहोगा SELECT(वापसी) 1, यदि तालिका में 3 पंक्तियाँ थीं जो आपको मिलेंगी

1
1
1

काउंट (*) बनाम काउंट (1) पर एक नज़र डालें जो आपके द्वारा बताई गई समस्या हो सकती है।


3
मैं ऐसा क्यों चाहूंगा?
कोडीबस्टीन

7
@ इमरेज यह तब उपयोगी है जब आप सिर्फ इस बात में रुचि रखते हैं कि आपके WHEREक्लॉज की स्थिति सही है या गलत। इसका उपयोग अक्सर उप प्रश्नों में किया जाता है।
एंड्रियास

9

बयान SELECT 1 FROM SomeTableसिर्फ 1आपकी तालिका में प्रत्येक पंक्ति के मान वाले कॉलम को लौटाता है । यदि आप किसी अन्य कॉलम को जोड़ते हैं, उदाहरण के लिए, SELECT 1, cust_name FROM SomeTableतो यह इसे थोड़ा साफ करता है:

            cust_name
----------- ---------------
1           Village Toys
1           Kids Place
1           Fun4All
1           Fun4All
1           The Toy Store

4
SELECT COUNT(*) in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)- EXISTSशर्त हमेशा पूरी होगी, चाहे जो भी शर्त मिले या नहीं मिले।

NOT EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)- NOT EXISTSशर्त हमेशा पूरी हो जाएगी, चाहे वह CONDITIONSमिले या न मिले, झूठे होंगे ।

SELECT COUNT 1 in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)- EXISTSशर्त पूरी होगी अगर CONDITIONSमुलाकात होगी। झूठे झूठे।

NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)- NOT EXISTSशर्त पूरी होगी अगर CONDITIONSमिले तो गलत । सही है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.