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

क्या हैं 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 क्लॉज़ द्वारा चयनित चीज़ों को ही फ़िल्टर करते हैं।
