ဆောင်းပါးလမ်းညွှန်
MySQL database မှာ table အများကြီးနဲ့ inner join ကို ဘယ်လိုသုံးမလဲ ။ left join ရဲ့ ထိရောက်မှုက ဘယ်လောက်လဲ။
mysql ချိတ်ဆက်အသုံးပြုမှု
ယခင်အခန်းများတွင် ကျွန်ုပ်တို့သည် ဇယားတစ်ခုမှ ဒေတာကို မည်သို့ဖတ်ရမည်ကို လေ့လာခဲ့ပြီးဖြစ်သည့်အတွက် အတော်လေးရိုးရှင်းသော်လည်း လက်တွေ့အသုံးချမှုများတွင် ဒေတာဇယားများစွာမှ ဒေတာများကို မကြာခဏဖတ်ရှုရန် လိုအပ်ပါသည်။
ဤအခန်းတွင် ဇယားနှစ်ခု သို့မဟုတ် ထို့ထက်ပိုသော အချက်အလက်များကို မေးမြန်းရန် MySQL ၏ JOIN ကို အသုံးပြုနည်းကို သင့်အား ပြသပါမည်။
Multi-table queries တွင်ပါဝင်ရန် သင်သည် SELECT၊ UPDATE နှင့် DELETE ထုတ်ပြန်ချက်များတွင် Mysql ၏ JOIN ကိုသုံးနိုင်သည်။
JOIN ကို ၎င်း၏လုပ်ဆောင်ချက်အရ အောက်ပါ အမျိုးအစားသုံးမျိုးဖြင့် အကြမ်းဖျင်း ခွဲခြားထားသည်။
- INNER JOIN (အတွင်းစိတ်ပါဝင်မှု သို့မဟုတ် equijoin): ဇယားနှစ်ခုရှိ ကိုက်ညီသောအကွက်များဖြင့် မှတ်တမ်းများကို ရယူပါ။
- LEFT JOIN (ဘယ်ဘက် ချိတ်ဆက်ရန်)ညာဘက်ဇယားတွင် ကိုက်ညီသောမှတ်တမ်းများမရှိလျှင်တောင် ဘယ်ဘက်ဇယားရှိ မှတ်တမ်းအားလုံးကို ရယူပါ။
- RIGHT JOIN (ညာဘက် Join): LEFT JOIN နှင့် ဆန့်ကျင်ဘက်၊ ဘယ်ဘက်ဇယားရှိ သက်ဆိုင်ရာ ကိုက်ညီသော မှတ်တမ်းများ မရှိသော်လည်း ညာဘက်ဇယားရှိ မှတ်တမ်းအားလုံးကို ရယူရန် အသုံးပြုသည်။
Command Prompt တွင် INNER JOIN ကို အသုံးပြုခြင်း။
ကျွန်ုပ်တို့တွင် chenweiliang ဒေတာဘေ့စ်တွင် tcount_tbl နှင့် chenweiliang_tbl ဇယားနှစ်ခုရှိသည်။ဒေတာဇယားနှစ်ခု၏ဒေတာများမှာ အောက်ပါအတိုင်းဖြစ်သည်။
ဥပမာ
အောက်ပါ ဥပမာများကို စမ်းကြည့်ပါ။
စမ်းသပ်မှုဒေတာ
mysql> use chenweiliang; Database changed mysql> SELECT * FROM tcount_tbl; +---------------+--------------+ | chenweiliang_author | chenweiliang_count | +---------------+--------------+ | 陈沩亮博客 | 10 | | chenweiliang.com | 20 | | Google | 22 | +---------------+--------------+ 3 rows in set (0.01 sec) mysql> SELECT * from chenweiliang_tbl; +-----------+---------------+---------------+-----------------+ | chenweiliang_id | chenweiliang_title | chenweiliang_author | submission_date | +-----------+---------------+---------------+-----------------+ | 1 | 学习 PHP | 陈沩亮博客 | 2017-04-12 | | 2 | 学习 MySQL | 陈沩亮博客 | 2017-04-12 | | 3 | 学习 Java | chenweiliang.com | 2015-05-01 | | 4 | 学习 Python | chenweiliang.com | 2016-03-06 | | 5 | 学习 C | FK | 2017-04-05 | +-----------+---------------+---------------+-----------------+ 5 rows in set (0.01 sec)
နောက်တစ်ခုအနေနဲ့ MySQL ရဲ့ INNER JOIN (INNER ကို ချန်လှပ်ပြီး JOIN ကိုသုံးနိုင်ပါတယ်၊ အကျိုးသက်ရောက်မှုက အတူတူပါပဲ) ကို အသုံးပြုပြီး အပေါ်က ဇယားနှစ်ခုကို ပေါင်းပြီး chenweiliang_tbl ဇယားမှာရှိတဲ့ chenweiliang_author field ရဲ့ တန်ဖိုးတွေနဲ့ tcount_tbl ဇယားမှာရှိတဲ့ သူတို့ရဲ့ သက်ဆိုင်ရာ chenweiliang_count field တန်ဖိုးတွေကို ဖတ်ပါမယ်။
Inner JOIN
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a INNER JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | +-------------+-----------------+----------------+ 4 rows in set (0.00 sec)
အထက်ပါ SQL ထုတ်ပြန်ချက်သည်-
ဘယ်မှာလဲ။
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a, tcount_tbl b WHERE a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | +-------------+-----------------+----------------+ 4 rows in set (0.01 sec)
MySQL တွင် Join ထားခဲ့သည်။
MySQL left join သည် join နှင့် မတူပါ။ MySQL LEFT JOIN သည် ညာဘက်ဇယားတွင် သက်ဆိုင်သည့်ဒေတာမရှိလျှင်ပင် ဘယ်ဒေတာဇယားရှိ ဒေတာအားလုံးကို ဖတ်ပါမည်။
ဥပမာ
MySQL LEFT JOIN အသုံးချမှုကို နားလည်ရန် chenweiliang_tbl ကို ဘယ်ဘက်ဇယားအဖြစ် နှင့် tcount_tbl ကို ညာဘက်ဇယားအဖြစ် အသုံးပြု၍ အောက်ပါ ဥပမာကို စမ်းကြည့်ပါ ။
ချန်ထားခဲ့ပါ။
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a LEFT JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | | 5 | FK | NULL | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
အထက်ဖော်ပြပါ ဥပမာတွင်၊ LEFT JOIN ကို အသုံးပြုထားသည်။ ညာဘက်ရှိ tcount_tbl ဇယားတွင် chenweiliang_author ၏ သက်ဆိုင်သည့် အကွက်တန်ဖိုးမရှိသော်လည်း၊ ဤထုတ်ပြန်ချက်သည် ဘယ်ဘက်ရှိ ဒေတာဇယား chenweiliang_tbl ၏ ရွေးချယ်ထားသော အကွက်ဒေတာအားလုံးကို ဖတ်ပါမည်။
MySQL တွင် မှန်ကန်စွာ ချိတ်ဆက်ပါ။
MySQL RIGHT JOIN သည် ညာဘက်ရှိ ဒေတာဇယားရှိ ဒေတာအားလုံးကို ဘယ်ဘက်ရှိ ဇယားတွင် သက်ဆိုင်သည့်ဒေတာမရှိလျှင်ပင် ဖတ်ပါမည်။
ဥပမာ
MySQL RIGHT JOIN ရဲ့ အသုံးချမှုကို နားလည်ဖို့အတွက် chenweiliang_tbl ကို ဘယ်ဘက်ဇယားအဖြစ်နဲ့ tcount_tbl ကို ညာဘက်ဇယားအဖြစ် အသုံးပြုပြီး အောက်ပါ ဥပမာကို စမ်းကြည့်ပါ ။
ညာဘက် Join
mysql> SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a RIGHT JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author; +-------------+-----------------+----------------+ | a.chenweiliang_id | a.chenweiliang_author | b.chenweiliang_count | +-------------+-----------------+----------------+ | 1 | 陈沩亮博客 | 10 | | 2 | 陈沩亮博客 | 10 | | 3 | chenweiliang.com | 20 | | 4 | chenweiliang.com | 20 | | NULL | NULL | 22 | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
RIGHT JOIN ကို အထက်ဖော်ပြပါ ဥပမာတွင် အသုံးပြုသည်၊၊ ဘယ်ဘက်ရှိ chenweiliang_tbl ဇယားရှိ chenweiliang_tbl ၏ သက်ဆိုင်ရာ အကွက်တန်ဖိုး မရှိသော်လည်း၊ ဤထုတ်ပြန်ချက်သည် ဒေတာဇယား tcount_tbl ၏ ရွေးချယ်ထားသော အကွက်ဒေတာအားလုံးကို ဖတ်ပါမည်။
PHP script တွင် JOIN ကိုအသုံးပြုခြင်း။
mysqli_query() လုပ်ဆောင်ချက်ကို SQL ထုတ်ပြန်ချက်များအား လုပ်ဆောင်ရန် PHP တွင် အသုံးပြုသည်၊၊ သင်သည် mysqli_query() လုပ်ဆောင်ချက်အတွက် ကန့်သတ်ချက်တစ်ခုအဖြစ် အထက်ဖော်ပြပါကဲ့သို့ တူညီသော SQL ထုတ်ပြန်ချက်ကို သင်အသုံးပြုနိုင်ပါသည်။
အောက်ပါ ဥပမာကို စမ်းကြည့်ပါ။
စမ်းသပ်မှုအားဖြင့် MySQL မှာယူမှု-
<?
php
$dbhost = 'localhost:3306'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
$sql = 'SELECT a.chenweiliang_id, a.chenweiliang_author, b.chenweiliang_count FROM chenweiliang_tbl a INNER JOIN tcount_tbl b ON a.chenweiliang_author = b.chenweiliang_author';
mysqli_select_db( $conn, 'chenweiliang' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('无法读取数据: ' . mysqli_error($conn));
}
echo '<h2>陈沩亮博客 MySQL JOIN 测试<h2>';
echo '<table border="1"><tr><td>教程 ID</td><td>作者</td><td>登陆次数</td></tr>';
while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
echo "<tr><td> {$row['chenweiliang_id']}</td> ".
"<td>{$row['chenweiliang_author']} </td> ".
"<td>{$row['chenweiliang_count']} </td> ".
"</tr>";
}
echo '</table>';
mysqli_close($conn);
?>Chen Weiliang ရဲ့ဘလော့ဂ် ( https://www.chenweiliang.com/ ) မှာ မျှဝေထားတဲ့ "Using MySQL Database inner join across multiple table? Efficiency of left join" ဆောင်းပါးက သင့်အတွက် အထောက်အကူဖြစ်လိမ့်မယ်လို့ မျှော်လင့်ပါတယ်။
ဒီဆောင်းပါးလင့်ခ်ကို မျှဝေပေးဖို့ မတွန့်ဆုတ်ပါနဲ့- https://www.chenweiliang.com/cwl-488.html
