INSERT INTO ... SELECT সিনট্যাক্স ব্যবহার করে এক টেবিলের কলামের মান অন্য টেবিলে একক কোয়েরিতে কপি করা যায়। এটি ডেটা মাইগ্রেশন বা রিপোর্টিং টেবিল পূরণের জন্য দরকারী।
প্রথম টেবিল (ENUM জেন্ডার সহ)
mysql> CREATE TABLE DemoTable1 (
Name VARCHAR(100),
Gender ENUM('MALE','FEMALE')
);
Query OK, 0 rows affected (0.50 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Chris', 'Male');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Emma', 'Female');
Query OK, 1 row affected (0.19 sec)
mysql> SELECT * FROM DemoTable1;
আউটপুট (ENUM বড় হাতের অক্ষরে স্টোর হয়েছে):
+-------+--------+ | Name | Gender | +-------+--------+ | Chris | MALE | | Emma | FEMALE | +-------+--------+ 2 rows in set (0.00 sec)
দ্বিতীয় টেবিল তৈরি
mysql> CREATE TABLE DemoTable2 (EmployeeGender VARCHAR(100)); Query OK, 0 rows affected (0.47 sec)
Gender কলাম কপি করা
mysql> INSERT INTO DemoTable2(EmployeeGender) SELECT Gender FROM DemoTable1; Query OK, 2 rows affected (0.15 sec) Records: 2 Duplicates: 0 Warnings: 0
ফলাফল
mysql> SELECT * FROM DemoTable2;
আউটপুট:
+----------------+ | EmployeeGender | +----------------+ | MALE | | FEMALE | +----------------+ 2 rows in set (0.00 sec)
গুরুত্বপূর্ণ পয়েন্ট
INSERT INTO target(col) SELECT col FROM source- কলাম সংখ্যা ও টাইপ মিলতে হবে।SELECT *বাদ দিয়ে স্পষ্ট কলাম লিখুন (রক্ষণাবেক্ষণযোগ্য)।WHEREক্লজ যোগ করে ফিল্টার করা যায়।- বড় ডেটাসেটের জন্য
INSERT ... SELECTব্যাচে করুন (LIMIT/অফসেট দিয়ে) লক এড়াতে।
বিকল্প: CREATE TABLE ... AS SELECT
CREATE TABLE DemoTable3 AS SELECT Gender FROM DemoTable1;
এটি নতুন টেবিল তৈরি করে এবং ডেটা কপি করে (ইনডেক্স/কনস্ট্রেইন্ট কপি হয় না)।