ລາຍການຫົວເລື່ອງ
ຖານຂໍ້ມູນ MySQLinner join ການນໍາໃຊ້ຫຼາຍຕາຕະລາງ? ປະສິດຕິພາບການນໍາໃຊ້ການເຂົ້າຮ່ວມຊ້າຍຊ້າຍ
Mysql ການນໍາໃຊ້ການເຊື່ອມຕໍ່
ໃນບົດທີ່ຜ່ານມາ, ພວກເຮົາໄດ້ຮຽນຮູ້ວິທີການອ່ານຂໍ້ມູນຈາກຕາຕະລາງຫນຶ່ງ, ເຊິ່ງຂ້ອນຂ້າງງ່າຍດາຍ, ແຕ່ໃນການນໍາໃຊ້ຕົວຈິງມັນມັກຈະຈໍາເປັນຕ້ອງອ່ານຂໍ້ມູນຈາກຕາຕະລາງຂໍ້ມູນຫຼາຍ.
ໃນບົດນີ້ພວກເຮົາຈະສະແດງໃຫ້ທ່ານເຫັນວິທີການໃຊ້ MySQL's JOIN ເພື່ອສອບຖາມຂໍ້ມູນໃນສອງຕາຕະລາງຫຼືຫຼາຍກວ່ານັ້ນ.
ທ່ານສາມາດໃຊ້ Mysql's JOIN ໃນ SELECT, UPDATE ແລະ DELETE statements ເພື່ອເຂົ້າຮ່ວມການສອບຖາມຫຼາຍຕາຕະລາງ.
JOIN ແບ່ງອອກເປັນສາມປະເພດຕໍ່ໄປນີ້ຕາມໜ້າທີ່ຂອງມັນ:
- ເຂົ້າຮ່ວມພາຍໃນ (ເຂົ້າຮ່ວມພາຍໃນ, ຫຼື equijoin): ເອົາບັນທຶກທີ່ມີຊ່ອງຂໍ້ມູນທີ່ກົງກັນໃນສອງຕາຕະລາງ.
- LEFT JOIN (ເຂົ້າຮ່ວມຊ້າຍ):ເອົາບັນທຶກທັງຫມົດໃນຕາຕະລາງຊ້າຍ, ເຖິງແມ່ນວ່າບໍ່ມີບັນທຶກທີ່ກົງກັນຢູ່ໃນຕາຕະລາງຂວາ.
- RIGHT JOIN (ເຂົ້າຮ່ວມຂວາ): ກົງກັນຂ້າມກັບ LEFT JOIN, ມັນຖືກນໍາໃຊ້ເພື່ອເອົາບັນທຶກທັງຫມົດໃນຕາຕະລາງທີ່ຖືກຕ້ອງ, ເຖິງແມ່ນວ່າບໍ່ມີບັນທຶກການຈັບຄູ່ທີ່ກົງກັນຢູ່ໃນຕາຕະລາງຊ້າຍ.
ໃຊ້ INNER JOIN ໃນ Command Prompt
ພວກເຮົາມີສອງຕາຕະລາງ 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ການເຂົ້າຮ່ວມພາຍໃນ (ທ່ານຍັງສາມາດຍົກເວັ້ນການເຂົ້າຮ່ວມພາຍໃນແລະການນໍາໃຊ້ JOIN ໄດ້, ຜົນກະທົບແມ່ນຄືກັນ)ເພື່ອເຊື່ອມຕໍ່ສອງຕາຕະລາງຂ້າງເທິງເພື່ອອ່ານຄ່າຂອງຊ່ອງຂໍ້ມູນ chenweiliang_count ທີ່ສອດຄ້ອງກັບຊ່ອງຂໍ້ມູນ chenweiliang_author ທັງໝົດໃນຕາຕະລາງ chenweiliang_tbl ໃນຕາຕະລາງ 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)
ຄໍາຖະແຫຼງທີ່ SQL ຂ້າງເທິງແມ່ນທຽບເທົ່າກັບ:
WHERE ຂໍ້
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 ຈະອ່ານຂໍ້ມູນທັງຫມົດໃນຕາຕະລາງຂໍ້ມູນຊ້າຍ, ເຖິງແມ່ນວ່າຕາຕະລາງຂວາບໍ່ມີຂໍ້ມູນທີ່ສອດຄ້ອງກັນ.
ຕົວຢ່າງ
ລອງໃຊ້ຕົວຢ່າງຕໍ່ໄປນີ້ເພື່ອ chenweiliang_tbl ສໍາລັບຕາຕະລາງຊ້າຍ,tcount_tbl ສໍາລັບຕາຕະລາງທີ່ຖືກຕ້ອງ, ເຂົ້າໃຈຄໍາຮ້ອງສະຫມັກຂອງ MySQL LEFT JOIN:
ເຂົ້າຮ່ວມຊ້າຍ
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 ຢູ່ເບື້ອງຊ້າຍ, ເຖິງແມ່ນວ່າບໍ່ມີຄ່າພາກສະຫນາມທີ່ສອດຄ້ອງກັນຂອງ chenweiliang_author ໃນຕາຕະລາງ tcount_tbl ທາງດ້ານຂວາ.
ເຂົ້າຮ່ວມ MySQL
MySQL RIGHT JOIN ຈະອ່ານຂໍ້ມູນທັງໝົດໃນຕາຕະລາງຂໍ້ມູນຢູ່ເບື້ອງຂວາ, ເຖິງແມ່ນວ່າບໍ່ມີຂໍ້ມູນກົງກັນໃນຕາຕະລາງຢູ່ເບື້ອງຊ້າຍ.
ຕົວຢ່າງ
ລອງໃຊ້ຕົວຢ່າງຕໍ່ໄປນີ້ເພື່ອ chenweiliang_tbl ສໍາລັບຕາຕະລາງຊ້າຍ,tcount_tbl ສໍາລັບຕາຕະລາງທີ່ຖືກຕ້ອງ, ເຂົ້າໃຈຄໍາຮ້ອງສະຫມັກຂອງ MySQL 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)
RIGHT JOIN ຖືກນໍາໃຊ້ໃນຕົວຢ່າງຂ້າງເທິງ, ຄໍາຖະແຫຼງນີ້ຈະອ່ານຂໍ້ມູນພາກສະຫນາມທີ່ເລືອກທັງຫມົດຂອງຕາຕະລາງຂໍ້ມູນທີ່ຖືກຕ້ອງ tcount_tbl, ເຖິງແມ່ນວ່າບໍ່ມີຄ່າພາກສະຫນາມ chenweiliang_author ທີ່ສອດຄ້ອງກັນໃນຕາຕະລາງຊ້າຍ chenweiliang_tbl.
ການນໍາໃຊ້ JOIN ໃນ PHP script
ຟັງຊັນ mysqli_query() ຖືກນໍາໃຊ້ໃນ PHP ເພື່ອປະຕິບັດຄໍາສັ່ງ SQL, ທ່ານສາມາດນໍາໃຊ້ຄໍາສັ່ງ SQL ດຽວກັນກັບຂ້າງເທິງເປັນພາລາມິເຕີຂອງຟັງຊັນ mysqli_query().
ລອງໃຊ້ຕົວຢ່າງຕໍ່ໄປນີ້:
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 Blog ( https://www.chenweiliang.com/ ) shared "ການນໍາໃຊ້ຫຼາຍຕາຕະລາງຂອງຖານຂໍ້ມູນ MySQL ພາຍໃນເຂົ້າຮ່ວມ? ຊ້າຍຊ້າຍເຂົ້າຮ່ວມປະສິດທິພາບການນໍາໃຊ້,, ມັນຈະຊ່ວຍໃຫ້ທ່ານ.
ຍິນດີຕ້ອນຮັບແບ່ງປັນການເຊື່ອມຕໍ່ຂອງບົດຄວາມນີ້:https://www.chenweiliang.com/cwl-488.html
