שימוש במסדי נתונים פנימיים של MySQL מרובי שולחנות? שמאל שמאל הצטרף ליעילות השימוש

כיצד להשתמש ב-inner join עם מספר טבלאות במסד נתונים של MySQL ? מהי יעילות ה-left join?

MySQL שימוש בחיבור

בפרקים הקודמים, למדנו כיצד לקרוא נתונים מטבלה אחת, וזה פשוט יחסית, אך באפליקציות אמיתיות יש צורך לעיתים קרובות לקרוא נתונים מטבלאות נתונים מרובות.

בפרק זה נראה לך כיצד להשתמש ב-JOIN של MySQL כדי לבצע שאילתות נתונים בשתי טבלאות או יותר.

אתה יכול להשתמש ב-JOIN של Mysql בהצהרות 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)

בשלב הבא, נשתמש ב- 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 left 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 ORDER BY test:

<?
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);
?>

אני מקווה שהמאמר "שימוש ב- inner join של מסד נתונים MySQL על פני טבלאות מרובות? יעילות של left join" שפורסם בבלוג של צ'ן וייליאנג ( https://www.chenweiliang.com/ ) יהיה לעזר עבורך.

אל תהססו לשתף את הקישור למאמר הזה: https://www.chenweiliang.com/cwl-488.html

כדי לפתוח עוד טריקים נסתרים🔑, מוזמנים להצטרף לערוץ הטלגרם שלנו!

שתפו ותעשו לייק אם אהבתם! השיתופים והלייקים שלך הם המניע המתמשך שלנו!

 

发表 评论

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

גלול למעלה