Ang panloob na database ng MySQL ay sumali sa paggamit ng multi-table? kaliwa kaliwa sumali sa kahusayan sa paggamit

MySQL databaseinner join multi-table na paggamit? kaliwa kaliwa sumali sa kahusayan sa paggamit

MySQL paggamit ng koneksyon

Sa mga nakaraang kabanata, natutunan namin kung paano magbasa ng data mula sa isang talahanayan, na medyo simple, ngunit sa mga totoong aplikasyon ay madalas na kinakailangan na basahin ang data mula sa maraming mga talahanayan ng data.

Sa kabanatang ito ipapakita namin sa iyo kung paano gamitin ang JOIN ng MySQL upang mag-query ng data sa dalawa o higit pang mga talahanayan.

Maaari mong gamitin ang JOIN ng Mysql sa SELECT, UPDATE at DELETE na mga pahayag upang sumali sa mga query sa multi-table.

Ang JOIN ay halos nahahati sa sumusunod na tatlong kategorya ayon sa paggana nito:

  • INNER JOIN (inner join, o equijoin): Kumuha ng mga tala na may magkatugmang mga patlang sa dalawang talahanayan.
  • LEFT JOIN (left join):Kunin ang lahat ng mga tala sa kaliwang talahanayan, kahit na walang katugmang mga tala sa kanang talahanayan.
  • RIGHT JOIN (right join): Taliwas sa LEFT JOIN, ito ay ginagamit upang makuha ang lahat ng mga tala sa tamang talahanayan, kahit na walang katumbas na mga tugmang tala sa kaliwang talahanayan.

Gamit ang INNER JOIN sa Command Prompt

Mayroon kaming dalawang talahanayan na tcount_tbl at chenweiliang_tbl sa database ng chenweiliang.Ang data ng dalawang talahanayan ng data ay ang mga sumusunod:

Pangyayari

Subukan ang mga sumusunod na halimbawa:

data ng halimbawa ng pagsubok

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)

Susunod na gagamitin namin ang MySQLINNER JOIN (maaari mo ring alisin ang INNER at gamitin ang JOIN, ang epekto ay pareho)Upang ikonekta ang dalawang talahanayan sa itaas upang basahin ang halaga ng field ng chenweiliang_count na tumutugma sa lahat ng mga field ng chenweiliang_author sa talahanayan ng chenweiliang_tbl sa talahanayan ng tcount_tbl:

Inner SUMALI

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)

Ang pahayag sa itaas ng SQL ay katumbas ng:

SAAN sugnay

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)

Umalis ang MySQL SUMALI

Ang MySQL left join ay iba sa join. Babasahin ng MySQL LEFT JOIN ang lahat ng data sa kaliwang talahanayan ng data, kahit na ang kanang talahanayan ay walang katumbas na data.

Pangyayari

Subukan ang mga sumusunod na halimbawa upang chenweiliang_tbl para sa kaliwang mesa,tcount_tbl Para sa tamang talahanayan, unawain ang aplikasyon ng MySQL LEFT JOIN:

Kaliwa SUMALI

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)

Sa halimbawa sa itaas, LEFT JOIN ang ginagamit, at babasahin ng statement na ito ang lahat ng napiling field data ng data table na chenweiliang_tbl sa kaliwa, kahit na walang katumbas na field value ng chenweiliang_author sa table tcount_tbl sa kanan.


MySQL RIGHT JOIN

Babasahin ng MySQL RIGHT JOIN ang lahat ng data sa talahanayan ng data sa kanan, kahit na walang katumbas na data sa talahanayan sa kaliwa.

Pangyayari

Subukan ang mga sumusunod na halimbawa upang chenweiliang_tbl para sa kaliwang mesa,tcount_tbl Para sa tamang talahanayan, unawain ang aplikasyon ng MySQL RIGHT JOIN:

RIGHT 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)

Ang RIGHT JOIN ay ginagamit sa halimbawa sa itaas, babasahin ng statement na ito ang lahat ng napiling field data ng tamang data table tcount_tbl, kahit na walang katumbas na chenweiliang_author field value sa kaliwang table na chenweiliang_tbl.


Gamit ang JOIN sa PHP script

Ang mysqli_query() function ay ginagamit sa PHP upang magsagawa ng mga SQL statement, maaari mong gamitin ang parehong SQL statement tulad ng nasa itaas bilang isang parameter sa mysqli_query() function.

Subukan ang sumusunod na halimbawa:

MySQL ORDER NG pagsubok:

<?
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/ ) ibinahagi ang "Multi-table na paggamit ng MySQL database inner join? left Left Join Usage Efficiency", makakatulong ito sa iyo.

Maligayang pagdating upang ibahagi ang link ng artikulong ito:https://www.chenweiliang.com/cwl-488.html

Maligayang pagdating sa Telegram channel ng blog ni Chen Weiliang para makuha ang pinakabagong mga update!

🔔 Maging una upang makuha ang mahalagang "ChatGPT Content Marketing AI Tool Usage Guide" sa direktoryo ng nangungunang channel! 🌟
📚 Ang gabay na ito ay naglalaman ng malaking halaga, 🌟Ito ay isang bihirang pagkakataon, huwag palampasin ito! ⏰⌛💨
Share and like kung gusto mo!
Ang iyong pagbabahagi at pag-like ay ang aming patuloy na pagganyak!

 

发表 评论

Ang iyong email address ay hindi mai-publish. 必填 项 已 用 * Tatak

mag-scroll sa itaas