Rakstu katalogs
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!
📚 Š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!