Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จะใช้ SELF JOIN ใน MySQL ได้อย่างไร?


ในการใช้ SELF JOIN ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้ −

mysql> สร้างตาราง SelfJoinDemo -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT PRIMARY KEY, -> CountryName varchar(20), -> CountryRank int, -> `Year` varchar(10) -> );Query OK, ได้รับผลกระทบ 0 แถว (1.02 วินาที)

ตอนนี้คุณสามารถแทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้ −

mysql> แทรกลงใน SelfJoinDemo(CountryName,CountryRank,`Year`) values('US',1,'2016');ตกลง, 1 แถวได้รับผลกระทบ (0.12 วินาที)mysql> แทรกลงใน SelfJoinDemo(CountryName,CountryRank, ค่า `Year`) ('UK',5,'2013');Query OK, 1 แถวได้รับผลกระทบ (0.16 วินาที)mysql> แทรกลงในค่า SelfJoinDemo (CountryName,CountryRank,`Year`) ('France',45,' 2010'); ตกลงแบบสอบถาม 1 แถวได้รับผลกระทบ (0.21 วินาที) mysql> แทรกลงในค่า SelfJoinDemo (CountryName, CountryRank, 'Year') ('Turkey',3,'2000'); Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที )mysql> แทรกลงใน SelfJoinDemo(CountryName,CountryRank,`Year`) values('Japan',78,'1995');ตกลง, 1 แถวได้รับผลกระทบ (0.21 วินาที)mysql> แทรกลงใน SelfJoinDemo(CountryName,CountryRank,`Year `) ค่า ('โรมาเนีย', 110, '2007'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.22 วินาที) mysql> แทรกลงใน SelfJoinDemo (ชื่อประเทศอันดับประเทศ 'ปี') ('สหราชอาณาจักร', 3, '2000' );แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.16 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้ −

mysql> เลือก *จาก SelfJoinDemo;

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+----+-------------+-------------+------+| รหัส | ชื่อประเทศ | ประเทศอันดับ | ปี |+----+-------------+-------------+------+| 1 | สหรัฐอเมริกา | 1 | 2016 || 2 | สหราชอาณาจักร | 5 | 2013 || 3 | ฝรั่งเศส | 45 | 2010 || 4 | ตุรกี | 3 | 2000 || 5 | ญี่ปุ่น | 78 | 1995 || 6 | โรมาเนีย | 110 | 2007 || 7 | สหราชอาณาจักร | 3 | 2000 |+----+--------------------+-------------+------+7 แถวในชุด (0.00 วินาที )

นี่คือคำถามของ SELF JOIN -

mysql> เลือก DISTINCT t1.CountryName, t2.Year -> FROM SelfJoinDemo AS t1, -> SelfJoinDemo AS t2 -> WHERE t1.Year=t2.Year -> and t1.CountryName='US';

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+-------------+------+| ชื่อประเทศ | ปี |+-------------+------+| สหรัฐอเมริกา | 2016 |+-------------+------+1 แถวในชุด (0.00 วินาที