sql - select sport




चयन करें*टैबलेन से यहां से 1 (7)

  1. सेलेक्ट करें * टेबल_नाम से : यह आपको किसी भी स्टेटमेंट को चलाने के साथ टेबल के सभी रिकॉर्ड देगा।
  2. सेलेक्ट * FROM table_name WHERE 1 : यह वह जगह है जहाँ स्थिति हमेशा सही होती है, इसका उपयोग ज्यादातर हैकर द्वारा किसी भी सिस्टम में करने के लिए किया जाता है। यदि आपने 2 और 3 की तुलना में sql इंजेक्शन के बारे में सुना है तो ऐसे परिदृश्य हैं जिन्हें हैकर द्वारा टेबल के सभी रिकॉर्ड प्राप्त करने के लिए मजबूर किया जाता है।
  3. सेलेक्ट * FROM table_name जहाँ 1 = 1 : यह आपको टेबल के सभी रिकॉर्ड देगा लेकिन यह जहाँ कथन की तुलना करेगा और फिर आगे बढ़ेगा, यह मूल रूप से इसके बाद और स्टेटमेंट जोड़ने या हटाने के लिए जोड़ा गया है।

मैं उत्सुक हो गया हूं। इन संबंधित प्रश्नों के बीच क्या अंतर हैं:

  1. SELECT * FROM `tablename`

  2. SELECT * FROM `tablename` WHERE 1

  3. SELECT * FROM `tablename` WHERE 1=1


1 में, MySQL को किसी भी स्थिति का मूल्यांकन करने की आवश्यकता नहीं है।

2 और 3 में, जहां स्थिति स्थिर है और पंक्तियों के मूल्यों पर आधारित नहीं है। यह बूलियन तर्क के साथ मूल्यांकन किया जाएगा और हमेशा सच होगा।

कार्यात्मक रूप से, कोई अंतर नहीं है। आपको कोड स्पष्टता के लिए 1 चुनना चाहिए।


MySQL में 2 और 3 समान हैं, कार्यात्मक रूप से 1 भी समान है।

where 1 मानक नहीं है, जैसा कि अन्य ने बताया है, अन्य बोलियों में काम नहीं करेगा।

लोग where 1 या where 1 = 1 जोड़ते हैं, वहाँ स्थितियाँ आसानी से जोड़ी जा सकती हैं या उन्हें हटाया जा सकता है / किसी क्वेरी में / कुछ " and ..." घटकों को जोड़कर।

अर्थात

SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = 'Value1'
AND Column2 = 'Value2'

जैसा कि आप जानते हैं, तीनों एक ही परिणाम देते हैं। (एक बूलियन संदर्भ में, MySQL पूर्णांक "1" को सत्य मानता है - वास्तव में, कोई भी संख्या जो "0" नहीं है, उसे सत्य माना जाता है)।

MySQL ऑप्टिमाइज़र को WHERE क्लॉज़ में लगातार स्थितियों को हटाने के लिए स्पष्ट रूप से documented किया गया है:

  • लगातार स्थिति को हटाने। । ।:

    (B> = ​​5 और B = 5) या (B = 6 और 5 = 5) या (B = 7 और 5 = 6) -> B = 5 या B = 6

इसलिए, तीनों को एक ही कोड में संकलित किया जाएगा।

वे सभी कार्यात्मक रूप से समतुल्य हैं और उनकी कार्यक्षमता समान होनी चाहिए।

उस ने कहा, पहले और तीसरे मानक SQL हैं। दूसरा कई डेटाबेस में बूलियन अभिव्यक्ति त्रुटि के कुछ प्रकार का कारण होगा। तो, मैं आपको सलाह दूंगा कि आप इससे बचें (मुझे यकीन नहीं है कि यह MySQL के सख्त SQL मोड में काम करता है या नहीं)।

डायनामिक WHERE क्लॉज़ बनाते समय अक्सर तीसरे का उपयोग किया जाता है। लिंगिंग AND s के बारे में चिंता किए बिना अतिरिक्त शर्तों को AND <condition> जोड़ना आसान बनाता है।


वे सभी एक ही उत्तर का उत्पादन करते हैं। हालाँकि जिस तरह से 2 और 3 लिखा जाता है, वह अधिकतर "जहाँ" कथन पर नियंत्रण रखने के लिए होता है, इसलिए इसे जोड़ना या बाद में हटाना आसान हो जाएगा।

मुझे लगता है कि पहला और तीसरा तरीका इसे लिखने का उचित तरीका है। यदि आपको एक कथन की आवश्यकता है जहाँ आप संख्या 3 में पसंद करते हैं अन्यथा नंबर 1 काफी अच्छा होगा।


सभी समान हैं लेकिन 2 और 3 का उपयोग AND / OR स्थितियों के लिए डायनामिक क्वेरी बनाने के लिए किया जाता है

sqlquery ="  SELECT * FROM `tablename` where 1 =1 "

डायनेमिक क्वेरी बनाने के लिए हम 2 और 3 प्रारूप का उपयोग करते हैं इसलिए हम पहले से ही जानते हैं कि "जहां" कीवर्ड जोड़ा जाता है और हम और अधिक फिल्टर जोड़ते रहते हैं। पसंद

sqlquery  = sqlquery + "and columna =a"
"AND columna =a " then

कुछ पंक्तियों के बाद यदि हमारे पास नए फिल्टर हैं तो हम "AND coulmnb = b" इत्यादि जोड़ते हैं

आपको उस खोजशब्द के लिए sql क्वेरी की जाँच करने की ज़रूरत नहीं है जहाँ उसके पहले या प्रारंभिक क्वेरी में रखा गया है

SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')

अन्यथा हम sqlquery = "SELECT * FROM tablename" लिख सकते हैं

फिर

अगर वहाँ नहीं है 'जहां' तब sqlquery -खंड में खंड

sqlquery  = sqlquery + "where columna =a"

अन्य

sqlquery  = sqlquery + "and columna =a"

परिणाम - सभी तीन प्रश्नों के लिए सारणी के बजाय निर्दिष्ट तालिका में सभी रिकॉर्ड देता है

SELECT * FROM tablename WHERE 1 - इस answer जांच करें

SELECT * FROM tablename WHERE 1=1 - इस answer जांचें

WHERE क्लॉज ऑप्टिमाइज़ेशन के बारे में अधिक जानकारी के लिए इन्हें देखें: documented , SQLite , SQL





select-query