MySQL datu bāzes iekšējā pievienoties vairāku tabulu izmantošanu? kreisais kreisais savienojuma izmantošanas efektivitāte

MySQL datu bāzeiekšējā savienojuma vairāku galdu izmantošana? kreisais kreisais savienojuma izmantošanas efektivitāte

MySQL savienojuma izmantošana

Iepriekšējās nodaļās esam iemācījušies nolasīt datus no vienas tabulas, kas ir salīdzinoši vienkārši, taču reālās lietojumprogrammās bieži vien ir nepieciešams nolasīt datus no vairākām datu tabulām.

Šajā nodaļā mēs parādīsim, kā izmantot MySQL JOIN, lai vaicātu datus divās vai vairākās tabulās.

Varat izmantot Mysql JOIN priekšrakstos SELECT, UPDATE un DELETE, lai pievienotos vairāku tabulu vaicājumiem.

JOIN ir aptuveni sadalīts šādās trīs kategorijās atkarībā no tā funkcijas:

  • IEKŠĒJAIS SAVIENOJUMS (iekšējais savienojums vai vienāds savienojums): iegūstiet ierakstus ar atbilstošiem laukiem divās tabulās.
  • LEFT JOIN (pa kreisi pievienoties):Iegūstiet visus ierakstus kreisajā tabulā, pat ja labajā tabulā nav atbilstošu ierakstu.
  • LABAIS PIEVIENOJUMS (labais pievienošanās): Pretēji LEFT JOIN, to izmanto, lai iegūtu visus ierakstus labajā tabulā, pat ja kreisajā tabulā nav atbilstošu ierakstu.

Komandu uzvednē tiek izmantota INNER JOIN

Mums ir divas tabulas tcount_tbl un chenweiliang_tbl chenweiliang datu bāzē.Abu datu tabulu dati ir šādi:

Piemērs

Izmēģiniet tālāk norādītos piemērus.

testa gadījumu dati

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)

Tālāk mēs izmantosim MySQLINNER JOIN (varat arī izlaist INNER un izmantot JOIN, efekts ir tāds pats)Lai savienotu divas iepriekš minētās tabulas, lai nolasītu lauka chenweiliang_count vērtību, kas atbilst visiem chenweiliang_author laukiem tabulā chenweiliang_tbl tabulā 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)

Iepriekš minētais SQL priekšraksts ir līdzvērtīgs:

KUR klauzula

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 LEFT JOIN

MySQL kreisais savienojums atšķiras no pievienošanās. MySQL LEFT JOIN nolasīs visus datus kreisajā datu tabulā, pat ja labajā tabulā nav atbilstošu datu.

Piemērs

Izmēģiniet tālāk norādītos piemērus chenweiliang_tbl kreisajam galdam,tcount_tbl Lai iegūtu pareizo tabulu, izprotiet MySQL LEFT JOIN pielietojumu:

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)

Iepriekš minētajā piemērā tiek izmantots LEFT JOIN. Šis paziņojums nolasīs visus atlasītos lauku datus datu tabulas chenweiliang_tbl kreisajā pusē, pat ja labajā tabulā tcount_tbl nav atbilstošas ​​chenweiliang_author lauka vērtības.


MySQL RIGHT JOIN

MySQL RIGHT JOIN nolasīs visus datus datu tabulā pa labi, pat ja kreisajā tabulā nav atbilstošu datu.

Piemērs

Izmēģiniet tālāk norādītos piemērus chenweiliang_tbl kreisajam galdam,tcount_tbl Lai iegūtu pareizo tabulu, izprotiet MySQL RIGHT JOIN pielietojumu:

PAREIZI PIEVIENOJIES

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)

Iepriekš minētajā piemērā tiek izmantots RIGHT JOIN, šis paziņojums nolasīs visus labajā pusē esošās datu tabulas tcount_tbl atlasītos lauka datus, pat ja kreisajā tabulā chenweiliang_tbl nav atbilstošas ​​chenweiliang_author lauka vērtības.


Izmantojot JOIN PHP skriptā

Funkcija mysqli_query() tiek izmantota PHP, lai izpildītu SQL priekšrakstus. Varat izmantot to pašu SQL priekšrakstu, kā minēts iepriekš, kā funkcijas mysqli_query() parametru.

Izmēģiniet šādu piemēru:

MySQL ORDER BY tests:

<?
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 emuārs ( https://www.chenweiliang.com/ ) koplietots "MySQL datu bāzes iekšējās pievienošanās vairāku galdu izmantošana? left Left Join Usage Efficiency”, tas jums palīdzēs.

Laipni lūdzam kopīgot šī raksta saiti:https://www.chenweiliang.com/cwl-488.html

Laipni lūdzam Chen Weiliang emuāra Telegram kanālā, lai saņemtu jaunākos atjauninājumus!

🔔 Esiet pirmais, kas kanāla augšējā direktorijā iegūst vērtīgo "ChatGPT satura mārketinga AI rīka lietošanas ceļvedi"! 🌟
📚 Šajā rokasgrāmatā ir milzīga vērtība, 🌟Šī ir reta iespēja, nepalaidiet to garām! ⏰⌛💨
Dalies un patīk, ja patīk!
Jūsu kopīgošana un atzīmes Patīk ir mūsu nepārtraukta motivācija!

 

发表 评论

Jūsu e-pasta adrese netiks publicēta. 必填 项 已 用 * Etiķete

ritiniet uz augšu