ฐานข้อมูล MySQL เข้าร่วมการใช้งานหลายตารางภายในหรือไม่ ซ้ายซ้ายเข้าร่วมประสิทธิภาพการใช้งาน

ฐานข้อมูล MySQLภายในเข้าร่วมการใช้งานหลายตาราง? ซ้ายซ้ายเข้าร่วมประสิทธิภาพการใช้งาน

mysql การใช้การเชื่อมต่อ

ในบทที่แล้ว เราได้เรียนรู้วิธีการอ่านข้อมูลจากตารางเดียว ซึ่งค่อนข้างง่าย แต่ในการใช้งานจริง มักจะจำเป็นต้องอ่านข้อมูลจากตารางข้อมูลหลายตาราง

ในบทนี้เราจะแสดงวิธีใช้ JOIN ของ MySQL เพื่อสืบค้นข้อมูลในตารางตั้งแต่สองตารางขึ้นไป

คุณสามารถใช้ JOIN ของ Mysql ในคำสั่ง SELECT, UPDATE และ DELETE เพื่อรวมการสืบค้นแบบหลายตาราง

JOIN แบ่งออกเป็นสามประเภทคร่าวๆ ตามหน้าที่:

  • เข้าร่วมภายใน (เข้าร่วมภายใน หรือ equijoin): รับระเบียนที่มีเขตข้อมูลตรงกันในสองตาราง
  • ซ้ายเข้าร่วม (เข้าร่วมซ้าย):รับระเบียนทั้งหมดในตารางด้านซ้าย แม้ว่าจะไม่มีระเบียนที่ตรงกันในตารางด้านขวาก็ตาม
  • เข้าร่วมขวา (เข้าร่วมขวา): ตรงกันข้ามกับ 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)

ต่อไปเราจะใช้ MySQLINNER JOIN (คุณสามารถละเว้น INNER และใช้ 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 left join แตกต่างจาก join MySQL LEFT JOIN จะอ่านข้อมูลทั้งหมดในตารางข้อมูลด้านซ้าย แม้ว่าตารางด้านขวาจะไม่มีข้อมูลที่ตรงกันก็ตาม

ตัวอย่าง

ลองใช้ตัวอย่างต่อไปนี้เพื่อ chenweiliang_tbl สำหรับโต๊ะด้านซ้ายtcount_tbl สำหรับตารางที่ถูกต้อง ให้เข้าใจแอปพลิเคชันของ MySQL LEFT JOIN:

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

ฟังก์ชัน mysqli_query() ใช้ใน PHP เพื่อดำเนินการคำสั่ง SQL คุณสามารถใช้คำสั่ง SQL เดียวกันกับด้านบนเป็นพารามิเตอร์ของฟังก์ชัน mysqli_query()

ลองตัวอย่างต่อไปนี้:

MySQL สั่งซื้อโดยการทดสอบ:

<?
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 บล็อก ( https://www.chenweiliang.com/ ) แชร์ "การใช้งานหลายตารางของการรวมฐานข้อมูล MySQL ภายในหรือไม่ left Left เข้าร่วมอย่างมีประสิทธิภาพการใช้งาน" มันจะช่วยคุณได้

ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-488.html

ยินดีต้อนรับสู่ช่อง Telegram ของบล็อกของ Chen Weiliang เพื่อรับข่าวสารล่าสุด!

🔔 เป็นคนแรกที่ได้รับ "คู่มือการใช้งานเครื่องมือ AI การตลาดเนื้อหา ChatGPT" อันทรงคุณค่าในไดเรกทอรีด้านบนของช่อง! 🌟
📚 คู่มือนี้มีคุณค่ามหาศาล 🌟 นี่เป็นโอกาสที่หายาก อย่าพลาด! ⏰⌛💨
แชร์และชอบถ้าคุณชอบ!
การแบ่งปันและไลค์ของคุณเป็นแรงจูงใจอย่างต่อเนื่องของเรา!

 

发表评论

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ 必填项已用 * 标注