الانضمام الداخلي لقاعدة بيانات MySQL متعدد الجداول؟ ترك كفاءة استخدام الانضمام

قاعدة بيانات MySQLالانضمام الداخلي متعدد استخدام الجدول؟ ترك كفاءة استخدام الانضمام

الخلية استخدام الاتصال

في الفصول السابقة ، تعلمنا كيفية قراءة البيانات من جدول واحد ، وهو أمر بسيط نسبيًا ، ولكن في التطبيقات الحقيقية غالبًا ما يكون من الضروري قراءة البيانات من جداول بيانات متعددة.

سنوضح لك في هذا الفصل كيفية استخدام MySQL's JOIN للاستعلام عن البيانات في جدولين أو أكثر.

يمكنك استخدام Mysql's JOIN في عبارات SELECT و UPDATE و DELETE للانضمام إلى الاستعلامات متعددة الجداول.

تنقسم JOIN تقريبًا إلى الفئات الثلاث التالية وفقًا لوظيفتها:

  • INNER JOIN (صلة داخلية ، أو equijoin): الحصول على سجلات مع الحقول المتطابقة في جدولين.
  • LEFT JOIN (الانضمام الأيسر):احصل على جميع السجلات في الجدول الأيسر ، حتى إذا لم تكن هناك سجلات متطابقة في الجدول الأيمن.
  • RIGHT JOIN (حق الانضمام): على عكس LEFT JOIN ، يتم استخدامه للحصول على جميع السجلات في الجدول الأيمن ، حتى إذا لم تكن هناك سجلات مطابقة مقابلة في الجدول الأيسر.

استخدام INNER JOIN في موجه الأوامر

لدينا جدولين 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 أعلاه يعادل:

حيث الشرطية

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:

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 ORDER BY:

<?
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 ( https://www.chenweiliang.com/ ) شارك "استخدام الجداول المتعددة للانضمام الداخلي لقاعدة بيانات MySQL؟ يسارًا ، انضم إلى كفاءة الاستخدام "، سيساعدك ذلك.

مرحبا بكم في مشاركة رابط هذه المقالة:https://www.chenweiliang.com/cwl-488.html

مرحبًا بك في قناة Telegram الخاصة بمدونة Chen Weiliang للحصول على آخر التحديثات!

🔔 كن أول من يحصل على "دليل استخدام أداة الذكاء الاصطناعي لتسويق محتوى ChatGPT" في الدليل العلوي للقناة! 🌟
📚 يحتوي هذا الدليل على قيمة كبيرة، 🌟هذه فرصة نادرة، لا تفوتها! ⏰⌛💨
شارك و اعجبك اذا اردت
مشاركتك وإعجاباتك هي دافعنا المستمر!

 

发表 评论

لن يتم نشر عنوان بريدك الإلكتروني. 必填 项 已 用 * 标注

انتقل إلى أعلى