MySQL дерекқорының ішкі біріктіру көп кестелік қолданылуы? солға солға біріктіруді пайдалану тиімділігі

MySQL деректер қорыішкі біріктіру көп кестені пайдалану? солға солға біріктіруді пайдалану тиімділігі

Мысық байланысты пайдалану

Алдыңғы тарауларда біз бір кестеден деректерді оқуды үйрендік, бұл салыстырмалы түрде қарапайым, бірақ нақты қолданбаларда көбінесе бірнеше деректер кестелерінен деректерді оқу қажет.

Бұл тарауда біз екі немесе одан да көп кестелердегі деректерді сұрау үшін MySQL JOIN қалай пайдалану керектігін көрсетеміз.

Көп кестелік сұрауларға қосылу үшін SELECT, UPDATE және DELETE операторларында Mysql JOIN функциясын пайдалануға болады.

JOIN функциясына қарай шамамен үш санатқа бөлінеді:

  • INNER JOIN (ішкі біріктіру немесе теңестіру): Екі кестедегі сәйкес өрістері бар жазбаларды алыңыз.
  • LEFT JOIN (сол жақ қосылу):Оң жақ кестеде сәйкес жазбалар болмаса да, сол жақ кестедегі барлық жазбаларды алыңыз.
  • ОҢ ҚОСЫЛУ (оң жаққа қосылу): LEFT JOIN-ге қарамастан, ол сол жақ кестеде сәйкес жазбалар болмаса да, оң жақ кестедегі барлық жазбаларды алу үшін қолданылады.

Пәрмен жолында INNER JOIN пайдалану

Chenweiliang дерекқорында бізде екі tcount_tbl және chenweiliang_tbl кестелері бар.Екі деректер кестесінің деректері келесідей:

Дана

Келесі мысалдарды қолданып көріңіз:

сынақ данасы деректері

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-ті қолданамызINNER JOIN (ІШКІ қосуды қалдырып, JOIN функциясын қолдануға болады, әсер бірдей)tcount_tbl кестесіндегі chenweiliang_tbl кестесіндегі барлық chenweiliang_author өрістеріне сәйкес келетін chenweiliang_count өрісінің мәнін оқу үшін жоғарыдағы екі кестені қосу үшін:

ІШКІ КІРУ

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 пайдаланылады және бұл мәлімдеме оң жақтағы tcount_tbl кестесінде chenweiliang_author сәйкес өріс мәні болмаса да, сол жақтағы chenweiliang_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 жоғарыдағы мысалда пайдаланылады, бұл мәлімдеме сол жақ кестеде chenweiliang_tbl сәйкес chenweiliang_author өріс мәні болмаса да, tcount_tbl оң деректер кестесінің барлық таңдалған өріс деректерін оқиды.


PHP сценарийінде JOIN пайдалану

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

Hope Chen Weiliang блогы ( https://www.chenweiliang.com/ ) ортақ «MySQL дерекқорының ішкі біріктіруін көп кестелік пайдалану? Left Join Usage Efficiency (солға қосылыңыз)» бұл сізге көмектеседі.

Осы мақаланың сілтемесін бөлісуге қош келдіңіз:https://www.chenweiliang.com/cwl-488.html

Соңғы жаңартуларды алу үшін Чен Вэйлян блогының Telegram арнасына қош келдіңіз!

🔔 Арнаның жоғарғы каталогындағы құнды "ChatGPT мазмұнды маркетингтік AI құралын пайдалану нұсқаулығын" бірінші болып алыңыз! 🌟
📚 Бұл нұсқаулықта үлкен құндылық бар, 🌟Бұл сирек мүмкіндік, оны жіберіп алмаңыз! ⏰⌛💨
Ұнаса лайк басып, бөлісіңіз!
Сіздің бөлісулеріңіз бен лайктарыңыз - біздің үздіксіз мотивациямыз!

 

Пікірлер

Сіздің электрондық пошта мекен-жайыңыз жарияланбайды. 必填 项 已 用 * 标注

жоғарыға жылжытыңыз