ຖານຂໍ້ມູນ MySQL ພາຍໃນເຂົ້າຮ່ວມການນໍາໃຊ້ຫຼາຍຕາຕະລາງ? ປະສິດຕິພາບການນໍາໃຊ້ການເຂົ້າຮ່ວມຊ້າຍ

ວິທີການໃຊ້ inner join ກັບຫຼາຍຕາຕະລາງ ໃນຖານຂໍ້ມູນ MySQL ? ປະສິດທິພາບຂອງ left 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)

ຕໍ່ໄປ, ພວກເຮົາຈະໃຊ້ INNER JOIN ຂອງ MySQL (ທ່ານສາມາດຕັດ INNER ແລະໃຊ້ JOIN, ຜົນກະທົບແມ່ນຄືກັນ) ເພື່ອເຊື່ອມຕໍ່ສອງຕາຕະລາງຂ້າງເທິງ ແລະອ່ານຄ່າຂອງພາກສະໜາມ chenweiliang_author ໃນຕາຕະລາງ chenweiliang_tbl ແລະຄ່າພາກສະໜາມ chenweiliang_count ທີ່ສອດຄ້ອງກັນໃນຕາຕະລາງ 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);
?>

ຫວັງວ່າ ບົດຄວາມ "ການໃຊ້ຖານຂໍ້ມູນ MySQL ການເຊື່ອມຕໍ່ພາຍໃນໃນຫຼາຍຕາຕະລາງ? ປະສິດທິພາບຂອງການເຊື່ອມຕໍ່ຊ້າຍ" ທີ່ແບ່ງປັນໃນ ບລັອກຂອງ Chen Weiliang ( https://www.chenweiliang.com/ ) ຈະເປັນປະໂຫຍດຕໍ່ທ່ານ.

ຮູ້ສຶກວ່າບໍ່ເສຍຄ່າທີ່ຈະແບ່ງປັນລິ້ງຂອງບົດຄວາມນີ້: https://www.chenweiliang.com/cwl-488.html

ເພື່ອປົດລັອກເຄັດລັບທີ່ເຊື່ອງໄວ້ເພີ່ມເຕີມ🔑, ຍິນດີຕ້ອນຮັບເຂົ້າສູ່ຊ່ອງ Telegram ຂອງພວກເຮົາ!

Share and like ຖ້າທ່ານມັກມັນ! ການແບ່ງປັນ ແລະຖືກໃຈຂອງເຈົ້າເປັນແຮງຈູງໃຈຢ່າງຕໍ່ເນື່ອງຂອງພວກເຮົາ!

 

评论评论

您的邮箱地址不会被公开。必填项已用*标注

ເລື່ອນໄປທາງເທີງ