दोनों उत्तर मुझे विशेष रूप से Informix में ठीक दिखाई देते हैं, और मूल रूप से मानक SQL हैं। वह है, संकेतन:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
Informix के साथ ठीक काम करता है और, मुझे उम्मीद है, सभी DBMS। (एक बार 5 या अधिक साल पहले, यह इस तरह की चीज़ है जिसे MySQL ने हमेशा समर्थन नहीं दिया; अब इस तरह के मानक SQL सिंटैक्स और AFAIK के लिए इसे अच्छा समर्थन प्राप्त है, यह इस अंकन पर ठीक काम करेगा।) स्तंभ सूची वैकल्पिक है, लेकिन अनुक्रम में लक्ष्य कॉलम को इंगित करता है, इसलिए SELECT के परिणाम का पहला कॉलम पहले सूचीबद्ध कॉलम में जाएगा, आदि कॉलम सूची की अनुपस्थिति में, SELECT के परिणाम का पहला कॉलम चला जाता है। लक्ष्य तालिका का पहला स्तंभ।
सिस्टम के बीच क्या अलग हो सकता है विभिन्न डेटाबेस में तालिकाओं की पहचान करने के लिए उपयोग किए जाने वाले नोटेशन का उपयोग किया जाता है - मानक के पास अंतर-डेटाबेस (अकेले इंटर-डीबीएमएस चलो) संचालन के बारे में कहने के लिए कुछ भी नहीं है। Informix के साथ, आप तालिका की पहचान करने के लिए निम्नलिखित नोटेशन का उपयोग कर सकते हैं:
[dbase[@server]:][owner.]table
अर्थात्, आप एक डेटाबेस निर्दिष्ट कर सकते हैं, वैकल्पिक रूप से सर्वर की पहचान कर सकते हैं जो उस डेटाबेस को होस्ट करता है यदि यह वर्तमान सर्वर में नहीं है, उसके बाद एक वैकल्पिक स्वामी, डॉट और अंत में वास्तविक तालिका नाम है। SQL मानक इंफॉर्मिक्स शब्द के मालिक के लिए स्कीमा शब्द का उपयोग करता है। इस प्रकार, Informix में, निम्नलिखित में से कोई भी सूचना तालिका की पहचान कर सकती है:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
सामान्य रूप से मालिक को उद्धृत करने की आवश्यकता नहीं है; हालाँकि, यदि आप उद्धरण का उपयोग करते हैं, तो आपको स्वामी का नाम सही-सही बताना होगा - यह केस-संवेदी हो जाता है। अर्थात्:
someone.table
"someone".table
SOMEONE.table
सभी एक ही तालिका की पहचान करते हैं। Informix के साथ, MODE ANSI डेटाबेस में एक हल्की जटिलता होती है, जहाँ मालिक के नाम आम तौर पर अपर-केस में बदल जाते हैं (Informix इसका अपवाद है)। यानी, MODE ANSI डेटाबेस में (आमतौर पर इस्तेमाल नहीं किया जाता), आप लिख सकते हैं:
CREATE TABLE someone.table ( ... )
और सिस्टम कैटलॉग में मालिक का नाम "किसी" के बजाय "SoneONE" होगा। यदि आप स्वामी के नाम को दोहरे उद्धरण चिह्नों में संलग्न करते हैं, तो यह सीमांकित पहचानकर्ता की तरह कार्य करता है। मानक SQL के साथ, सीमांकित पहचानकर्ताओं का उपयोग कई स्थानों पर किया जा सकता है। Informix के साथ, आप उन्हें केवल स्वामी नामों के आसपास उपयोग कर सकते हैं - अन्य संदर्भों में, Informix एकल-उद्धृत स्ट्रिंग्स को स्ट्रिंग्स के रूप में और डबल-उद्धरण स्ट्रिंग्स को सीमांकित पहचानकर्ताओं के रूप में अलग करने के बजाय, एकल-उद्धृत और डबल-उद्धृत स्ट्रिंग्स दोनों का व्यवहार करता है। (बेशक, पूर्णता के लिए, एक पर्यावरण चर है, DELIMIDENT, जिसे किसी भी मूल्य पर सेट किया जा सकता है, लेकिन Y सबसे सुरक्षित है - यह इंगित करने के लिए कि दोहरे उद्धरण हमेशा सीमांकित पहचानकर्ताओं को घेरते हैं और एकल उद्धरण हमेशा तार को घेरते हैं।)
ध्यान दें कि MS SQL सर्वर वर्ग कोष्ठक में संलग्न [सीमांकित पहचानकर्ताओं] का उपयोग करने का प्रबंधन करता है। यह मेरे लिए अजीब लगता है, और निश्चित रूप से SQL मानक का हिस्सा नहीं है।