የአንቀጽ ማውጫ
MySQL የውሂብ ጎታየውስጥ መቀላቀል ባለብዙ ጠረጴዛ አጠቃቀም? የግራ ግራ የአጠቃቀም ቅልጥፍናን ይቀላቀሉ
ሚሺክል ፡፡ የግንኙነት አጠቃቀም
በቀደሙት ምዕራፎች ውስጥ ከአንድ ጠረጴዛ ላይ መረጃን እንዴት ማንበብ እንዳለብን ተምረናል, ይህም በአንጻራዊነት ቀላል ነው, ነገር ግን በእውነተኛ አፕሊኬሽኖች ውስጥ ከበርካታ የዳታ ሰንጠረዦች መረጃን ማንበብ ብዙ ጊዜ አስፈላጊ ነው.
በዚህ ምእራፍ ውስጥ የ MySQL JOINን በሁለት ወይም ከዚያ በላይ ሰንጠረዦች ለመጠየቅ እንዴት እንደሚጠቀሙ እናሳይዎታለን።
የባለብዙ ሠንጠረዥ መጠይቆችን ለመቀላቀል Mysql's JOINን በ SELECT፣ UPDATE እና ሰርዝ መጠቀም ትችላለህ።
JOIN እንደ ተግባሩ በግምት በሚከተሉት ሶስት ምድቦች የተከፈለ ነው።
- የውስጥ መቀላቀል (የውስጥ መቀላቀል፣ ወይም equijoin)በሁለት ጠረጴዛዎች ውስጥ በተዛማጅ መስኮች መዝገቦችን ያግኙ።
- የግራ መቀላቀል (የግራ መቀላቀል)በቀኝ ሠንጠረዥ ውስጥ ምንም ተዛማጅ መዝገቦች ባይኖሩም ሁሉንም መዝገቦች በግራ ሠንጠረዥ ውስጥ ያግኙ።
- ቀኝ ተቀላቀል (የቀኝ መቀላቀል) ከግራ መቀላቀል በተቃራኒ፣ በግራ ሠንጠረዥ ውስጥ ምንም ተዛማጅ ተዛማጅ መዝገቦች ባይኖሩም ሁሉንም መዝገቦች በትክክለኛው ሠንጠረዥ ውስጥ ለማግኘት ይጠቅማል።
በCommand Prompt ውስጥ የውስጥ JOINን በመጠቀም
በቼንዌሊያንግ ዳታቤዝ ውስጥ ሁለት ጠረጴዛዎች tcount_tbl እና chnweiliang_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ን መጠቀም ይችላሉ፣ ውጤቱ አንድ ነው)ከላይ ያሉትን ሁለት ሰንጠረዦች ለማገናኘት በ tcount_tbl ሠንጠረዥ ውስጥ በቻንዌሊያንግ_ትብል ሠንጠረዥ ውስጥ ከሚገኙት የቼንዌሊያንግ_የደራሲ መስኮች ጋር የሚዛመደውን የchenweiliang_count መስክ ዋጋ ለማንበብ፡-
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 ግራ ይቀላቀሉ
MySQL የግራ መቀላቀል ከመቀላቀል የተለየ ነው። MySQL LEFT JOIN ምንም እንኳን የቀኝ ሠንጠረዥ ምንም ተዛማጅ ውሂብ ባይኖረውም በግራ የውሂብ ሠንጠረዥ ውስጥ ያሉትን ሁሉንም መረጃዎች ያነባል።
ቅደም ተከተል
የሚከተሉትን ምሳሌዎች ይሞክሩ chnweiliang_tbl ለግራ ጠረጴዛ,tcount_tbl ለትክክለኛው ሰንጠረዥ የ MySQL ግራ መቀላቀልን አተገባበር ይረዱ፡
ግራ ይቀላቀሉ
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 ውስጥ ምንም እንኳን ተዛማጅ የ chnweiliang_author የመስክ ዋጋ ባይኖርም ይህ መግለጫ ሁሉንም የተመረጠውን የመረጃ ሠንጠረዥ chenweiliang_tbl በግራ በኩል ያነባል።
MySQL መብት ይቀላቀሉ
MySQL RIGHT JOIN በግራ በኩል ባለው ሠንጠረዥ ውስጥ ምንም ተዛማጅ ውሂብ ባይኖርም በቀኝ በኩል ባለው የውሂብ ሰንጠረዥ ውስጥ ያሉትን ሁሉንም መረጃዎች ያነባል።
ቅደም ተከተል
የሚከተሉትን ምሳሌዎች ይሞክሩ chnweiliang_tbl ለግራ ጠረጴዛ,tcount_tbl ለትክክለኛው ሠንጠረዥ የ MySQL ቀኝ መቀላቀልን አተገባበር ይረዱ፡
ቀኝ ተቀላቀል
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)
የቀኝ መቀላቀል ከላይ ባለው ምሳሌ ላይ ጥቅም ላይ ይውላል፣ ይህ መግለጫ በግራ በኩል ባለው chnweiliang_tbl ሠንጠረዥ ውስጥ ምንም እንኳን የቻንዌሊያንግ_ደራሲ ምንም ተዛማጅ የመስክ እሴት ባይኖርም ይህ መግለጫ ሁሉንም የተመረጠውን የውሂብ ሰንጠረዥ tcount_tbl በቀኝ በኩል ያነባል።
JOINን በPHP ስክሪፕት በመጠቀም
የ mysqli_query() ተግባር በPHP ውስጥ የSQL መግለጫዎችን ለማስፈጸም ጥቅም ላይ ይውላል፣ከላይ ካለው የ mysqli_query() ተግባር መለኪያ ጋር ተመሳሳይ የSQL መግለጫ መጠቀም ይችላሉ።
የሚከተለውን ምሳሌ ይሞክሩ።
MySQL ORDER በሙከራ፡-
<?
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/ ) የተጋራ "የ MySQL ዳታቤዝ ውስጣዊ መቀላቀልን ባለብዙ ጠረጴዛ አጠቃቀም? ግራ ግራ የአጠቃቀም ቅልጥፍናን ይቀላቀሉ" ይረዳሃል።
እንኳን በደህና መጡ የዚህን ጽሁፍ ማገናኛ ለማጋራት፡-https://www.chenweiliang.com/cwl-488.html
