MySQL वाइल्डकार्ड: लाइक, नॉट लाइक, एस्केप, ( % ), ( _ )

⚡ स्मार्ट सारांश

MySQL वाइल्डकार्ड, LIKE और NOT LIKE ऑपरेटरों को विशेष वर्णों के साथ जोड़कर पैटर्न-आधारित खोज को संभव बनाते हैं। यह प्रतिशत और अंडरस्कोर वाइल्डकार्ड, ESCAPE कीवर्ड, myflixdb डेटाबेस के विरुद्ध व्यावहारिक क्वेरी और प्रदर्शन संबंधी विचारों की व्याख्या करता है।

  • 🔍 मूल परिभाषा: वाइल्डकार्ड ऐसे प्लेसहोल्डर कैरेक्टर होते हैं जिनका उपयोग LIKE और NOT LIKE सटीक मानों के बजाय टेक्स्ट पैटर्न से मिलान करने के लिए करते हैं।
  • 📊 प्रतिशत वाइल्डकार्ड: % चिह्न शून्य या अधिक वर्णों से मेल खाता है, इसलिए '%code%' उन सभी फिल्मों के शीर्षक लौटाता है जिनमें 'code' शब्द शामिल है।
  • 🔡 अंडरस्कोर वाइल्डकार्ड: _ चिह्न ठीक एक अक्षर से मेल खाता है, इसलिए '200_' 2000 और 2009 के बीच रिलीज़ हुई फिल्मों को दर्शाता है।
  • 🚫 निषेध नियम: NOT LIKE तुलना को उलट देता है और निर्दिष्ट पैटर्न में विफल रहने वाली प्रत्येक पंक्ति को लौटाता है।
  • भागने की प्रक्रिया: ESCAPE कीवर्ड सर्च स्ट्रिंग के अंदर मौजूद % या _ को चिह्नित करता है ताकि इसे डेटा के रूप में माना जाए।
  • प्रदर्शन अंतर्दृष्टि: एक अग्रणी % इंडेक्स के उपयोग को रोकता है और पूरी टेबल स्कैन करने के लिए बाध्य करता है, इसलिए जब भी संभव हो, एंकर पैटर्न को बाईं ओर रखें।
  • 🧩 विधि चयन: LIKE सरल उपसर्ग और प्रत्यय मिलान को कवर करता है, जबकि REGEXP वर्ण वर्गों और प्रत्यावर्तन को संभालता है।

क्या हैं MySQL वाइल्डकार्ड?

MySQL वाइल्डकार्ड वाइल्डकार्ड विशेष वर्ण होते हैं जो आपको सटीक मान के बजाय जटिल पैटर्न से मेल खाने वाले डेटा को खोजने में मदद करते हैं। वाइल्डकार्ड का उपयोग हमेशा LIKE तुलना ऑपरेटर या NOT LIKE तुलना ऑपरेटर के साथ किया जाता है।

MySQL यह दो वाइल्डकार्ड कैरेक्टर को सपोर्ट करता है, और प्रत्येक वाइल्डकार्ड कैरेक्टर आपके डेटा के बारे में एक अलग प्रश्न का उत्तर देता है।

वाइल्डकार्ड अर्थ उदाहरण पैटर्न माचिस
% शून्य (0) या अधिक वर्ण '%कोड%' Code नाम ब्लैक, दाविंची Code
_ ठीक एक पात्र '200_' 2005, 2008

अब जबकि इन दोनों पात्रों को परिभाषित कर दिया गया है, अगला भाग बताता है कि इन्हें सीखना क्यों महत्वपूर्ण है।

वाइल्डकार्ड का उपयोग क्यों करें? MySQL?

यदि आप SQL से परिचित हैं, तो आप शायद सोचते होंगे कि SELECT और WHERE क्लॉज़ का उपयोग करके आप पहले से ही किसी भी जटिल डेटा को खोज सकते हैं। तो फिर वाइल्डकार्ड का उपयोग करने की आवश्यकता ही क्या है?

इस प्रश्न का उत्तर देने से पहले, आइए एक उदाहरण देखें। मान लीजिए कि मायफ्लिक्स वीडियो लाइब्रेरी के मार्केटिंग विभाग ने टेक्सास शहर में प्रचार अभियान चलाया और टेक्सास से पंजीकृत सदस्यों की संख्या पर प्रतिक्रिया प्राप्त करना चाहता है। वांछित जानकारी प्राप्त करने के लिए आप निम्नलिखित SELECT स्टेटमेंट और WHERE क्लॉज़ का उपयोग कर सकते हैं।

SELECT * FROM members
WHERE postal_address = 'Austin, TX'
   OR postal_address = 'Dallas, TX'
   OR postal_address = 'Iola, TX'
   OR postal_address = 'Houston, TX';

जैसा कि आप उपरोक्त प्रश्न से देख सकते हैं, “कहां कारणयह प्रक्रिया लंबी और जटिल हो जाती है: प्रत्येक नए शहर को मैन्युअल रूप से जोड़ना पड़ता है, और एक भी गलत पता चुपचाप छूट जाता है। वाइल्डकार्ड का उपयोग करने से क्वेरी सरल हो जाती है, क्योंकि एक ही पैटर्न राज्य के सभी शहरों को कवर करता है।

SELECT * FROM members
WHERE postal_address LIKE '%TX';

संक्षेप में, वाइल्डकार्ड आपको बहुत कम SQL का उपयोग करके डेटा-संचालित अनुप्रयोगों में शक्तिशाली खोज सुविधाएँ बनाने की अनुमति देते हैं। अगला भाग प्रत्येक वाइल्डकार्ड वर्ण का विस्तार से वर्णन करता है।

के प्रकार MySQL वाइल्डकार्ड

% – प्रतिशत वाइल्डकार्ड

प्रतिशत (%) वर्ण का उपयोग किसी पैटर्न को निर्दिष्ट करने के लिए किया जाता है। शून्य (0) या अधिक वर्णइसका मूल वाक्यविन्यास इस प्रकार है।

SELECT * FROM table_name
WHERE fieldname LIKE 'xxx%';

यहाँ:

  • "चयन कथन” मानक SQL SELECT कमांड है।
  • फ़िल्टर लगाने के लिए "WHERE" कीवर्ड का उपयोग किया जाता है।
  • “LIKE” एक तुलना ऑपरेटर है जिसका उपयोग वाइल्डकार्ड के साथ किया जाता है।
  • 'xxx' कोई भी निर्दिष्ट पैटर्न हो सकता है, जैसे कि एक या अधिक अक्षर, और "%" शून्य (0) से शुरू होने वाले किसी भी संख्या में अक्षरों से मेल खाता है।

उपरोक्त कथन को पूरी तरह समझने के लिए, आइए एक व्यावहारिक उदाहरण देखें। मान लीजिए कि हम उन सभी फिल्मों को प्राप्त करना चाहते हैं जिनके शीर्षक में "कोड" शब्द शामिल है। हम शीर्षक में कहीं भी पैटर्न मिलान करने के लिए "कोड" शब्द के दोनों ओर प्रतिशत वाइल्डकार्ड का उपयोग करेंगे।

SELECT * FROM movies
WHERE title LIKE '%code%';

उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL कार्यक्षेत्र myflixdb डेटाबेस के विरुद्ध परीक्षण करने पर हमें नीचे दिखाए गए परिणाम प्राप्त होते हैं।

मूवी_आईडी शीर्षक निदेशक वर्ष_रिलीज़ श्रेणी_आईडी
4 Code नाम ब्लैक एडगर जिम्ज़ 2010 नल
7 दा विंची Code नल नल 6

ध्यान दें कि खोज कीवर्ड "कोड" शीर्षक के प्रारंभ या अंत में आने पर भी परिणाम दिखाता है। ऐसा इसलिए है क्योंकि यह पैटर्न "कोड" से पहले और बाद में किसी भी संख्या में वर्णों की अनुमति देता है।

अब हम स्क्रिप्ट को इस प्रकार संशोधित करते हैं कि प्रतिशत वाइल्डकार्ड केवल खोज मानदंड के प्रारंभ में ही दिखाई दे।

SELECT * FROM movies
WHERE title LIKE '%code';

उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL myflixdb डेटाबेस के विरुद्ध वर्कबेंच चलाने पर हमें नीचे दिखाए गए परिणाम प्राप्त होते हैं।

मूवी_आईडी शीर्षक निदेशक वर्ष_रिलीज़ श्रेणी_आईडी
7 दा विंची Code नल नल 6

ध्यान दें कि केवल एक ही रिकॉर्ड लौटाया गया है। यह पैटर्न शीर्षक के प्रारंभ में किसी भी संख्या के वर्णों से मेल खाता है, लेकिन इसके लिए शीर्षक की आवश्यकता होती है। समाप्त “कोड” के साथ।

अब हम प्रतिशत वाइल्डकार्ड को पैटर्न के अंत में स्थानांतरित करते हैं। संशोधित स्क्रिप्ट नीचे दी गई है।

SELECT * FROM movies
WHERE title LIKE 'code%';

उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL myflixdb डेटाबेस के विरुद्ध वर्कबेंच चलाने पर हमें नीचे दिखाए गए परिणाम प्राप्त होते हैं।

मूवी_आईडी शीर्षक निदेशक वर्ष_रिलीज़ श्रेणी_आईडी
4 Code नाम ब्लैक एडगर जिम्ज़ 2010 नल

केवल एक ही रिकॉर्ड दोबारा लौटाया जाता है, क्योंकि यह पैटर्न हर शीर्षक से मेल खाता है। शुरू होता है “कोड” के बाद कितने भी अक्षर आ सकते हैं। इसलिए, % चिह्न की स्थिति ही खोज के अर्थ को निर्धारित करती है।

💡टिप: 'code%' जैसे पैटर्न शीर्षक कॉलम पर इंडेक्स का उपयोग कर सकते हैं, जबकि '%code%' नहीं कर सकता। प्रतिशत वाइल्डकार्ड का उपयोग करने से यह बाध्य हो जाता है। MySQL प्रत्येक पंक्ति को स्कैन करने के लिए, जब भी खोज अनुमति दे, वाइल्डकार्ड को दाईं ओर रखें।

_ – अंडरस्कोर वाइल्डकार्ड

अंडरस्कोर वाइल्डकार्ड का उपयोग किया जाता है ठीक एक अक्षर का मिलान करेंमान लीजिए कि हम वर्ष 200x में रिलीज़ हुई सभी फ़िल्में खोजना चाहते हैं, जहाँ x एक अक्षर है और इसका मान कुछ भी हो सकता है। नीचे दिया गया स्क्रिप्ट वर्ष "200x" में रिलीज़ हुई सभी फ़िल्मों का चयन करता है।

SELECT * FROM movies
WHERE year_released LIKE '200_';

उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL myflixdb डेटाबेस के विरुद्ध वर्कबेंच चलाने पर हमें नीचे दिखाए गए परिणाम प्राप्त होते हैं।

मूवी_आईडी शीर्षक निदेशक वर्ष_रिलीज़ श्रेणी_आईडी
2 सारा मार्शल को भूलना निकोलस Stoller 2008 2
9 Honey moonनेताओं जॉन शुल्ट्ज़ 2005 8

ध्यान दें कि केवल वही फिल्में दिखाई जाएंगी जिनका year_released मान 200 के बाद कोई एक अक्षर हो। प्रतिशत वाइल्डकार्ड के विपरीत, अंडरस्कोर केवल एक अक्षर के लिए स्थान आरक्षित करता है, इससे अधिक नहीं।

वाइल्डकार्ड की तरह नहीं

NOT लॉजिकल ऑपरेटर का उपयोग वाइल्डकार्ड के साथ उन पंक्तियों को वापस करने के लिए किया जा सकता है जो ऐसा नहीं करती हैं। नहीं निर्दिष्ट पैटर्न से मिलान करें।

मान लीजिए कि हम उन फिल्मों को देखना चाहते हैं जो वर्ष 200x में रिलीज़ नहीं हुई थीं। हम NOT लॉजिकल ऑपरेटर को अंडरस्कोर वाइल्डकार्ड के साथ जोड़ते हैं, जैसा कि नीचे दिखाया गया है।

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
मूवी_आईडी शीर्षक निदेशक वर्ष_रिलीज़ श्रेणी_आईडी
1 कैरिबियन के समुद्री डाकू 4 रॉब मार्शल 2011 1
4 Code नाम ब्लैक एडगर जिम्ज़ 2010 नल
8 अंडरवर्ल्ड-Awakenएच में माइकल ईल 2012 6

केवल वही फिल्में वापस की जाती हैं जो 200x पैटर्न का पालन नहीं करती हैं, क्योंकि NOT वाइल्डकार्ड तुलना के परिणाम को उलट देता है। ध्यान दें कि पंक्तियों में एक नल LIKE या NOT LIKE द्वारा कोई मान कभी वापस नहीं किया जाता है, क्योंकि NULL असमान होने के बजाय अज्ञात होता है।

एस्केप कीवर्ड

ESCAPE कीवर्ड का प्रयोग किया जाता है एस्केप पैटर्न-मैचिंग वर्ण जैसे कि प्रतिशत (%) और अंडरस्कोर (_) जब वे स्वयं डेटा का हिस्सा होते हैं।

मान लीजिए कि हम "67%" नामक अक्षर को खोजना चाहते हैं। हम एक एस्केप कैरेक्टर घोषित करते हैं और उसे उस कैरेक्टर से ठीक पहले रखते हैं जिसे डेटा के रूप में पढ़ा जाना चाहिए।

LIKE '67#%%' ESCAPE '#';

अगर हम फिल्म "67% गिल्टी" को ढूंढना चाहते हैं, तो हम नीचे दिखाए गए स्क्रिप्ट का उपयोग कर सकते हैं।

SELECT * FROM movies
WHERE title LIKE '67#%%' ESCAPE '#';

LIKE क्लॉज़ में दोहरे “%%” पर ध्यान दें। पहले वाले के पहले एस्केप कैरेक्टर (#) लगा है, इसलिए इसे खोजी जा रही स्ट्रिंग का हिस्सा माना जाता है। दूसरा वाला अपना वाइल्डकार्ड अर्थ बरकरार रखता है और इसके बाद आने वाले किसी भी संख्या के कैरेक्टर से मेल खाता है।

किसी भी कैरेक्टर को एस्केप कैरेक्टर के रूप में इस्तेमाल किया जा सकता है, इसलिए वही क्वेरी बराबर के चिह्न के साथ भी काम करती है।

SELECT * FROM movies
WHERE title LIKE '67=%%' ESCAPE '=';

वाइल्डकार्ड सरल पैटर्न को बहुत अच्छी तरह से कवर करते हैं, लेकिन कुछ खोजों के लिए अधिक स्पष्ट नियमों की आवश्यकता होती है। नीचे दी गई तुलना सीमा को दर्शाती है।

MySQL वाइल्डकार्ड बनाम रेगएक्सपी: आपको किसका उपयोग करना चाहिए?

MySQL यह केवल दो वाइल्डकार्ड वर्णों का समर्थन करता है। वर्ण सूचियाँ जैसे [ac], जिन्हें कुछ अन्य डेटाबेस इंजन LIKE के भीतर स्वीकार करते हैं, समर्थित नहीं हैं। जब किसी खोज में वर्ण श्रेणियों, प्रत्यावर्तन या एंकरिंग की आवश्यकता होती है, तो REGEXP ऑपरेटर सही विकल्प है.

कसौटी वाइल्डकार्ड की तरह regexp
पैटर्न शक्ति केवल दो प्रतीक: % और _ चरित्र वर्ग, श्रेणियाँ, प्रत्यावर्तन, पुनरावृति
विशिष्ट उपयोग उपसर्ग, प्रत्यय या "शामिल है" खोज सत्यापन, जटिल मिलान, एकाधिक विकल्प
सूचकांक उपयोग यह तभी संभव है जब पैटर्न % से शुरू न हो। कभी भी इंडेक्स का उपयोग नहीं करता
पठनीयता शुरुआती लोगों के लिए सरल तीव्र सीखने की अवस्था

सामान्य तौर पर, पहले LIKE का उपयोग करें: यह पढ़ने में आसान है, और यह दोनों में से एकमात्र ऐसा ऑपरेटर है जिसे इंडेक्स से लाभ मिल सकता है। REGEXP का उपयोग तब करें जब एक ही पैटर्न को कई विकल्पों को व्यक्त करना हो, उदाहरण के लिए उन सभी शीर्षकों का मिलान करना जो किसी अंक से शुरू होते हैं। दोनों ऑपरेटर केवल पढ़ने योग्य तुलनाएँ हैं, इसलिए इनमें से कोई भी ऑपरेटर लौटाई गई पंक्तियों को नहीं बदलता है। सम्मिलित करें or अद्यतन कथन; वे केवल WHERE क्लॉज़ द्वारा चयनित चीज़ों को ही फ़िल्टर करते हैं।

अक्सर पूछे जाने वाले प्रश्न

नहीं, डिफ़ॉल्ट रूप से नहीं। LIKE कॉलम के कोलेशन का अनुसरण करता है, और मानक MySQL कोलेशन केस-इनसेंसिटिव होते हैं, इसलिए 'code%' भी “ से मेल खाता है।Codeजब केस-सेंसिटिव मिलान की आवश्यकता हो, तो कॉलम से पहले BINARY कीवर्ड जोड़ें।

हां. MySQL तुलना करने से पहले मान को स्ट्रिंग में परिवर्तित किया जाता है, यही कारण है कि year_released LIKE '200_' काम करता है। यह रूपांतरण उस कॉलम पर इंडेक्स के उपयोग को रोकता है, इसलिए बड़ी तालिकाओं पर BETWEEN 2000 AND 2009 जैसी श्रेणियों के साथ फ़िल्टर करें।

नहीं। कुछ अन्य इंजनों द्वारा स्वीकार की जाने वाली कोष्ठक वर्ण सूची एक के अंदर मान्य नहीं है। MySQL LIKE पैटर्न का उपयोग करें। REGEXP ऑपरेटर उदाहरण के लिए, शीर्षक REGEXP '^[ac]' का उपयोग करके प्रारंभिक वर्णों की एक श्रेणी से मिलान करें।

हाँ। एआई सहायक सामान्य भाषा के अनुरोधों को LIKE पैटर्न में अनुवादित करते हैं जिन्हें आप क्लाइंट में चला सकते हैं। MySQL कार्यक्षेत्रहमेशा उत्पन्न पैटर्न की समीक्षा करें, क्योंकि एक भी % चिह्न को स्थानांतरित करने से यह बदल जाता है कि कौन सी पंक्तियाँ वापस की जाएंगी।

एआई क्वेरी सलाहकार EXPLAIN आउटपुट को पढ़ते हैं और उन लीडिंग-वाइल्डकार्ड पैटर्न को चिह्नित करते हैं जो इंडेक्स को छोड़ देते हैं। फिर वे पूर्ण-पाठ खोज, एक उपसर्ग पैटर्न, या जैसे विकल्प सुझाते हैं। regexpजिसे आपको अभी भी अपने डेटा वॉल्यूम के आधार पर सत्यापित करने की आवश्यकता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: