MySQL में INSERT INTO ... SELECT: एक टेबल से दूसरी टेबल में डेटा कॉपी करना
एक टेबल से डेटा चुनकर सीधे दूसरी टेबल में डालने के लिए INSERT INTO ... SELECT स्टेटमेंट का उपयोग करें। यह डेटा माइग्रेशन, बैकअप, और ETL कार्यों के लिए कुशल है।
वाक्यविन्यास
INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition;
उदाहरण के साथ पूर्ण कार्यान्वयन
स्रोत टेबल बनाना
mysql> CREATE TABLE DemoTable1 (Marks INT);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable1 VALUES(68), (89), (99), (39), (49);
स्रोत टेबल देखना
mysql> SELECT * FROM DemoTable1;
आउटपुट:
+-------+
| Marks |
+-------+
| 68 |
| 89 |
| 99 |
| 39 |
| 49 |
+-------+
5 rows in set (0.00 sec)
लक्ष्य टेबल बनाना
mysql> CREATE TABLE DemoTable2 (Score INT);
डेटा कॉपी करना
mysql> INSERT INTO DemoTable2(Score) SELECT Marks FROM DemoTable1;
परिणाम: Query OK, 5 rows affected (0.16 sec) Records: 5 Duplicates: 0 Warnings: 0
लक्ष्य टेबल देखना
mysql> SELECT * FROM DemoTable2;
आउटपुट:
+-------+
| Score |
+-------+
| 68 |
| 89 |
| 99 |
| 39 |
| 49 +
+-------+
5 rows in set (0.00 sec)
महत्वपूर्ण बिंदु
- कॉलम संख्या और क्रम मेल खाना चाहिए (या स्पष्ट रूप से सूचीबद्ध करें)
- डेटा टाइप संगत होने चाहिए
WHEREक्लॉज से फ़िल्टर कर सकते हैंAUTO_INCREMENTकॉलम लक्ष्य में होने पर मान निर्दिष्ट न करें
उन्नत उदाहरण
कॉलम मैपिंग के साथ
INSERT INTO employees_archive (emp_id, full_name, hire_date, dept)
SELECT id, CONCAT(first_name, ' ', last_name), hire_date, department_name
FROM employees
WHERE hire_date < '2020-01-01';
एकाधिक टेबल से (जॉइन के साथ)
INSERT INTO order_summary (order_id, customer_name, total)
SELECT o.id, c.name, SUM(oi.price * oi.quantity)
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN order_items oi ON o.id = oi.order_id
GROUP BY o.id, c.name;
डुप्लिकेट संभालना
-- IGNORE: डुप्लिकेट छोड़ें
INSERT IGNORE INTO target SELECT * FROM source;
-- ON DUPLICATE KEY UPDATE: अपडेट करें
INSERT INTO target SELECT * FROM source
ON DUPLICATE KEY UPDATE col1 = VALUES(col1);
प्रदर्शन लाभ
- एप्लिकेशन लेयर में डेटा लाने की आवश्यकता नहीं
- सिंगल SQL स्टेटमेंट, ट्रांजैक्शनल
- बल्क ऑपरेशन के लिए अनुकूलित