Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर CRUD संचालन

डेटाबेस प्रोग्रामिंग में, चार मूलभूत संचालन होते हैं:बनाएं , पढ़ें , अपडेट करें , और हटाएं - सीआरयूडी संचालन। वे डेटाबेस प्रोग्रामिंग में पहला कदम हैं।

सीआरयूडी शब्द पहली बार जेम्स मार्टिन की पुस्तक 'मैनेजिंग द डाटाबेस एनवायरनमेंट' में दिखाई दिया। तब से, यह शब्द लोकप्रिय हो गया है। इस लेख में, हम SQL सर्वर के संदर्भ में CRUD ऑपरेशन का पता लगाने जा रहे हैं क्योंकि ऑपरेशन सिंटैक्स अन्य रिलेशनल और NoSQL डेटाबेस से भिन्न हो सकता है।

तैयारी

संबंधपरक डेटाबेस का मुख्य विचार तालिकाओं में डेटा संग्रहीत करना है। तालिका डेटा को पढ़ा, डाला, हटाया जा सकता है। इस तरह, CRUD संचालन तालिका डेटा में हेरफेर करते हैं।

सी सी REATE पंक्तियों/पंक्तियों को तालिका में सम्मिलित करें
आर आर ईएडी तालिका से पंक्ति/पंक्तियां पढ़ें (चुनें)
यू यू पीडीएटी तालिका में पंक्तियों/पंक्तियों को संपादित करें
डी डी ELETE तालिका से पंक्ति/पंक्तियां हटाएं

सीआरयूडी संचालन को स्पष्ट करने के लिए, हमें डेटा तालिका की आवश्यकता है। आइए एक बनाते हैं। इसमें केवल तीन कॉलम होंगे। पहला कॉलम देश के नाम स्टोर करेगा, दूसरा इन देशों के महाद्वीप को स्टोर करेगा और आखिरी कॉलम इन देशों की आबादी को स्टोर करेगा। हम इस तालिका को टी-एसक्यूएल स्टेटमेंट की मदद से बना सकते हैं और इसे TblCountry के रूप में एंटाइटेल कर सकते हैं।

CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

अब, आइए TblCountry . पर किए गए CRUD संचालनों की समीक्षा करें टेबल।

C - बनाएं

तालिका में नई पंक्तियाँ जोड़ने के लिए, हम इन्सर्ट इनटू . का उपयोग करते हैं आज्ञा। इस कमांड में, हमें लक्ष्य तालिका का नाम निर्दिष्ट करना होगा और कॉलम नामों को कोष्ठक में सूचीबद्ध करना होगा। विवरण संरचना VALUES के साथ समाप्त होनी चाहिए:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   ('Germany','Europe',8279000 )

तालिका में कई पंक्तियों को जोड़ने के लिए, हम निम्नलिखित प्रकार के INSERT कथन का उपयोग कर सकते हैं:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

ध्यान दें कि INTO कीवर्ड वैकल्पिक है, और आपको इसे इन्सर्ट स्टेटमेंट में उपयोग करने की आवश्यकता नहीं है।

INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

साथ ही, आप तालिका में एकाधिक पंक्तियों को सम्मिलित करने के लिए निम्न प्रारूप का उपयोग कर सकते हैं:

INSERT INTO TblCountry
SELECT 'Germany','Europe',8279000 
UNION ALL
SELECT 'Japan','Asia',126800000 
UNION ALL
SELECT 'Moroco','Africa',35740000

अब, हम डेटा को सीधे स्रोत तालिका से गंतव्य तालिका में कॉपी करेंगे। इस विधि को INSERT INTO … SELECT . के रूप में जाना जाता है बयान।

INSERT INTO … चयन के लिए स्रोत और गंतव्य तालिकाओं के डेटा प्रकारों के मिलान की आवश्यकता होती है। निम्नलिखित INSERT INTO… SELECT स्टेटमेंट में, हम SourceCountryTbl का डेटा डालेंगे। TblCountry . में तालिका टेबल।

सबसे पहले, हम कुछ सिंथेटिक डेटा को SourceCountryTbl . में सम्मिलित करते हैं इस प्रदर्शन के लिए तालिका।

DROP TABLE IF EXISTS [SourceCountryTbl]
CREATE TABLE [dbo].[SourceCountryTbl]
(
	[SourceCountryName]		VARCHAR(50), 
    [SourceContinentNames]	VARCHAR(50) NULL, 
    [SourceCountryPopulation]		BIGINT NULL 
	
)


INSERT INTO [SourceCountryTbl] 
VALUES 
('Ukraine','Europe',44009214  ) ,
('UK','Europe',66573504) ,
('France','Europe',65233271)

अब हम INSERT INTO… SELECT स्टेटमेंट परफॉर्म करेंगे।

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl

ऊपर दिए गए इंसर्ट स्टेटमेंट में सभी SourceCountryTbl को जोड़ा गया है TblCountry . को डेटा टेबल। हम कहां . भी जोड़ सकते हैं चयन कथन को फ़िल्टर करने के लिए क्लॉज।

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl WHERE TargetCountryName='UK'

SQL सर्वर हमें INSERT INTO… SELECT स्टेटमेंट के साथ टेबल वेरिएबल्स (ऑब्जेक्ट्स जो स्थानीय दायरे में अस्थायी टेबल डेटा को स्टोर करने में मदद करता है) का उपयोग करने की अनुमति देता है। निम्नलिखित प्रदर्शन में, हम तालिका चर का उपयोग स्रोत तालिका के रूप में करेंगे:

  DECLARE @SourceVarTable AS TABLE
  ([TargetCountryName]		VARCHAR(50), 
    [TargetContinentNames]	VARCHAR(50) NULL, 
    [TargetCountryPopulation]		BIGINT NULL 
   )


    INSERT INTO @SourceVarTable 
     VALUES 
     ('Ukraine','Europe',44009214  ) ,
     ('UK','Europe',66573504) ,
     ('France','Europe',65233271)


INSERT INTO TblCountry
SELECT * FROM @SourceVarTable

युक्ति :Microsoft ने SQL Server 2016 में एक विशेषता की घोषणा की जो समानांतर सम्मिलित करें . है . यह सुविधा हमें समानांतर थ्रेड में INSERT संचालन करने की अनुमति देती है।

अगर आप टैबलॉक . जोड़ते हैं आपके इंसर्ट स्टेटमेंट के अंत में संकेत, SQL सर्वर आपके सर्वर की समानांतरता की अधिकतम डिग्री या समानांतरवाद मापदंडों के लिए लागत सीमा के अनुसार प्रसंस्करण निष्पादन योजना के साथ एक समानांतर चुन सकता है।

समानांतर इंसर्ट प्रोसेसिंग से इंसर्ट स्टेटमेंट का प्रदर्शन समय भी कम हो जाएगा। हालांकि, टैबलॉक संकेत सम्मिलित ऑपरेशन के दौरान सम्मिलित तालिका का ताला प्राप्त करेगा। पैरेलल इंसर्ट के बारे में अधिक जानकारी के लिए, आप रियल वर्ल्ड पैरेलल इंसर्ट… सेलेक्ट करें।

एक और आसान कथन है SELECT INTO। यह विधि हमें एक तालिका से डेटा को एक नई बनाई गई तालिका में कॉपी करने की अनुमति देती है। निम्नलिखित कथन में, NewCountryTable क्वेरी के निष्पादन से पहले मौजूद नहीं था। क्वेरी तालिका बनाती है और TblCountry . से सभी डेटा सम्मिलित करती है टेबल।

SELECT * INTO NewCountryTable 
FROM TblCountry

उसी समय, हम स्रोत तालिका के विशेष स्तंभों के लिए एक नई तालिका बना सकते हैं।

कुछ मामलों में, हमें INSERT कथन से सम्मिलित मानों को वापस करने और उपयोग करने की आवश्यकता होती है। SQL सर्वर 2005 के बाद से, INSERT कथन हमें INSERT कथन से विचाराधीन मानों को पुनः प्राप्त करने की अनुमति देता है।

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

निम्नलिखित नमूने में, हम एक कॉलम वाली तालिका घोषित करेंगे और SeqID के आउटपुट को सम्मिलित करेंगे। OUTPUT कॉलम की सहायता से इस तालिका में कॉलम मान:

DROP TABLE IF EXISTS TblCountry
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL ,
	SeqID uniqueidentifier  default(newid())
)	



DECLARE @OutputID AS TABLE(LogID uniqueidentifier) 
 
INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
OUTPUT INSERTED.SeqId INTO @OutputID
VALUES   
('Germany','Europe',8279000 )

SELECT * FROM @OutPutId

R - पढ़ें

पढ़ें ऑपरेशन तालिका से डेटा पुनर्प्राप्त करता है और तालिका के रिकॉर्ड के साथ सेट परिणाम देता है। यदि हम एक से अधिक तालिका से डेटा पुनर्प्राप्त करना चाहते हैं, तो हम जॉइन ऑपरेटर का उपयोग कर सकते हैं और तालिकाओं के बीच तार्किक संबंध बना सकते हैं।

पढ़ने . में SELECT स्टेटमेंट एक ही प्राथमिक भूमिका निभाता है कार्यवाही। यह तीन घटकों पर आधारित है:

  • कॉलम – हम उन स्तंभों को परिभाषित करते हैं जिनसे हम डेटा पुनर्प्राप्त करना चाहते हैं
  • तालिका – हम वह तालिका निर्दिष्ट करें जिससे हम डेटा प्राप्त करना चाहते हैं
  • फ़िल्टर करें - हम उस डेटा को फ़िल्टर कर सकते हैं जिसे हम पढ़ना चाहते हैं। यह हिस्सा वैकल्पिक है।

चयन कथन का सरलतम रूप इस प्रकार है:

SELECT column1, column2,...,columnN
FROM table_name

अब, हम उदाहरणों के माध्यम से जाएंगे। सबसे पहले, हमें पढ़ने के लिए एक नमूना तालिका की आवश्यकता है। आइए इसे बनाएं:

DROP TABLE  IF EXISTS TblCountry
 GO
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

GO
INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

तालिका के सभी कॉलम पढ़ना

तारक (*) ऑपरेटर का उपयोग चयन कथनों में किया जाता है क्योंकि यह तालिका के सभी कॉलम लौटाता है:

SELECT * FROM TblCountry

युक्ति :तारक (*) ऑपरेटर प्रदर्शन को नकारात्मक रूप से प्रभावित कर सकता है क्योंकि यह अधिक नेटवर्क ट्रैफ़िक का कारण बनता है और अधिक संसाधनों का उपभोग करता है। इस प्रकार, यदि आपको लौटाए गए सभी कॉलम से सभी डेटा प्राप्त करने की आवश्यकता नहीं है, तो चयन कथन में तारांकन (*) का उपयोग करने से बचें।

तालिका के विशेष कॉलम पढ़ना

हम तालिका के विशेष कॉलम भी पढ़ सकते हैं। आइए उस उदाहरण की समीक्षा करें जो केवल देश का नाम लौटाएगा और देश की आबादी कॉलम:

SELECT CountryName,CountryPopulation FROM TblCountry

चयन कथनों में उपनाम का उपयोग करना

सेलेक्ट स्टेटमेंट में हम टेबल या कॉलम को अस्थायी नाम दे सकते हैं। ये अस्थायी नाम उपनाम हैं। आइए पिछले दो प्रश्नों को तालिका और स्तंभ उपनामों के साथ फिर से लिखें।

निम्नलिखित क्वेरी में, TblC उपनाम तालिका का नाम निर्दिष्ट करेगा:

SELECT TblC.* FROM TblCountry TblC

निम्नलिखित उदाहरण में, हम कॉलम नामों के लिए उपनाम प्रदान करेंगे। हम देश का नाम बदल देंगे करने के लिए CName , और देश की आबादी - CPop . तक

SELECT TblC.CountryName AS [CName], CountryPopulation AS [CPop] FROM TblCountry TblC

उपनाम के उद्देश्य हैं:

  • यदि तालिका या स्तंभ नाम जटिल हैं तो क्वेरी को अधिक पठनीय बनाएं।
  • तालिका के लिए क्वेरी का एक से अधिक बार उपयोग करना सुनिश्चित करें।
  • यदि तालिका या स्तंभ का नाम लंबा है तो क्वेरी लेखन को सरल बनाएं।

चयन कथनों को फ़िल्टर करना

सेलेक्ट स्टेटमेंट हमें WHERE क्लॉज के माध्यम से परिणाम सेट को फ़िल्टर करने की अनुमति देते हैं। उदाहरण के लिए, हम देश का नाम . के अनुसार सेलेक्ट स्टेटमेंट को फ़िल्टर करना चाहते हैं कॉलम और केवल जर्मनी के डेटा को परिणाम में लौटाएं। निम्न क्वेरी फ़िल्टर के साथ रीड ऑपरेशन निष्पादित करेगी:

SELECT TblC.* FROM TblCountry TblC
WHERE TblC.CountryName='Germany'

चयन कथन परिणामों को क्रमबद्ध करना

ORDER BY क्लॉज हमें निर्दिष्ट कॉलम या कॉलम द्वारा SELECT स्टेटमेंट के परिणाम सेट को सॉर्ट करने में मदद करता है। हम ORDER BY क्लॉज की मदद से आरोही या अवरोही सॉर्टिंग कर सकते हैं।

हम TblCountry . को क्रमबद्ध करेंगे देशों की जनसंख्या के अनुसार तालिका आरोही क्रम में:

SELECT TblC.* FROM TblCountry TblC
ORDER BY TblC.CountryPopulation ASC

युक्ति :आप ORDER BY क्लॉज में कॉलम इंडेक्स का उपयोग कर सकते हैं, और कॉलम इंडेक्स नंबर 1 से शुरू होते हैं।

हम पिछली क्वेरी भी लिख सकते हैं। संख्या तीन (3) देश की जनसंख्या . को दर्शाती है कॉलम:

SELECT TblC.* FROM TblCountry TblC
ORDER BY 3 ASC

U - अपडेट

अद्यतन विवरण तालिका में मौजूदा डेटा को संशोधित करता है। इस कथन में SET क्लॉज शामिल होना चाहिए ताकि हम डेटा को संशोधित करने के लिए लक्ष्य कॉलम को परिभाषित कर सकें।

निम्न क्वेरी देश की आबादी . की सभी पंक्तियों को बदल देगी स्तंभ मान 1.

UPDATE TblCountry SET CountryPopulation=1
GO
SELECT TblC.* FROM TblCountry TblC

अद्यतन विवरण में, हम तालिका में किसी विशेष पंक्ति या पंक्तियों को संशोधित करने के लिए WHERE क्लॉज का उपयोग कर सकते हैं।

आइए जापान को बदलें देश की आबादी . की पंक्ति से 245000:

UPDATE TblCountry SET CountryPopulation=245000
WHERE CountryName = 'Japan'
GO
SELECT TblC.* FROM TblCountry TblC

अपडेट स्टेटमेंट डिलीट और इंसर्ट स्टेटमेंट का एक संघ है। इसलिए, हम OUTPUT क्लॉज के माध्यम से सम्मिलित और हटाए गए मानों को वापस कर सकते हैं।

आइए एक उदाहरण बनाते हैं:

UPDATE TblCountry SET CountryPopulation=22
OUTPUT inserted.CountryPopulation AS [Insertedvalue],
deleted.CountryPopulation AS [Deletedvalue]
WHERE CountryName = 'Germany'

जैसा कि आप देख सकते हैं, हमने देश की आबादी . को संशोधित किया है 1 से 22 तक का मान। तब हम सम्मिलित और हटाए गए मानों का पता लगा सकते हैं। इसके अतिरिक्त, हम इन मानों को एक तालिका चर (एक विशेष चर प्रकार जिसे तालिका के रूप में उपयोग किया जा सकता है) में सम्मिलित कर सकते हैं।

हम सम्मिलित और हटाए गए मानों को तालिका चर में सम्मिलित करने जा रहे हैं:

DECLARE @LogTable TABLE(InsertValLog INT , DelValLog INT) 


UPDATE TblCountry SET CountryPopulation=45
OUTPUT inserted.CountryPopulation ,
deleted.CountryPopulation INTO @LogTable
WHERE CountryName = 'Germany'


SELECT * FROM @LogTable

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

निम्नलिखित उदाहरण में, अद्यतन क्वेरी 3 पंक्तियों को बदल देगी, और @@ ROWCOUNT सिस्टम चर 3 वापस आ जाएगा।

UPDATE TblCountry SET CountryPopulation=1
SELECT @@ROWCOUNT AS [AffectedRowNumber]

D - हटाएं

डिलीट स्टेटमेंट टेबल से मौजूदा रो/पंक्तियों को हटा देता है।

सबसे पहले, आइए देखें कि DELETE स्टेटमेंट में WHERE क्लॉज का उपयोग कैसे करें। अधिकांश समय हम हटाई गई पंक्तियों को फ़िल्टर करना चाहते हैं।

नीचे दिया गया उदाहरण दिखाता है कि किसी विशेष पंक्ति को कैसे हटाया जाए:

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry WHERE CountryName='Japan'
SELECT TblC.* FROM TblCountry TblC

हालांकि DELETE स्टेटमेंट के साथ, हम टेबल से सभी रिकॉर्ड्स को हटा सकते हैं। हालाँकि, DELETE कथन बहुत ही बुनियादी है, और हम WHERE शर्त का उपयोग नहीं करते हैं।

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry
SELECT TblC.* FROM TblCountry TblC

फिर भी, डेटाबेस डिज़ाइन की कुछ परिस्थितियों में, DELETE कथन पंक्ति/पंक्तियों को नहीं हटाता है यदि यह विदेशी कुंजियों या अन्य बाधाओं का उल्लंघन करता है।

उदाहरण के लिए, AdventureWorks . में डेटाबेस, हम उत्पाद श्रेणी . की पंक्तियों को नहीं हटा सकते तालिका क्योंकि ProductCategoryID उस तालिका में एक विदेशी कुंजी के रूप में निर्दिष्ट है।

आइए उत्पाद श्रेणी . से एक पंक्ति को हटाने का प्रयास करें तालिका - निस्संदेह, हम निम्नलिखित त्रुटि का सामना करेंगे:

DELETE FROM [Production].[ProductCategory]
WHERE ProductCategoryID=1

निष्कर्ष

इस प्रकार, हमने SQL में CRUD संचालन की खोज की है। INSERT, SELECT, UPDATE, और DELETE स्टेटमेंट SQL डेटाबेस के मूल कार्य हैं, और यदि आप SQL डेटाबेस प्रोग्रामिंग सीखना चाहते हैं तो आपको उन्हें मास्टर करना होगा। सीआरयूडी सिद्धांत एक अच्छा प्रारंभिक बिंदु हो सकता है, और बहुत सारे अभ्यास आपको एक विशेषज्ञ बनने में मदद करेंगे।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जांचें कि क्या तालिका में OBJECTPROPERTY () के साथ SQL सर्वर में टाइमस्टैम्प कॉलम है

  2. SQL सर्वर - एक स्ट्रिंग में nth घटना का पता लगाएं

  3. SQL सर्वर डेटाबेस CPU उपयोग आँकड़े

  4. SQL सर्वर में डेटाबेस स्कीमा का उपयोग करना

  5. SQL सर्वर डेटाबेस स्नैपशॉट -3