কম্পিউটার টিউটোরিয়াল

MySQL-এ সাবকোয়েরি ব্যবহার করে একটি টেবিল থেকে অন্য টেবিলে ডেটা কপি করা

দুটি আলাদা SELECT সাবকোয়েরি ব্যবহার করে এক টেবিল থেকে নির্দিষ্ট ডেটা অন্য টেবিলে ইনসার্ট করা যায়। এটি একক কোয়েরিতে সম্ভব।

প্রথম টেবিল তৈরি ও ডেটা

mysql> CREATE TABLE DemoTable1 (Name VARCHAR(100), Score INT);
Query OK, 0 rows affected (1.30 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Chris', 45);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Bob', 78);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1 VALUES ('David', 98);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Carol', 89);
Query OK, 1 row affected (0.15 sec)

দ্বিতীয় টেবিল তৈরি

mysql> CREATE TABLE DemoTable2 (StudentName VARCHAR(100), StudentScore INT);
Query OK, 0 rows affected (0.58 sec)

সাবকোয়েরি দিয়ে ইনসার্ট (দুটি SELECT)

mysql> INSERT INTO DemoTable2(StudentName, StudentScore) 
VALUES (
    (SELECT Name FROM DemoTable1 WHERE Score = 98),
    (SELECT Score FROM DemoTable1 WHERE Name = 'David')
);

Query OK, 1 row affected (0.30 sec)

ফলাফল

mysql> SELECT * FROM DemoTable2;

আউটপুট:

+-------------+--------------+
| StudentName | StudentScore |
+-------------+--------------+
| David       | 98           |
+-------------+--------------+
1 row in set (0.00 sec)

ব্যাখ্যা

  • প্রথম সাবকোয়েরি: Score=98 হলে 'David' রিটার্ন করে।
  • দ্বিতীয় সাবকোয়েরি: Name='David' হলে 98 রিটার্ন করে।
  • প্রতিটি সাবকোয়েরি একক মান (স্ক্যালার) রিটার্ন করতে হবে।

সতর্কতা

  • সাবকোয়েরি একাধিক রো রিটার্ন করলে এরর হবে (Subquery returns more than 1 row)।
  • কোনো রো না পেলে NULL ইনসার্ট হবে (কলাম NOT NULL না হলে)।
  • বेहতর: INSERT INTO DemoTable2 SELECT Name, Score FROM DemoTable1 WHERE Score=98; (সিংগেল SELECT, একাধিক রো হ্যান্ডেল করে)।
  1. MySQL-এ একক SELECT কোয়েরিতে দুটি টেবিল থেকে ডেটা ফেচ করা

  2. MySQL-এ UNION ALL এবং INSERT INTO SELECT ব্যবহার করে একক কোয়েরিতে দুটি টেবিলে ডেটা ইনসার্ট করুন

  3. MySQL-এ টেবিলে নেই এমন মানগুলো কোয়েরি করে বের করা (UNION ALL + NOT EXISTS)

  4. MySQL-এ INSERT INTO SELECT ব্যবহার করে অন্য টেবিল থেকে ডেটা কপি করা