MySQL में SELF JOIN का उपयोग करना
SELF JOIN में एक टेबल को स्वयं से जोड़ा जाता है, आमतौर पर पदानुक्रमित डेटा या तुलना के लिए।
उदाहरण
टेबल बनाएं:
mysql> create table SelfJoinDemo (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CountryName varchar(20),
-> CountryRank int,
-> `Year` varchar(10)
-> );
डेटा डालें:
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');
SELF JOIN क्वेरी: US के समान वर्ष वाले देश ढूंढें:
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 | +-------------+------+
आधुनिक JOIN सिंटैक्स (अनुशंसित)
SELECT DISTINCT t1.CountryName, t2.Year FROM SelfJoinDemo t1 INNER JOIN SelfJoinDemo t2 ON t1.Year = t2.Year WHERE t1.CountryName = 'US';
SELF JOIN के सामान्य उपयोग
- कर्मचारी-प्रबंधक पदानुक्रम: कर्मचारी टेबल को स्वयं से जोड़कर प्रबंधक ढूंढना
- तुलना: समान टेबल में पंक्तियों की तुलना (जैसे समान वर्ष, समान श्रेणी)
- पदानुक्रमित डेटा: श्रेणी/उपश्रेणी, संगठन चार्ट
कर्मचारी-प्रबंधक उदाहरण
SELECT e.Name AS Employee, m.Name AS Manager FROM Employees e LEFT JOIN Employees m ON e.ManagerId = m.Id;