इस लेख में, हम SQL सर्वर में SELECT स्टेटमेंट से UPDATE का उपयोग करने के विभिन्न तरीकों को कवर करेंगे।
डेटाबेस की दुनिया में, स्थिर डेटा आमतौर पर संग्रहीत नहीं होता है। इसके बजाय, जब हम मौजूदा डेटा को अपडेट करते हैं, अप्रासंगिक डेटा को संग्रहीत करते हैं या हटाते हैं, तो यह बदलता रहता है। उदाहरण के लिए, मान लें कि आपके पास एक टेबल है जो आपके शॉपिंग पोर्टल के लिए उत्पाद मूल्य निर्धारण डेटा संग्रहीत करती है। उत्पाद की कीमतें लगातार बदलती रहती हैं, क्योंकि आप अपने ग्राहकों को अलग-अलग समय पर उत्पाद छूट की पेशकश कर सकते हैं। इस मामले में, आप तालिका में नई पंक्तियां नहीं जोड़ सकते क्योंकि उत्पाद रिकॉर्ड पहले से मौजूद है, लेकिन आपको मौजूदा उत्पादों के लिए मौजूदा कीमतों को अपडेट करना होगा।
यह वह जगह है जहां अद्यतन क्वेरी चलन में आती है। अद्यतन क्वेरी डेटाबेस में मौजूदा पंक्ति में डेटा को संशोधित करती है। आप WHERE क्लॉज का उपयोग करके सभी तालिका पंक्तियों को अपडेट कर सकते हैं या अपडेट के लिए प्रभावित पंक्तियों को सीमित कर सकते हैं। आमतौर पर, SQL अद्यतन किसी मौजूदा तालिका के लिए प्रत्यक्ष संदर्भ के साथ किए जाते हैं। उदाहरण के लिए, एक [कर्मचारी] तालिका में, सभी सक्रिय कर्मचारियों के वेतन में 10% की वृद्धि करने की आवश्यकता है। इस मामले में, सीधा संदर्भ SQL क्वेरी होगी:
कर्मचारी सेट अपडेट करें [वेतन] =वेतन + (वेतन * 10 / 100) जहां [सक्रिय] =1
मान लीजिए कि आपके पास एक अन्य तालिका [पता] है जो कर्मचारियों के स्थानों को संग्रहीत करती है और आपको [पता] तालिका में उपलब्ध डेटा के आधार पर [कर्मचारी] तालिका को अपडेट करना आवश्यक है। आप [कर्मचारी] तालिका में डेटा कैसे अपडेट करते हैं?
सौभाग्य से, एक समाधान है - चयन कथन से अद्यतन करें। निम्नलिखित अनुभाग में, हम SELECT स्टेटमेंट का उपयोग करके अपडेट करने के विभिन्न तरीकों को देखते हैं। उदाहरण के लिए, [कर्मचारी] तालिका में निम्नलिखित स्क्रीनशॉट में कॉलम – [पोस्टकोड] और [शहर] के लिए NULL मान हैं। [पता] तालिका में दोनों कॉलम [पोस्टकोड] और [शहर] के लिए मान हैं।
विधि 1:चयन से अद्यतन करें:विधि में शामिल हों
यह विधि उस द्वितीयक तालिका को संदर्भित करने के लिए SQL Joins का उपयोग करती है जिसमें वे मान होते हैं जिन्हें अद्यतन करने की आवश्यकता होती है। इसलिए, लक्ष्य तालिका निर्दिष्ट शर्तों के लिए संदर्भ कॉलम डेटा के साथ अपडेट हो जाती है।
इस उदाहरण में SELECT स्टेटमेंट से UPDATE का उपयोग करना बहुत सरल है। आप संदर्भ स्तंभ और लक्ष्य स्तंभ मान प्राप्त करने के लिए पहले SELECT कथन का उपयोग कर सकते हैं।
चुनें e.City,A.City, e.PostCode,A.PostCodeFROM Employee eINNER JOIN[Address] aON e.EmpID =A.EmpID
इसके बाद, आप अपनी क्वेरी में मामूली बदलाव करेंगे, और यह एक अद्यतन विवरण तैयार करेगा जैसा कि नीचे दिखाया गया है।
- चुनिंदा कीवर्ड को अपडेट से बदलें।
- तालिका नाम या उपनाम निर्दिष्ट करें जिसे अद्यतन करने की आवश्यकता है।
- संदर्भ और लक्ष्य स्तंभों के बीच एक सेट कीवर्ड और बराबर प्रतीक (=) का उपयोग करें।
अपडेट e sete.City=A.City,e.PostCode=A.PostCodeFROM Employee eINNER JOIN [Address] aON e.EmpID =A.EmpID
फिर अद्यतन विवरण निष्पादित करें और सत्यापित करें कि स्रोत और लक्ष्य स्तंभ मान समान हैं।
विधि 2:SELECT से अपडेट करें:MERGE स्टेटमेंट
मिलान और बेजोड़ दोनों पंक्तियों के लिए स्रोत तालिका डेटा के आधार पर लक्ष्य तालिका में डेटा में हेरफेर करने के लिए MERGE कथन उपयोगी है। यह SELECT स्टेटमेंट फ़ंक्शन से UPDATE को निष्पादित करने का एक वैकल्पिक तरीका है।
नीचे दिए गए MERGE स्टेटमेंट के उदाहरण में, निम्नलिखित कार्य किए जाते हैं:
- [कर्मचारी] टेबल में डेटा अपडेट करने के लिए MERGE स्टेटमेंट का इस्तेमाल करें।
- यह तब एक अन्य तालिका का संदर्भ देता है जब USING क्लॉज लागू होता है।
- WHEN MATCHED तब स्रोत और लक्ष्य तालिका के बीच मर्ज JOIN (इनर जॉइन) को निर्दिष्ट करता है।
- फिर यह [पता] तालिका से [पोस्टकोड] और [शहर] को [कर्मचारी] तालिका में अद्यतन करता है, इसके बाद स्रोत और लक्ष्य कॉलम मैपिंग के बाद अद्यतन विवरण का उपयोग करता है।
- MERGE कथन हमेशा अर्धविराम (;) के साथ समाप्त होता है।
कर्मचारी को eUSING के रूप में मर्ज करें (चुनें * [पता] से) AON A.EmpID=e.EmpIDWHEN के रूप में मिलान किया गया और फिर अपडेट सेट किया गया। पोस्टकोड =ए। पोस्टकोड, ई.सिटी =ए।विधि 3:चयन से अद्यतन करें:सबक्वेरी विधि
सबक्वेरी एक आंतरिक क्वेरी को परिभाषित करती है जिसका उपयोग SELECT, INSERT, UPDATE और DELETE स्टेटमेंट के अंदर किया जा सकता है। यह अन्य तालिकाओं से मौजूदा तालिका डेटा को अद्यतन करने का एक सरल तरीका है।
कर्मचारी सेट अपडेट करें।
- उपरोक्त क्वेरी UPDATE स्टेटमेंट के SET क्लॉज में SELECT स्टेटमेंट का इस्तेमाल करती है।
- यदि सबक्वेरी को एक मेल खाने वाली पंक्ति मिलती है, तो अपडेट क्वेरी विशिष्ट कर्मचारी के रिकॉर्ड को अपडेट करती है।
- यदि सबक्वेरी NULL (कोई मिलान पंक्ति नहीं) लौटाती है, तो यह संबंधित कॉलम के लिए NULL को अपडेट करती है।
- यदि सबक्वायरी एक से अधिक मिलान वाली पंक्ति लौटाती है, तो UPDATE स्टेटमेंट एक त्रुटि उत्पन्न करता है - "SQL सर्वर सबक्वेरी ने 1 से अधिक मान लौटाए। इसकी अनुमति नहीं है जब सबक्वेरी तुलना ऑपरेटरों (=, !=, <, <=,>,>=) का उपयोग करती है।"
सबक्वायरी सीमाएं
- तुलनात्मक ऑपरेटर के साथ सबक्वेरी में केवल एक कॉलम नाम शामिल हो सकता है, सिवाय इसके कि यह IN या EXISTS ऑपरेटर के लिए उपयोग किया गया हो। इसलिए, यदि हमें डेटा के एकाधिक कॉलम अपडेट करने की आवश्यकता है, तो हमें अलग SQL स्टेटमेंट की आवश्यकता है।
- आप ntext का उपयोग नहीं कर सकते हैं , पाठ , और छवि सबक्वेरी में डेटा प्रकार।
- सबक्वायरी में GROUP BY और HAVING क्लॉज शामिल नहीं हो सकते हैं यदि सबक्वेरी में एक अनमॉडिफाइड तुलना ऑपरेटर है। असंशोधित तुलना ऑपरेटर किसी भी या सभी कीवर्ड का उपयोग नहीं कर सकता है।
चुनें स्टेटमेंट से अलग UPDATE के बीच परफ़ॉर्मेंस की तुलना
इस खंड में, हम SELECT विधियों से भिन्न UPDATE के बीच प्रदर्शन की तुलना करेंगे। ऐसा करने के लिए, हम SQL क्वेरीज़ को एक साथ निष्पादित करके शुरू करेंगे, SQL सर्वर प्रबंधन स्टूडियो में वास्तविक निष्पादन योजना (Ctrl + M) को सक्षम करेंगे और उन्हें Go स्टेटमेंट का उपयोग करके अलग करेंगे।
निष्पादन योजनाओं में, मुझे अपने डेमो के लिए निम्न डेटा मिलता है:
- जॉइन मेथड की क्वेरी लागत 41% है (समग्र बैच के सापेक्ष)
- MERGE स्टेटमेंट की क्वेरी लागत 34% है (समग्र बैच के सापेक्ष)
- सबक्वायरी पद्धति की क्वेरी लागत 24% है (समग्र बैच के सापेक्ष)
जॉइन विधि विशिष्ट प्रकार के लिए 40% लागत और क्लस्टर इंडेक्स अपडेट के लिए 35% लागत का उपयोग करती है।
मर्ज जॉइन स्रोत और लक्ष्य डेटा के बीच डेटा पंक्तियों के मिलान के लिए एक आंतरिक जुड़ाव का उपयोग करता है। सॉर्ट ऑपरेटर के लिए इसकी अधिकतम सापेक्ष लागत भी है।
सबक्वेरी कॉलम डेटा को अपडेट करने का सबसे तेज़ तरीका है। यह क्लस्टर्ड इंडेक्स अपडेट और क्लस्टर्ड इंडेक्स स्कैन को हाइलाइट के रूप में उपयोग करता है।
अधिक विवरण के लिए, आप मेरे पिछले लेख देख सकते हैं:SQL सर्वर निष्पादन योजना — यह क्या है और यह प्रदर्शन समस्याओं में कैसे मदद करता है? और SQL सर्वर निष्पादन योजनाओं को कैसे पढ़ें और उनका विश्लेषण करें।
सारांश
आप इस लेख में निर्दिष्ट किसी भी विधि का उपयोग SELECT स्टेटमेंट से UPDATE करने के लिए कर सकते हैं। सबक्वेरी कुशलता से काम करती है, लेकिन इसकी अपनी सीमाएँ हैं, जैसा कि पहले बताया गया है। आपके डेटाबेस का समग्र प्रदर्शन तालिका डेटा, अपडेट की संख्या, तालिका संबंध, अनुक्रमणिका और आंकड़ों पर निर्भर करता है।