Hifadhidata ya ndani ya MySQL jiunge na utumiaji wa jedwali nyingi? kushoto kushoto jiunge na ufanisi wa matumizi

Hifadhidata ya MySQLutumiaji wa jedwali nyingi za ndani? kushoto kushoto jiunge na ufanisi wa matumizi

Mysql matumizi ya uhusiano

Katika sura zilizopita, tumejifunza jinsi ya kusoma data kutoka kwa meza moja, ambayo ni rahisi, lakini katika maombi halisi mara nyingi ni muhimu kusoma data kutoka kwa meza nyingi za data.

Katika sura hii tutakuonyesha jinsi ya kutumia JOIN ya MySQL kuuliza data katika jedwali mbili au zaidi.

Unaweza kutumia JIUNGE na Mysql katika SELECT, UPDATE na FUTA taarifa ili kujiunga na hoja za jedwali nyingi.

JIUNGE imegawanywa katika kategoria tatu zifuatazo kulingana na kazi yake:

  • INNER JOIN (jiunge la ndani, au unganisha): Pata rekodi zilizo na sehemu zinazolingana katika jedwali mbili.
  • LEFT JIUNGE (kushoto jiunge):Pata rekodi zote kwenye jedwali la kushoto, hata kama hakuna rekodi zinazolingana kwenye jedwali la kulia.
  • KULIA JIUNGE (kulia jiunge): Kinyume na LEFT JOIN, inatumika kupata rekodi zote katika jedwali la kulia, hata kama hakuna rekodi zinazolingana katika jedwali la kushoto.

Kwa kutumia INNER JOIN katika Amri Prompt

Tuna majedwali mawili tcount_tbl na chenweiliang_tbl katika hifadhidata ya chenweiliang.Data ya meza mbili za data ni kama ifuatavyo:

Mfano

Jaribu mifano ifuatayo:

data ya mfano wa mtihani

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)

Ifuatayo tutatumia MySQLINNER JOIN (unaweza pia kuacha INNER na kutumia JOIN, athari ni sawa)Ili kuunganisha majedwali mawili yaliyo hapo juu ili kusoma thamani ya sehemu ya chenweiliang_count inayolingana na sehemu zote za chenweiliang_author katika jedwali la chenweiliang_tbl katika jedwali la tcount_tbl:

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)

Taarifa ya SQL hapo juu ni sawa na:

WAPI kifungu

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 LEFT JIUNGE

MySQL left join ni tofauti na join. MySQL LEFT JOIN itasoma data yote kwenye jedwali la kushoto la data, hata kama jedwali la kulia halina data inayolingana.

Mfano

Jaribu mifano ifuatayo chenweiliang_tbl kwa meza ya kushoto,tcount_tbl Kwa jedwali la kulia, elewa utumizi wa MySQL LEFT JOIN:

KUSHOTO JIUNGE

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)

Katika mfano ulio hapo juu, LEFT JOIN inatumika, na taarifa hii itasoma data yote ya sehemu iliyochaguliwa ya jedwali la data chenweiliang_tbl upande wa kushoto, hata kama hakuna thamani ya sehemu inayolingana ya chenweiliang_author kwenye jedwali tcount_tbl upande wa kulia.


MySQL HAKI JIUNGE

MySQL RIGHT JOIN itasoma data zote kwenye jedwali la data upande wa kulia, hata kama hakuna data inayolingana kwenye jedwali lililo upande wa kushoto.

Mfano

Jaribu mifano ifuatayo chenweiliang_tbl kwa meza ya kushoto,tcount_tbl Kwa jedwali linalofaa, elewa utumizi wa MySQL RIGHT JOIN:

HAKI JIUNGE

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 inatumika katika mfano ulio hapo juu, taarifa hii itasoma data yote ya sehemu iliyochaguliwa ya jedwali la data tcount_tbl upande wa kulia, hata kama hakuna thamani ya sehemu inayolingana ya chenweiliang_author katika jedwali chenweiliang_tbl upande wa kushoto.


Kutumia JOIN katika hati ya PHP

Kitendaji cha mysqli_query() kinatumika katika PHP kutekeleza taarifa za SQL, unaweza kutumia taarifa ya SQL sawa na hapo juu kama kigezo cha kitendakazi cha mysqli_query().

Jaribu mfano ufuatao:

MySQL ORDER BY mtihani:

<?
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);
?>

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) ilishiriki "Matumizi ya jedwali nyingi za uunganisho wa ndani wa hifadhidata ya MySQL? kushoto Kushoto Jiunge na Ufanisi wa Matumizi", itakusaidia.

Karibu kushiriki kiungo cha makala hii:https://www.chenweiliang.com/cwl-488.html

Karibu kwenye chaneli ya Telegramu ya blogu ya Chen Weiliang ili kupata masasisho mapya zaidi!

🔔 Kuwa wa kwanza kupata "Mwongozo wa Matumizi ya Zana ya AI ya Uuzaji wa Maudhui ya ChatGPT" katika saraka ya juu ya kituo! 🌟
📚 Mwongozo huu una thamani kubwa, 🌟Hii ni fursa adimu, usiikose! ⏰⌛💨
Share na like ukipenda!
Kushiriki kwako na kupenda kwako ndio motisha yetu inayoendelea!

 

发表 评论

Anwani yako ya barua pepe haitachapishwa. 必填 项 已 用 * 标注

tembeza juu