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

MySQL-এ SELF JOIN ব্যবহার করা

SELF JOIN হলো একই টেবিলকে দুবার আলিয়াস (alias) দিয়ে নিজের সাথে জয়ন করা।

উদাহরণ দিয়ে বুঝি

টেবিল তৈরি করুন:

mysql> CREATE TABLE SelfJoinDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> CountryName VARCHAR(20),
    -> CountryRank INT,
    -> `Year` VARCHAR(10)
    -> );
Query OK, 0 rows affected (1.02 sec)

রেকর্ড ইনসার্ট করুন:

mysql> INSERT INTO SelfJoinDemo(CountryName, CountryRank, `Year`) VALUES('US', 1, '2016');
mysql> INSERT INTO SelfJoinDemo(CountryName, CountryRank, `Year`) VALUES('UK', 5, '2013');
mysql> INSERT INTO SelfJoinDemo(CountryName, CountryRank, `Year`) VALUES('France', 45, '2010');
mysql> INSERT INTO SelfJoinDemo(CountryName, CountryRank, `Year`) VALUES('Turkey', 3, '2000');
mysql> INSERT INTO SelfJoinDemo(CountryName, CountryRank, `Year`) VALUES('Japan', 78, '1995');
mysql> INSERT INTO SelfJoinDemo(CountryName, CountryRank, `Year`) VALUES('Romania', 110, '2007');
mysql> INSERT INTO SelfJoinDemo(CountryName, CountryRank, `Year`) VALUES('UK', 3, '2000');

সকল রেকর্ড:

mysql> SELECT * FROM SelfJoinDemo;
+----+-------------+-------------+------+
| Id | CountryName | CountryRank | Year |
+----+-------------+-------------+------+
|  1 | US          |           1 | 2016 |
|  2 | UK          |           5 | 2013 |
|  3 | France      |          45 | 2010 |
|  4 | Turkey      |           3 | 2000 |
|  5 | Japan       |          78 | 1995 |
|  6 | Romania     |         110 | 2007 |
|  7 | UK          |           3 | 2000 |
+----+-------------+-------------+------+
7 rows in set (0.00 sec)

SELF JOIN কোয়েরি

mysql> SELECT DISTINCT t1.CountryName, t2.Year
    -> FROM SelfJoinDemo AS t1,
    -> SelfJoinDemo AS t2
    -> WHERE t1.Year = t2.Year
    -> AND t1.CountryName = 'US';
+-------------+------+
| CountryName | Year |
+-------------+------+
| US          | 2016 |
+-------------+------+
1 row in set (0.00 sec)

ব্যাখ্যা: টেবিলকে t1 এবং t2 алиয়াস দিয়ে দুবার রেফারেন্স করা হয়েছে। WHERE t1.Year = t2.Year দিয়ে একই বছরের রোগুলো ম্যাচ করা হয়েছে। DISTINCT ডুপ্লিকেট রো বাদ দিয়েছে।

SELF JOIN-এর সাধারণ ব্যবহার

  • হায়ারার্কিক্যাল ডেটা (Employee-Manager)
  • একই টেবিলের রো তুলনা (যেমন: একই বছরে ভিন্ন দেশ)
  • প্যারেন্ট-চাইল্ড রিলেশনশিপ (Category-Subcategory)

আধুনিক সিনট্যাক্স (JOIN কীওয়ার্ড)

SELECT DISTINCT t1.CountryName, t2.Year
FROM SelfJoinDemo t1
JOIN SelfJoinDemo t2 ON t1.Year = t2.Year
WHERE t1.CountryName = 'US';
  1. MySQL-এ COUNT() এবং IF() একসাথে ব্যবহার করে শর্তসাপেক্ষ গুননা

  2. MySQL SELECT কোয়ারিতে এলিয়াস (alias) ব্যবহার করার পদ্ধতি

  3. MySQL-এ @ চিহ্ন ব্যবহার করে ইউজার-ডিফাইনড ভেরিয়েবল ডিক্লেয়ার ও ব্যবহার

  4. MySQL-এ COUNT() এর ভিতরে CASE শর্ত ব্যবহার করে গণনা করা