तालिका से 1 का चयन करने का क्या मतलब है?


146

मैंने कई प्रश्नों को कुछ इस प्रकार से देखा है।

Select 1  
From table

इसका क्या 1मतलब है, इसे कैसे निष्पादित किया जाएगा और, यह क्या लौटेगा?

इसके अलावा, किस प्रकार के परिदृश्यों में, इसका उपयोग किया जा सकता है?


कृपया हमें पूरी क्वेरी दिखाएं
gbn

जवाबों:


107

SELECT 1 FROM TABLE_NAMEका अर्थ है, "तालिका से 1 लौटें"। यह अपने आप में बहुत अचूक है , इसलिए आम तौर पर इसका इस्तेमाल किया जाता है WHEREऔर अक्सर EXISTS(@ के रूप में नोटों के रूप में, यह जरूरी नहीं है कि यह सबसे अच्छा अभ्यास है, हालांकि, यह सामान्य रूप से पर्याप्त है, भले ही यह वास्तव में सार्थक नहीं है ( उस ने कहा, मैं इसका उपयोग करूंगा क्योंकि अन्य लोग इसका उपयोग करते हैं और यह तुरंत "अधिक स्पष्ट" है बेशक, यह एक चिपचिपा चिकन बनाम अंडा मुद्दा हो सकता है, लेकिन मैं आम तौर पर निवास नहीं करता हूं))।

 SELECT * FROM TABLE1 T1 WHERE EXISTS (
     SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
 );

मूल रूप से, उपरोक्त तालिका 1 से वह सबकुछ वापस कर देगा, जिसमें तालिका 2 से संबंधित आईडी है। (यह एक स्पष्ट उदाहरण है, जाहिर है, लेकिन मेरा मानना ​​है कि यह विचार व्यक्त करता है। व्यक्तिगत रूप से, मैं शायद ऊपर बताऊंगा जैसा SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);कि मुझे लगता है कि जैसा है। सुदूर अधिक पाठक को स्पष्ट जब तक कि एक अप्रत्यक्ष रूप में बाध्यकारी कारण नहीं करने के लिए) थे।

संपादित करें

वास्तव में एक मामला है जिसे मैं अभी तक भूल गया था। उस स्थिति में जहां आप बाहरी भाषा से डेटाबेस में एक मूल्य के अस्तित्व को निर्धारित करने की कोशिश कर रहे हैं, कभी-कभी SELECT 1 FROM TABLE_NAMEइसका उपयोग किया जाएगा। यह एक व्यक्तिगत कॉलम का चयन करने पर महत्वपूर्ण लाभ प्रदान नहीं करता है, लेकिन, कार्यान्वयन के आधार पर, यह ए करने पर पर्याप्त लाभ प्रदान कर सकता है SELECT *, बस क्योंकि यह अक्सर ऐसा होता है कि डीबी किसी भाषा में जितना अधिक होता है, उतना बड़ा डेटा संरचना, जिसका अर्थ है कि अधिक समय लगेगा।


और क्यों "सामान्य रूप से" उदाहरण के साथ? आप का सबूत है क्यों ?
gbn

6
और एक -1 के मिथक प्रचार के लिए...EXISTS (SELECT 1...
GBN

2
@Gbn पता नहीं क्यों मैं इसे वहाँ देखा है कहीं और से अधिक अक्सर। मैंने अभी-अभी वहाँ देखा है।
cwallenpoole

2
एक चिपचिपा चिकन? वह खाना पसंद नहीं करेंगे! शायद यह 'शातिर मुर्गी और अंडे की समस्या' होनी चाहिए?
No'am Newman

2
@Ben: IN और EXISTs आम तौर पर एक ही योजना का अनुकूलन करेंगे
gbn

106

select 1 from tableतालिका की प्रत्येक पंक्ति के लिए निरंतर 1 लौटाएगा। यह उपयोगी है जब आप सस्ते में निर्धारित करना चाहते हैं कि क्या रिकॉर्ड आपके whereक्लॉज और / या से मेल खाता है join


1
इस उत्तर मेरे लिए सबसे अधिक उपयुक्त बनाया
यूसुफ astrahan

2
वास्तव में बहुत महत्वपूर्ण बिंदु: " तालिका में हर पंक्ति के लिए"। इस प्रकार, "तालिका की उपलब्धता" के भाग के रूप में जाँच, उदाहरण के लिए सौ लाखों पंक्तियों के साथ एक तालिका की स्वास्थ्य जांच, सौ "1" के परिणाम सेट में समाप्त हो जाएगी। (ध्यान दें: ऐसा नहीं है कि यह कभी होगा ... उत्पादन में;);))
conny

शाब्दिक रूप से, यह यहाँ स्वीकृत उत्तर होना चाहिए!
फहद जावेद

40

अगर आपका मतलब कुछ ऐसा है

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1 FROM table WHERE...) 

फिर यह एक मिथक है जो इससे 1बेहतर है

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT * FROM table WHERE...) 

1या *मौजूद है नजरअंदाज कर दिया है और आप प्रति रूप में लिख सकते में ANSI SQL 1992 मानक के पृष्ठ 191 :

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1/0 FROM table WHERE...) 

1
सिर्फ यह सत्यापित करता है कि यह सम्मान exists (select 1/0करता है, एक आकर्षण की तरह काम करता है
एलेक्स

22

यह वही करता है जो यह कहता है - यह हमेशा पूर्णांक लौटाएगा। 1. यह जांचने के लिए उपयोग किया जाता है कि क्या आपके रिकॉर्ड से मेल खाता है जहां खंड मौजूद है।


22
उह - सवाल था "इसका क्या मतलब है", "यह अच्छा अभ्यास नहीं है"। मैं मानता हूं कि यह प्रदर्शन के दृष्टिकोण से कोई फर्क नहीं पड़ता है - लेकिन यह एक ऐसा सम्मेलन है जिसे डेवलपर्स उपयोग करते हैं, संभवतः क्योंकि 1 को आमतौर पर "सच" के रूप में व्याख्या की जाती है।
नेविल कुइत

20

select 1 from table किसी डेटाबेस द्वारा किसी कनेक्शन को परखने के लिए एक क्वेरी के रूप में उपयोग किया जाता है, यह देखने के लिए कि क्या वह जीवित है, अक्सर कनेक्शन पूल से / से एक कनेक्शन को पुनः प्राप्त या वापस करते समय उपयोग किया जाता है।


2
यह मेरा मामला था, यह JBOSS और TOMCAT अनुप्रयोगों में बहुत आम है।
वाल्टर सिल्वा

13

परिणाम 1तालिका में हर रिकॉर्ड के लिए है। __


वास्तव में नहीं, मैंने एक खाली तालिका बनाने की कोशिश की, और क्वेरी को निष्पादित किया, परिणाम छह 1s हैं।
r0ng

9

हालांकि यह व्यापक रूप से ज्ञात नहीं है, एक क्वेरी में एक HAVINGखंड के बिना एक GROUP BYखंड हो सकता है।

ऐसी परिस्थितियों में, HAVINGक्लॉज को पूरे सेट पर लागू किया जाता है। स्पष्ट रूप से, SELECTखंड किसी भी कॉलम को संदर्भित नहीं कर सकता है, अन्यथा आपको त्रुटि (सही) मिलेगी, "कॉलम चयन में अमान्य है क्योंकि यह ग्रुप BY में निहित नहीं है" आदि।

इसलिए, एक शाब्दिक मूल्य का उपयोग किया जाना चाहिए (क्योंकि SQL शून्य कॉलम के साथ एक परिणाम नहीं देता है - क्यों?) और शाब्दिक मूल्य 1 ( INTEGER) आमतौर पर उपयोग किया जाता है: यदि HAVINGखंड का मूल्यांकन होता है, TRUEतो परिणाम एक के साथ एक पंक्ति होगा स्तंभ मान 1 दिखा रहा है, अन्यथा आपको खाली सेट मिलता है।

उदाहरण: यह पता लगाने के लिए कि क्या किसी कॉलम में एक से अधिक विशिष्ट मूल्य हैं:

SELECT 1
  FROM tableA
HAVING MIN(colA) < MAX(colA);

"स्पष्ट रूप से, चयनित खंड किसी भी कॉलम को संदर्भित नहीं कर सकता है" - क्या यह एक बूल अभिव्यक्ति का चयन करने के लिए अधिक उचित नहीं होगा SELECT MIN(colA) < MAX(colA) FROM tableA:?
पॉल स्पीगल

7

थोड़ा और विशिष्ट होने के लिए, आप इसका उपयोग करने के लिए करेंगे

SELECT 1 FROM MyUserTable WHERE user_id = 33487

करने के बजाय

SELECT * FROM MyUserTable WHERE user_id = 33487

क्योंकि आप परिणामों को देखने की परवाह नहीं करते हैं। नंबर 1 के लिए पूछना डेटाबेस के लिए बहुत आसान है (क्योंकि इसमें कोई लुक-अप नहीं करना पड़ता है)।


उपरोक्त टिप्पणियों के अनुसार, ऐसा लगता है कि Select 1, select * की तुलना में प्रदर्शन में बेहतर नहीं है, क्या ऐसा है?
eRaisedToX

5

यदि आपको नहीं पता कि आपकी तालिका में कोई डेटा मौजूद है या नहीं, तो आप निम्नलिखित क्वेरी का उपयोग कर सकते हैं:

SELECT cons_value FROM table_name;

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

SELECT 1 FROM employee;
  1. यह एक कॉलम लौटाएगा जिसमें कुल पंक्तियों की संख्या होती है और सभी पंक्तियों का समान मूल्य 1 होता है (इस समय यह सभी पंक्तियों के लिए 1 लौटाता है);
  2. यदि आपकी तालिका में कोई पंक्ति नहीं है तो यह कुछ भी नहीं लौटाएगा।

इसलिए, हम इस SQL ​​क्वेरी का उपयोग यह जानने के लिए करते हैं कि क्या तालिका में कोई डेटा है और पंक्तियों की संख्या इंगित करती है कि इस तालिका में कितनी पंक्तियाँ मौजूद हैं।


3

इसका मतलब है कि आप आउटपुट के रूप में " 1 " का मान चाहते हैं या ज्यादातर समय इनर क्वेरी के रूप में उपयोग किया जाता है क्योंकि किसी कारण से आप आंतरिक प्रश्नों के परिणाम के आधार पर बाहरी प्रश्नों की गणना करना चाहते हैं .. आप जो भी समय 1 का उपयोग करते हैं, लेकिन आप कुछ विशिष्ट मान हैं ...

यह वैधानिक रूप से आपको मूल्य 1 के रूप में आउटपुट देता है।


3

यदि आप WHERE क्लॉज के आधार पर सही या गलत की जांच करना चाहते हैं, तो तालिका से 1 का चयन करें जहां स्थिति सबसे सस्ता तरीका है।


2

मैं देख रहा हूँ यह हमेशा SQL इंजेक्शन में प्रयोग किया जाता है, जैसे:

www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;

इन नंबरों का उपयोग यह अनुमान लगाने के लिए किया जा सकता है कि डेटाबेस कहाँ मौजूद है और आपके द्वारा निर्दिष्ट डेटाबेस के कॉलम का नाम लगता है। और तालिकाओं के मानों को।


0

इसका मतलब यह है कि आप तालिका से नंबर पहला कॉलम प्राप्त कर रहे हैं ,,,, का अर्थ है एमप्ले_नम, एम्पल_नो फ्रॉम एम्प्लॉयी का चयन करें; यहां आप कर्मचारियों से चुनिंदा 1 का उपयोग कर रहे हैं; इसका मतलब है कि आप Emply_num कॉलम पुनः प्राप्त कर रहे हैं। धन्यवाद


मुझे ऐसे वाक्यविन्यास याद हैं, लेकिन यह एक डेटाबेस के लिए विशिष्ट है जिसे मैं याद नहीं कर सकता। PostgreSQL?
डायनेवाला

0

कारण एक और है, कम से कम MySQL के लिए। यह MySQL मैनुअल से है

InnoDB तालिका में ऐसे मूल्यों को संग्रहीत करने के बजाय, पहली बार तालिका के लिए अनुक्रमणिका कार्डिनैलिटी मानों की गणना करता है, जिसे स्टार्टअप के बाद एक्सेस किया जाता है। यह चरण उन प्रणालियों पर महत्वपूर्ण समय ले सकता है जो डेटा को कई तालिकाओं में विभाजित करते हैं। चूंकि यह ओवरहेड केवल प्रारंभिक टेबल ओपन ऑपरेशन पर लागू होता है, बाद में उपयोग के लिए एक टेबल को "वार्म अप" करने के लिए, स्टार्टअप के तुरंत बाद इसे एक्सेस करें जैसे कि 1 का चयन करें जैसे कि tbl_name LIMIT 1


0

यह सिर्फ IF EXISTS () के साथ सुविधा के लिए उपयोग किया जाता है। अन्यथा आप साथ जा सकते हैं

select * from [table_name]

Image 'IF EXISTS' के मामले में, हमें बस यह पता होना चाहिए कि निर्दिष्ट स्थिति वाली कोई भी पंक्ति मौजूद है या नहीं कि पंक्ति की सामग्री क्या है।

select 1 from Users

उपरोक्त उदाहरण कोड, रिटर्न नं। पंक्तियों की संख्या नहीं के बराबर है। एकल कॉलम में 1 वाले उपयोगकर्ता

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