آرٽيڪل ڊاريڪٽري
MySQL ڊيٽابيس ۾ گھڻن ٽيبلن سان اندروني جوائن ڪيئن استعمال ڪجي ؟ کاٻي جوائن جي ڪارڪردگي ڇا آهي؟
Mysql ڪنيڪشن جو استعمال
پوئين بابن ۾، اسان سکيو آهي ته هڪ جدول مان ڊيٽا ڪيئن پڙهجي، جيڪا نسبتاً سادو آهي، پر حقيقي ايپليڪيشنن ۾ اهو ضروري هوندو آهي ته ڪيترن ئي ڊيٽا جدولن مان ڊيٽا کي پڙهجي.
هن باب ۾ اسين توهان کي ڏيکارينداسين ته ڪيئن استعمال ڪجي MySQL جي JOIN کي ٻن يا وڌيڪ جدولن ۾ ڊيٽا پڇڻ لاءِ.
توهان استعمال ڪري سگهو ٿا Mysql جي JOIN ۾ SELECT، UPDATE ۽ DELETE بيانن ۾ ملٽي ٽيبل سوالن ۾ شامل ٿيڻ لاءِ.
JOIN ان جي ڪم جي مطابق تقريبن ھيٺين ٽن ڀاڱن ۾ ورهايل آھي:
- اندروني شموليت (اندر شامل ٿيڻ، يا هڪجهڙائي): ٻن جدولن ۾ ملندڙ فيلڊن سان رڪارڊ حاصل ڪريو.
- کاٻي جوائن (کاٻي جوائن):کاٻي جدول ۾ سڀ رڪارڊ حاصل ڪريو، جيتوڻيڪ ساڄي ٽيبل ۾ ڪو به ملندڙ رڪارڊ نه آھي.
- ساڄي شموليت (ساڄي شامل ٿيڻ): LEFT JOIN جي برعڪس، اهو استعمال ڪيو ويندو آهي سڀني رڪارڊس کي ساڄي جدول ۾ حاصل ڪرڻ لاءِ، توڙي جو کاٻي ٽيبل ۾ ڪو به ملندڙ ملندڙ رڪارڊ نه هجي.
ڪمانڊ پرامپٽ ۾ اندروني شموليت استعمال ڪندي
اسان وٽ ٻه ٽيبلون آهن tcount_tbl ۽ chenweiliang_tbl chenweiliang ڊيٽابيس ۾.ٻن ڊيٽا جدولن جي ڊيٽا هن ريت آهن:
مثال
ھيٺ ڏنل مثالن جي ڪوشش ڪريو:
ٽيسٽ مثال ڊيٽا
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 فيلڊ جون قدرون ۽ tcount_tbl جدول ۾ انهن جي لاڳاپيل chenweiliang_count فيلڊ ويليوز پڙهنداسين:
انٽرويو 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 کاٻي ڊيٽا جدول ۾ موجود سموري ڊيٽا کي پڙھندو، جيتوڻيڪ ساڄي جدول ۾ ڪا به لاڳاپيل ڊيٽا نه آھي.
مثال
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 استعمال ڪيو ويو آهي، ۽ هي بيان کاٻي پاسي واري ڊيٽا ٽيبل جي سڀني چونڊيل فيلڊ ڊيٽا کي پڙهي ويندي chenweiliang_tbl، جيتوڻيڪ ساڄي پاسي واري ٽيبل tcount_tbl ۾ chenweiliang_author جو ڪو لاڳاپيل فيلڊ قدر نه آهي.
MySQL رائٽ جوائن
MySQL RIGHT JOIN سڄي ڊيٽا کي پڙھندو ساڄي پاسي واري ڊيٽا ٽيبل ۾، جيتوڻيڪ کاٻي پاسي واري جدول ۾ ڪو به لاڳاپيل ڊيٽا نه آھي.
مثال
MySQL RIGHT JOIN جي ايپليڪيشن کي سمجهڻ لاءِ، هيٺ ڏنل مثال آزمايو، کاٻي ٽيبل طور chenweiliang_tbl ۽ ساڄي ٽيبل طور tcount_tbl استعمال ڪندي:
حق ۾ شامل ٿيو
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 استعمال ڪيو ويو آهي، هي بيان صحيح ڊيٽا ٽيبل tcount_tbl جي سڀني چونڊيل فيلڊ ڊيٽا کي پڙهي سگهندو، جيتوڻيڪ کاٻي ٽيبل ۾ chenweiliang_author فيلڊ جي قيمت سان لاڳاپيل نه آهي chenweiliang_tbl.
PHP اسڪرپٽ ۾ JOIN استعمال ڪندي
mysqli_query() فنڪشن PHP ۾ SQL بيانن تي عمل ڪرڻ لاءِ استعمال ڪيو ويندو آھي، توھان استعمال ڪري سگھوٿا ساڳيو SQL بيان مٿي ڏنل پيراميٽر طور mysqli_query() فنڪشن لاءِ.
ھيٺ ڏنل مثال جي ڪوشش ڪريو:
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);
?>اميد آهي ته، چن ويليانگ جي بلاگ ( https://www.chenweiliang.com/ ) تي شيئر ڪيل مضمون "ڪيترن ئي ٽيبلن تي MySQL ڊيٽابيس اندروني جوڙ استعمال ڪندي؟ کاٻي جوڙ جي ڪارڪردگي" توهان لاءِ مددگار ثابت ٿيندو.
هن مضمون جي لنڪ شيئر ڪرڻ لاءِ آزاد محسوس ڪريو: https://www.chenweiliang.com/cwl-488.html
