एसक्यूएल INSERT
तालिका में अलग-अलग पंक्तियों को सम्मिलित करने के लिए कथन का सबसे अधिक उपयोग किया जाता है।
लेकिन आप किसी क्वेरी के परिणाम तालिका में भी सम्मिलित कर सकते हैं। इसका मतलब है कि आप एक साथ कई पंक्तियाँ सम्मिलित कर सकते हैं (जब तक वे क्वेरी द्वारा वापस आ जाती हैं)।
मूल उदाहरण
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है।
INSERT INTO Pets2
SELECT * FROM Pets;
यह Pets
. से सभी पंक्तियों को सम्मिलित करता है Pets2
. में तालिका टेबल।
यह मानता है कि हमने पहले ही Pets2
. बना लिया है तालिका और यह कि इसकी सही परिभाषा है।
यदि यह मौजूद नहीं है या यदि इसकी सही परिभाषा नहीं है, तो आपको एक त्रुटि मिलेगी।
एकाधिक तालिकाओं से डेटा सम्मिलित करें
आप कई तालिकाओं से डेटा सम्मिलित करने के लिए इस पद्धति का उपयोग कर सकते हैं।
INSERT INTO PetsTypesOwners
SELECT
p.PetId,
p.PetName,
p.DOB,
pt.PetTypeId,
pt.PetType,
o.OwnerId,
o.FirstName,
o.LastName,
o.Phone,
o.Email
FROM Pets p
INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId
INNER JOIN Owners o
ON p.OwnerId = o.OwnerId;
इस उदाहरण में मैंने PetsTypesOwners
. नामक एक तालिका में तीन तालिकाओं से डेटा सम्मिलित किया है ।
ध्यान दें कि मैंने प्रत्येक कॉलम को स्पष्ट रूप से सूचीबद्ध किया है। मैंने ऐसा इसलिए किया क्योंकि गंतव्य कॉलम में संयुक्त तीन तालिकाओं की तुलना में कम कॉलम हैं। इस मामले में, ऐसा इसलिए है, क्योंकि अगर मैंने सभी कॉलमों का चयन किया होता, तो क्वेरी ने डुप्लिकेट कॉलम लौटा दिए होते, क्योंकि विदेशी कुंजियों का नाम और मान उनकी प्राथमिक कुंजियों के समान होता था।
अगर मैं उन डुप्लिकेट कॉलम को शामिल करना चाहता हूं, तो गंतव्य कॉलम में उन डुप्लिकेट कॉलम को शामिल करना होगा, लेकिन प्रत्येक डुप्लिकेट जोड़ी में से एक के लिए एक अलग नाम के साथ।
यहां सभी स्तंभों को चुनने का एक उदाहरण दिया गया है (मैं उन्हें यहां स्पष्ट रूप से चुनूंगा, ताकि आप उनके नाम देख सकें):
INSERT INTO PetsTypesOwners2
SELECT
p.PetId,
p.OwnerId,
p.PetTypeId,
p.PetName,
p.DOB,
pt.PetTypeId,
pt.PetType,
o.OwnerId,
o.FirstName,
o.LastName,
o.Phone,
o.Email
FROM Pets p
INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId
INNER JOIN Owners o
ON p.OwnerId = o.OwnerId;
आप देख सकते हैं कि OwnerId
. नामक दो कॉलम हैं और दो को PetTypeId
. कहा जाता है , प्रत्येक एक अलग तालिका से। ये उनकी संबंधित तालिकाओं की प्राथमिक कुंजी और विदेशी कुंजी हैं।
यह देखते हुए कि वे कॉलम डुप्लिकेट हैं, मैंने पिछले उदाहरण में प्रत्येक में से केवल एक को शामिल किया है। लेकिन इस डेमो के उद्देश्य के लिए, मैंने उन्हें इस उदाहरण में शामिल किया है।
तो इस नए INSERT INTO... SELECT
. को पूरा करने के लिए कथन, हमें कॉलम की सही संख्या और संगत परिभाषा के साथ हमारी गंतव्य तालिका की आवश्यकता है।
इसलिए, हमारी गंतव्य तालिका की परिभाषा कुछ इस तरह दिख सकती है:
CREATE TABLE PetsTypesOwners2 (
PetId int NOT NULL PRIMARY KEY,
PetPetType varchar(60) NOT NULL,
PetOwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL,
PetTypeId int NOT NULL,
PetType varchar(60) NOT NULL,
OwnerId int NOT NULL,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
Phone varchar(20) NOT NULL,
Email varchar(254)
);
इस मामले में, मैंने प्रत्येक डुप्लिकेट कॉलम में से एक को Pet
. के साथ प्रीफ़िक्स किया है . विशेष रूप से, मैंने एक PetPetTypeId
बनाया है (जो p.OwnerId
. पर मैप करता है क्वेरी में कॉलम) और PetOwnerId
कॉलम (जो p.PetTypeId
. पर मैप करता है क्वेरी में कॉलम)।
हालांकि, यह ध्यान रखना महत्वपूर्ण है कि इससे कोई फर्क नहीं पड़ता कि आप अपने कॉलम को गंतव्य तालिका में क्या कहते हैं। INSERT INTO... SELECT
बयान इसकी परवाह नहीं करता है। INSERT INTO... SELECT
स्टेटमेंट केवल कॉलम ऑर्डर में रुचि रखता है।
दृश्य से डेटा सम्मिलित करें
आप उसी का उपयोग कर सकते हैं INSERT INTO... SELECT
किसी दृश्य से तालिका में डेटा सम्मिलित करने के लिए सिंटैक्स।
यहां एक त्वरित उदाहरण दिया गया है:
INSERT INTO PetTypeCount
SELECT * FROM vPetTypeCount;
इस मामले में, vPetTypeCount
एक दृश्य है, और मैं इसकी सामग्री को PetTypeCount
. नामक तालिका में सम्मिलित कर रहा हूं ।
संग्रहीत प्रक्रिया से डेटा सम्मिलित करें
कुछ DBMS (जैसे SQL सर्वर) भी उसी का उपयोग कर सकते हैं INSERT INTO... SELECT
एक संग्रहीत कार्यविधि से तालिका में डेटा सम्मिलित करने के लिए सिंटैक्स।
यहां एक त्वरित उदाहरण दिया गया है:
INSERT INTO PetById
EXEC uspGetPetById 2;
फिर से, यह मानता है कि हमारे पास सही परिभाषा के साथ एक गंतव्य तालिका है।
SELECT INTO
कथन
आपके DBMS के आधार पर, एक SELECT INTO
. भी है कथन, जिसका उपयोग आप परिणाम सेट के आधार पर स्वचालित रूप से एक नई तालिका बनाने के लिए कर सकते हैं, फिर उस परिणाम सेट को उसमें डालें।