मैंने कई प्रश्नों को कुछ इस प्रकार से देखा है।
Select 1
From table
इसका क्या 1
मतलब है, इसे कैसे निष्पादित किया जाएगा और, यह क्या लौटेगा?
इसके अलावा, किस प्रकार के परिदृश्यों में, इसका उपयोग किया जा सकता है?
मैंने कई प्रश्नों को कुछ इस प्रकार से देखा है।
Select 1
From table
इसका क्या 1
मतलब है, इसे कैसे निष्पादित किया जाएगा और, यह क्या लौटेगा?
इसके अलावा, किस प्रकार के परिदृश्यों में, इसका उपयोग किया जा सकता है?
जवाबों:
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 *
, बस क्योंकि यह अक्सर ऐसा होता है कि डीबी किसी भाषा में जितना अधिक होता है, उतना बड़ा डेटा संरचना, जिसका अर्थ है कि अधिक समय लगेगा।
...EXISTS (SELECT 1...
select 1 from table
तालिका की प्रत्येक पंक्ति के लिए निरंतर 1 लौटाएगा। यह उपयोगी है जब आप सस्ते में निर्धारित करना चाहते हैं कि क्या रिकॉर्ड आपके where
क्लॉज और / या से मेल खाता है join
।
अगर आपका मतलब कुछ ऐसा है
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...)
exists (select 1/0
करता है, एक आकर्षण की तरह काम करता है
यह वही करता है जो यह कहता है - यह हमेशा पूर्णांक लौटाएगा। 1. यह जांचने के लिए उपयोग किया जाता है कि क्या आपके रिकॉर्ड से मेल खाता है जहां खंड मौजूद है।
select 1 from table
किसी डेटाबेस द्वारा किसी कनेक्शन को परखने के लिए एक क्वेरी के रूप में उपयोग किया जाता है, यह देखने के लिए कि क्या वह जीवित है, अक्सर कनेक्शन पूल से / से एक कनेक्शन को पुनः प्राप्त या वापस करते समय उपयोग किया जाता है।
हालांकि यह व्यापक रूप से ज्ञात नहीं है, एक क्वेरी में एक 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
:?
थोड़ा और विशिष्ट होने के लिए, आप इसका उपयोग करने के लिए करेंगे
SELECT 1 FROM MyUserTable WHERE user_id = 33487
करने के बजाय
SELECT * FROM MyUserTable WHERE user_id = 33487
क्योंकि आप परिणामों को देखने की परवाह नहीं करते हैं। नंबर 1 के लिए पूछना डेटाबेस के लिए बहुत आसान है (क्योंकि इसमें कोई लुक-अप नहीं करना पड़ता है)।
यदि आपको नहीं पता कि आपकी तालिका में कोई डेटा मौजूद है या नहीं, तो आप निम्नलिखित क्वेरी का उपयोग कर सकते हैं:
SELECT cons_value FROM table_name;
एक उदाहरण के लिए:
SELECT 1 FROM employee;
इसलिए, हम इस SQL क्वेरी का उपयोग यह जानने के लिए करते हैं कि क्या तालिका में कोई डेटा है और पंक्तियों की संख्या इंगित करती है कि इस तालिका में कितनी पंक्तियाँ मौजूद हैं।
इसका मतलब है कि आप आउटपुट के रूप में " 1 " का मान चाहते हैं या ज्यादातर समय इनर क्वेरी के रूप में उपयोग किया जाता है क्योंकि किसी कारण से आप आंतरिक प्रश्नों के परिणाम के आधार पर बाहरी प्रश्नों की गणना करना चाहते हैं .. आप जो भी समय 1 का उपयोग करते हैं, लेकिन आप कुछ विशिष्ट मान हैं ...
यह वैधानिक रूप से आपको मूल्य 1 के रूप में आउटपुट देता है।
यदि आप WHERE क्लॉज के आधार पर सही या गलत की जांच करना चाहते हैं, तो तालिका से 1 का चयन करें जहां स्थिति सबसे सस्ता तरीका है।
मैं देख रहा हूँ यह हमेशा SQL इंजेक्शन में प्रयोग किया जाता है, जैसे:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
इन नंबरों का उपयोग यह अनुमान लगाने के लिए किया जा सकता है कि डेटाबेस कहाँ मौजूद है और आपके द्वारा निर्दिष्ट डेटाबेस के कॉलम का नाम लगता है। और तालिकाओं के मानों को।
इसका मतलब यह है कि आप तालिका से नंबर पहला कॉलम प्राप्त कर रहे हैं ,,,, का अर्थ है एमप्ले_नम, एम्पल_नो फ्रॉम एम्प्लॉयी का चयन करें; यहां आप कर्मचारियों से चुनिंदा 1 का उपयोग कर रहे हैं; इसका मतलब है कि आप Emply_num कॉलम पुनः प्राप्त कर रहे हैं। धन्यवाद
कारण एक और है, कम से कम MySQL के लिए। यह MySQL मैनुअल से है
InnoDB तालिका में ऐसे मूल्यों को संग्रहीत करने के बजाय, पहली बार तालिका के लिए अनुक्रमणिका कार्डिनैलिटी मानों की गणना करता है, जिसे स्टार्टअप के बाद एक्सेस किया जाता है। यह चरण उन प्रणालियों पर महत्वपूर्ण समय ले सकता है जो डेटा को कई तालिकाओं में विभाजित करते हैं। चूंकि यह ओवरहेड केवल प्रारंभिक टेबल ओपन ऑपरेशन पर लागू होता है, बाद में उपयोग के लिए एक टेबल को "वार्म अप" करने के लिए, स्टार्टअप के तुरंत बाद इसे एक्सेस करें जैसे कि 1 का चयन करें जैसे कि tbl_name LIMIT 1
यह सिर्फ IF EXISTS () के साथ सुविधा के लिए उपयोग किया जाता है। अन्यथा आप साथ जा सकते हैं
select * from [table_name]
Image 'IF EXISTS' के मामले में, हमें बस यह पता होना चाहिए कि निर्दिष्ट स्थिति वाली कोई भी पंक्ति मौजूद है या नहीं कि पंक्ति की सामग्री क्या है।
select 1 from Users
उपरोक्त उदाहरण कोड, रिटर्न नं। पंक्तियों की संख्या नहीं के बराबर है। एकल कॉलम में 1 वाले उपयोगकर्ता