मुख्य सामग्री पर जाएँ

SQL UPDATE with JOIN: यह कैसे काम करता है

जानें कि SQL में UPDATE with JOIN SQL Server में क्रॉस-टेबल अपडेट्स को कैसे सरल बनाता है। विशिष्ट उपयोग मामलों के लिए INNER JOIN और LEFT JOIN में अंतर समझें, और सबक्वेरियों या MERGE स्टेटमेंट का उपयोग करते हुए विकल्पों का अन्वेषण करें।
· 9 मि॰ पढ़ें

AI के साथ खोजें

संबंधित डेटाबेस में विश्वसनीयता और अखंडता के लिए सुसंगत डेटा महत्वपूर्ण है। जब आप संबंधित तालिकाओं में मौजूदा डेटा संशोधित करते हैं, तो डेटा की संगति बनाए रखने के लिए हम UPDATE स्टेटमेंट के साथ JOIN क्लॉज़ का उपयोग करते हैं। SQL Server में JOIN के साथ UPDATE ऑपरेशन समर्थित है और यह तालिकाओं में डेटा का सही समन्वयन सुनिश्चित करने में सहायक है।

SQL का JOIN ऑपरेशन विभिन्न तालिकाओं में साझा विदेशी कुंजियों के माध्यम से एकल-तालिका ऑपरेशनों से आगे बढ़कर अधिक जटिल अपडेट करने देता है। डेवलपर्स और डेटाबेस प्रशासकों के लिए JOIN के साथ UPDATE उपयोगी है क्योंकि यह दक्षता बढ़ाता है और डेटा असंगतियों के जोखिम को कम करता है। 

शुरू करने से पहले, मैं सुझाव दूंगा कि आप DataCamp का Introduction to SQL Server कोर्स लें ताकि आप समझ सकें कि SQL Server डेटाबेस कैसे काम करते हैं। यह ट्यूटोरियल विशेष रूप से SQL Server के संदर्भ में लिखा गया है। साथ ही हमारा ट्यूटोरियल Introduction to SQL Joins भी देखें, ताकि आप SQL में कई तालिकाओं के साथ काम करते समय JOIN का उपयोग करना सीख सकें।

SQL UPDATE with JOIN का उपयोग कैसे करें

SQL Server में, JOIN के साथ UPDATE ऑपरेशन आपको एक तालिका के रिकॉर्ड्स को दूसरी तालिका के मिलते-जुलते डेटा के आधार पर अपडेट करने देता है। यह तकनीक विशेष रूप से कई तालिकाओं में डेटा समन्वयित करने के लिए उपयोगी है।

INNER JOIN के साथ SQL UPDATE का उपयोग

SQL में INNER JOIN दोनों तालिकाओं में मिलते-जुलते डेटा वाली पंक्तियाँ/रिकॉर्ड्स प्राप्त करता है। जब इसे UPDATE स्टेटमेंट के साथ उपयोग किया जाता है, तो INNER JOIN सुनिश्चित करता है कि लक्ष्य तालिका में केवल वही रिकॉर्ड्स अपडेट हों जिनके लिए जुड़ी हुई तालिका में संगत मैच मौजूद हो।

INNER JOIN के साथ UPDATE की सामान्य संरचना में उस लक्ष्य तालिका को निर्दिष्ट करना शामिल है जिसे अपडेट करना है, और वे कॉलम बताना जिन्हें अपडेट किया जाएगा। संरचना में एक सामान्य कॉलम के आधार पर दूसरी तालिका से जोड़ने के लिए INNER JOIN का उपयोग भी शामिल है ताकि केवल आवश्यक रिकॉर्ड्स ही अपडेट हों।

INNER JOIN उदाहरण

मान लें कि आप एक रिटेल डेटाबेस प्रबंधित कर रहे हैं जहाँ आपको Customer तालिका में हुए परिवर्तनों के साथ Sales तालिका को समन्वयित करना है। किसी ग्राहक ने हाल ही में अपना पसंदीदा संपर्क तरीका बदला है, और आप चाहते हैं कि ये बदलाव दोनों तालिकाओं में परिलक्षित हों। आप INNER JOIN के साथ UPDATE का उपयोग करेंगे ताकि केवल उन्हीं ग्राहकों से संबंधित बिक्री रिकॉर्ड्स में संशोधन हो जिनकी संपर्क जानकारी अपडेट हुई है, और डेटा की अन्य पंक्तियाँ प्रभावित न हों।

-- Update the Sales table based on the new preferred contact methods in the Customers table
UPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNER JOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN (3, 7, 9);

INNER JOIN के साथ UPDATE: श्रेष्ठ अभ्यास

जब आप INNER JOIN के साथ UPDATE का उपयोग करें, तो कुशल क्वेरियों के लिए निम्न श्रेष्ठ अभ्यासों पर विचार करें।

  • जॉइन कॉलम्स पर इंडेक्स का उपयोग करें: प्रदर्शन अनुकूलित करने के लिए JOIN शर्त में प्रयुक्त कॉलम्स पर इंडेक्स सुनिश्चित करें, जिससे क्वेरी का निष्पादन तेज होता है।

  • अपडेट के दायरे को सीमित करें: केवल प्रासंगिक पंक्तियों को अपडेट करने और क्वेरी प्रदर्शन सुधारने के लिए WHERE क्लॉज़ का उपयोग करें।

LEFT JOIN के साथ SQL UPDATE का उपयोग

एक LEFT JOIN बाएँ (पहली) तालिका के सभी रिकॉर्ड्स और दाएँ (दूसरी) तालिका के मिलते-जुलते रिकॉर्ड्स लाने के लिए उपयोग होता है। यदि दाएँ तालिका में मिलते-जुलते परिणाम नहीं हैं, तो LEFT JOIN वाली क्वेरी दाएँ तालिका से NULL लौटाती है। जब इसे UPDATE स्टेटमेंट के साथ उपयोग किया जाता है, तो LEFT JOIN दूसरी तालिका में मैच न होने पर भी रिकॉर्ड्स अपडेट कर सकता है, जो मिसिंग डेटा भरने के लिए उपयोगी है। यदि आप SQL joins की समीक्षा करना चाहें, तो हमारा SQL Joins Cheat Sheet देखें।

LEFT JOIN उदाहरण

मान लें कि आप एक ऑनलाइन रिटेल स्टोर के डेटाबेस का प्रबंधन कर रहे हैं। Customers तालिका में सभी ग्राहकों की सूची है, जबकि Orders तालिका में इन ग्राहकों में से कुछ के ऑर्डर्स का विवरण है। आप सभी ग्राहकों के लिए, जिनमें वे भी शामिल हैं जिन्होंने अभी तक ऑर्डर नहीं दिया, ऑर्डर विवरण प्राप्त करने और अपडेट करने के लिए LEFT JOIN का उपयोग करेंगे। यह तरीका उन ग्राहकों के लिए, जिनके कोई ऑर्डर नहीं हैं, मिसिंग डेटा को NULL या निर्दिष्ट मान से भर देगा।

हमारा LEFT JOIN वाला उदाहरण थोड़ा अलग होगा क्योंकि यदि दाएँ तालिका में मिलते-जुलते रिकॉर्ड्स नहीं मिलते तो LEFT JOIN NULL मान लौटाता है। इस कारण, यह जानना महत्वपूर्ण है कि इन NULL मानों को कैसे संभालें। आप अपडेट किए जाने वाले कॉलम्स में डिफ़ॉल्ट मान सेट करके NULL मानों को संभाल सकते हैं। COALESCE() फ़ंक्शन का उपयोग करते हुए, LEFT JOIN मिसिंग डेटा के लिए एक डिफ़ॉल्ट मान की शर्त शामिल करेगा। निम्न क्वेरी दिखाती है कि NULL मानों के लिए डिफ़ॉल्ट मान कैसे सेट करें।

-- Update all customers to set default values where OrderStatus and OrderDate are NULL
UPDATE c
SET 
    c.OrderStatus = COALESCE(o.OrderStatus, 'No Orders'),
    c.OrderDate = COALESCE(o.OrderDate, '2023-01-01')   
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- Select from the updated Customers table
SELECT * 
FROM Customers;

आप COALESCE() या IFNULL() फ़ंक्शन का उपयोग उन NULL मानों को संभालने के लिए भी कर सकते हैं जो कॉलम्स को अपडेट करने से पहले होने वाली गणनाओं में शामिल हों। अधिक जानने के लिए हमारा COALESCE() SQL Function ट्यूटोरियल देखें।

LEFT JOIN के साथ UPDATE: श्रेष्ठ अभ्यास

जब आप LEFT JOIN के साथ UPDATE का उपयोग करें, तो कुशल क्वेरियों के लिए निम्न श्रेष्ठ अभ्यासों पर विचार करें।

  • स्पष्ट कॉलम संदर्भों का उपयोग करें: SELECT * के बजाय, जिन्हें आप अपडेट करना चाहते हैं वे कॉलम स्पष्ट रूप से निर्दिष्ट करें ताकि आपकी क्वेरी स्पष्ट रहे और अनपेक्षित अपडेट न हों।

  • जॉइन कॉलम्स पर इंडेक्स का उपयोग करें: JOIN शर्त में प्रयुक्त कॉलम्स पर इंडेक्स सुनिश्चित करें ताकि JOIN ऑपरेशन और समग्र क्वेरी निष्पादन समय का प्रदर्शन बेहतर हो।

Join के साथ SQL Update: प्रदर्शन संबंधी विचार

USQL में JOIN के साथ UPDATE का उपयोग करते समय प्रदर्शन निहितार्थ समझना आवश्यक है ताकि आपकी क्वेरियाँ कुशलता से चलें। इन ऑपरेशनों के प्रदर्शन पर कई कारकों का प्रभाव पड़ सकता है, जिनमें प्रयुक्त तालिकाओं का आकार, जॉइन का प्रकार, और उपयुक्त इंडेक्स का होना शामिल है।

इंडेक्स और क्वेरी स्पीड

जॉइन शर्त में शामिल कॉलम्स का इंडेक्सिंग अपडेट प्रक्रिया को तेज करने के लिए महत्वपूर्ण है। जब आप कॉलम्स को उपयुक्त रूप से इंडेक्स करते हैं, तो ऑपरेशन जॉइन के दौरान केवल मेल खाने वाली पंक्तियों को ढूँढता है, जिससे टेबल स्कैन में लगने वाला समय कम होता है।

बड़े डेटासेट्स का प्रभाव

बड़े डेटासेट्स के साथ काम करते समय, संसाधन-गहन ऑपरेशनों के कारण क्वेरी निष्पादन धीमा हो सकता है। बड़े डेटासेट्स में प्रदर्शन समस्याएँ कम करने के लिए निम्न श्रेष्ठ अभ्यासों पर विचार करें। साथ ही, यदि आप अपने काम के हिस्से के रूप में नियमित रूप से डेटाबेस डिज़ाइन या मेंटेन करेंगे, तो SQL Server for Database Administrators स्किल ट्रैक आज़माएँ। 

  • बैच अपडेट्स: अपडेट्स को छोटे-छोटे बैचों में तोड़ें ताकि डेटाबेस पर लोड कम हो और रिकॉर्ड्स कुशलता से अपडेट हों।

  • अपडेट के दायरे को सीमित करें: WHERE क्लॉज़ का उपयोग करते समय, आप अपडेट की जाने वाली पंक्तियाँ निर्दिष्ट करते हैं, जिससे क्वेरियों का प्रोसेसिंग समय कम होता है।

सामान्य गलतियाँ और उनसे कैसे बचें

SQL Server में JOIN के साथ UPDATE का उपयोग करते समय कुछ सामान्य गलतियाँ हो सकती हैं। ये गलतियाँ प्रदर्शन समस्याओं या अनपेक्षित डेटा अपडेट का कारण बन सकती हैं। नीचे कुछ आम गलतियाँ और उनसे बचने के तरीके दिए गए हैं।

अनपेक्षित अपडेट्स

यदि आप जॉइन शर्त को ठीक से निर्दिष्ट करने में असफल रहते हैं, तो JOIN के साथ UPDATE इच्छित से अधिक रिकॉर्ड्स अपडेट कर देगा। यह गलती आवश्यक सबसेट के बजाय पूरी तालिका को अपडेट कर सकती है। इस त्रुटि से बचने के लिए, हमेशा सटीक JOIN शर्त का उपयोग करें ताकि आवश्यक पंक्तियाँ ही अपडेट हों।

कार्टेशियन प्रोडक्ट्स

कार्टेशियन प्रोडक्ट तब होता है जब जॉइन शर्त गलत या अनुपस्थित हो, जिससे क्वेरी बाएँ तालिका की हर पंक्ति को दाएँ तालिका की हर पंक्ति से मिला दे। यह समस्या क्वेरी ऑपरेशन को धीमा कर सकती है और गलत परिणाम दे सकती है। इस गलती को रोकने के लिए, हमेशा सुनिश्चित करें कि JOIN शर्त सही तरह से परिभाषित हो। साथ ही, यह भी सुनिश्चित करें कि आप जॉइन शर्त लागू करने के लिए सही कॉलम्स इंगित कर रहे हैं।

SQL UPDATE with JOIN के विकल्प

हालाँकि संबंधित तालिकाओं में रिकॉर्ड्स अपडेट करने के लिए JOIN के साथ UPDATE एक शक्तिशाली तरीका है, फिर भी अपडेट हासिल करने के अन्य तरीके भी हैं। नीचे कुछ विकल्प दिए गए हैं।

सबक्वेरियाँ

जब आप किसी सरल शर्त के आधार पर अपडेट करना चाहते हैं तो सबक्वेरियाँ JOIN का एक महत्वपूर्ण विकल्प हैं। सबक्वेरियों के साथ, आप शर्त को सबक्वेरी में निर्दिष्ट करके कई जटिल तालिकाओं से बच सकते हैं।

निम्न उदाहरण दिखाता है कि Customers तालिका से नवीनतम CustomerStatus लेकर Sales तालिका को सबक्वेरी से कैसे अपडेट करें।

-- Update the CustomerStatus in the Sales table
UPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers table
SET CustomerStatus = (
    -- Fetch CustomerStatus from the Customers table for the matching CustomerID
    SELECT CustomerStatus 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
)
-- Update rows in Sales where a matching CustomerID exists in the Customers table
WHERE EXISTS (
    -- Subquery to check if a matching CustomerID exists in the Customers table
    SELECT 1 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
);

MERGE स्टेटमेंट

MERGE स्टेटमेंट एक बहुउद्देशीय SQL कमांड है जो दो तालिकाओं की तुलना के आधार पर एक ही क्वेरी में UPDATE, INSERT या DELETE ऑपरेशन करने देता है। जब आपको दो तालिकाओं के बीच डेटा समन्वयित करना हो—मिलती और न मिलती पंक्तियों दोनों को संभालते हुए—तब MERGE उपयोगी होता है।

MERGE स्टेटमेंट का उपयोग इसलिए सहायक है क्योंकि यह एक ही क्वेरी में कई ऑपरेशन करने का संक्षिप्त तरीका देता है। MERGE स्टेटमेंट का सिंटैक्स इस प्रकार है।

-- Merge data from the source table into the target table
MERGE INTO target_table AS target
USING source_table AS source
    -- Define the common key between the source and target tables
    ON target.common_column = source.common_column
-- When a match is found in both tables based on the common key
WHEN MATCHED THEN
    -- Update the target table's column with the corresponding value from the source table
    UPDATE SET target.column = source.column
-- When a row exists in the source table but not in the target table
WHEN NOT MATCHED THEN
    -- Insert the new data into the target table
    INSERT (column1, column2) 
    VALUES (source.column1, source.column2)
-- When a row exists in the target table but not in the source table
WHEN NOT MATCHED BY SOURCE THEN
    -- Delete the row from the target table
    DELETE;

निष्कर्ष

SQL Server में JOIN के साथ UPDATE का उपयोग समझना, संबंधपरक डेटाबेस में क्रॉस-टेबल डेटा अपडेट्स को कुशल बनाने के लिए महत्वपूर्ण है। यह तकनीक आपको एक तालिका के रिकॉर्ड्स को दूसरी तालिका के मिलते-जुलते डेटा के आधार पर अपडेट करने देती है, जिससे संबंधित तालिकाओं में डेटा की सुसंगति और समन्वय सुनिश्चित होता है। इन तकनीकों और श्रेष्ठ अभ्यासों को लागू करने से आपके डेटाबेस ऑपरेशंस बेहतर होंगे, और डेटा प्रबंधन अधिक सटीक, कुशल और विश्वसनीय बनेगा। 

यदि आप अपनी SQL स्किल्स को आगे बढ़ाना चाहते हैं, तो मैं DataCamp का SQL Server Fundamentals स्किल ट्रैक देखने की सलाह दूँगा, जिससे आपकी डेटा विश्लेषण क्षमताएँ बेहतर होंगी। Writing Functions and Stored Procedures in SQL Server कोर्स भी आपको SQL Server में कुशल डेटा मैनिपुलेशन सीखने में मदद करेगा। यदि आप SQL इंटरव्यू की तैयारी कर रहे हैं, तो हमारी ब्लॉग पोस्ट 20 Top SQL Joins Interview Questions अवश्य पढ़ें। अंत में, यदि आप डेटा इंजीनियर के रूप में करियर में अपनी SQL स्किल्स लागू करना चाहते हैं, तो हमारा Data Engineer in Python करियर ट्रैक भी करें, जिसके अंत में प्रमाणन शामिल है।

Allan Ouko

लेखक

Allan Ouko

डेटा एनालिटिक्स, बिज़नेस इंटेलिजेंस और डेटा साइंस में व्यावहारिक अनुभव रखने वाला डेटा साइंस तकनीकी लेखक। मैं SQL, Python, Power BI, Databricks और डेटा इंजीनियरिंग पर व्यावहारिक, उद्योग-केंद्रित सामग्री लिखता/लिखती हूँ, जो वास्तविक दुनिया की एनालिटिक्स कार्य से जुड़ी होती है। मेरी लेखनी तकनीकी गहराई और व्यावसायिक प्रभाव के बीच पुल का काम करती है, जिससे पेशेवरों को डेटा को आत्मविश्वासपूर्ण निर्णयों में बदलने में मदद मिलती है. 

Frequently Asked SQL Questions

SQL में UPDATE with JOIN का उपयोग करने का उद्देश्य क्या है?

JOIN के साथ UPDATE आपको एक तालिका के रिकॉर्ड्स को दूसरी तालिका के मिलते-जुलते डेटा के आधार पर अपडेट करने देता है।

UPDATE स्टेटमेंट में INNER JOIN और LEFT JOIN कैसे भिन्न होते हैं?

एक INNER JOIN केवल उन्हीं रिकॉर्ड्स को अपडेट करता है जिनके दोनों तालिकाओं में मिलते-जुलते रोज़ हैं, जबकि LEFT JOIN लक्ष्य तालिका के सभी रिकॉर्ड्स को अपडेट करता है, जिनमें वे भी शामिल हैं जिनका जुड़ी तालिका में कोई मिलान नहीं है, और यह मिसिंग डेटा भरने या NULL मानों को संभालने में मदद करता है।

SQL में UPDATE with JOIN के प्रदर्शन संबंधी मुद्दे क्या हैं?

बड़ी तालिकाएँ/डेटासेट्स JOIN के साथ UPDATE की क्वेरी परफॉर्मेंस को प्रभावित कर सकते हैं क्योंकि उन्हें अधिक प्रोसेसिंग पावर की आवश्यकता होती है।

कौन-से डेटाबेस SQL में UPDATE with JOIN का समर्थन करते हैं?

JOIN के साथ UPDATE की अवधारणा SQL Server, MySQL और PostgreSQL में काम करती है, हालाँकि सिंटैक्स डेटाबेस के अनुसार भिन्न होता है। Oracle सीधे तौर पर JOIN के साथ UPDATE का समर्थन नहीं करता और इसके लिए सबक्वेरियों या MERGE स्टेटमेंट का उपयोग करना पड़ता है।

SQL में UPDATE with JOIN के विकल्प क्या हैं?

सबक्वेरियों या MERGE स्टेटमेंट का उपयोग JOIN के साथ UPDATE के उपयुक्त विकल्प हैं।

विषय