Artikulo Direktoryo
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!
📚 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!