MySQL databas inre gå med multi-table användning? vänster vänster gå med användningseffektivitet

MySQL-databasinre join multi-table användning? vänster vänster gå med användningseffektivitet

mysql användning av anslutning

I de föregående kapitlen har vi lärt oss hur man läser data från en tabell, vilket är relativt enkelt, men i verkliga applikationer är det ofta nödvändigt att läsa data från flera datatabeller.

I det här kapitlet kommer vi att visa dig hur du använder MySQL:s JOIN för att söka efter data i två eller flera tabeller.

Du kan använda Mysqls JOIN i SELECT-, UPDATE- och DELETE-satser för att gå med i flerbordsfrågor.

JOIN är grovt uppdelat i följande tre kategorier efter dess funktion:

  • INNER JOIN (inre koppling, eller equijoin): Få poster med matchande fält i två tabeller.
  • LEFT JOIN (vänster gå med):Hämta alla poster i den vänstra tabellen, även om det inte finns några matchande poster i den högra tabellen.
  • RIGHT JOIN (höger join): I motsats till LEFT JOIN används den för att få alla poster i den högra tabellen, även om det inte finns några motsvarande matchande poster i den vänstra tabellen.

Använda INNER JOIN i kommandotolken

Vi har två tabeller tcount_tbl och chenweiliang_tbl i chenweiliang-databasen.Data för de två datatabellerna är följande:

exempel

Prova följande exempel:

testinstansdata

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)

Därefter kommer vi att använda MySQLINNER JOIN (du kan också utelämna INNER och använda JOIN, effekten är densamma)För att koppla samman ovanstående två tabeller för att läsa värdet på chenweiliang_count-fältet som motsvarar alla chenweiliang_author-fält i tabellen chenweiliang_tbl i tcount_tbl-tabellen:

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)

Ovanstående SQL-sats motsvarar:

WHERE klausul

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 VÄNSTER GÅ MED

MySQL left join skiljer sig från join. MySQL LEFT JOIN kommer att läsa all data i den vänstra datatabellen, även om den högra tabellen inte har någon motsvarande data.

exempel

Försök med följande exempel chenweiliang_tbl för det vänstra bordet,tcount_tbl För rätt tabell, förstå tillämpningen av MySQL LEFT JOIN:

VÄNSTER GÅ

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)

I exemplet ovan används LEFT JOIN, och denna sats kommer att läsa alla valda fältdata i datatabellen chenweiliang_tbl till vänster, även om det inte finns något motsvarande fältvärde för chenweiliang_author i tabellen tcount_tbl till höger.


MySQL RÄTT GÅ MED

MySQL RIGHT JOIN kommer att läsa all data i datatabellen till höger, även om det inte finns motsvarande data i tabellen till vänster.

exempel

Försök med följande exempel chenweiliang_tbl för det vänstra bordet,tcount_tbl För rätt tabell, förstå tillämpningen av MySQL RIGHT JOIN:

HÖGER GÅ MED

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 används i exemplet ovan, denna sats kommer att läsa alla valda fältdata i den högra datatabellen tcount_tbl, även om det inte finns något motsvarande chenweiliang_author-fältvärde i den vänstra tabellen chenweiliang_tbl.


Använder JOIN i PHP-skript

Funktionen mysqli_query() används i PHP för att exekvera SQL-satser, du kan använda samma SQL-sats som ovan som parametern för funktionen mysqli_query().

Prova följande exempel:

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

Hope Chen Weiliang blogg ( https://www.chenweiliang.com/ ) delade "Användning av flera tabeller av MySQL-databasens inre koppling? vänster Vänster Join Usage Efficiency", kommer det att hjälpa dig.

Välkommen att dela länken till denna artikel:https://www.chenweiliang.com/cwl-488.html

Välkommen till Telegram-kanalen på Chen Weiliangs blogg för att få de senaste uppdateringarna!

🔔 Bli först med att få den värdefulla "ChatGPT Content Marketing AI Tool Usage Guide" i kanalens toppkatalog! 🌟
📚 Den här guiden innehåller ett enormt värde, 🌟Detta är ett sällsynt tillfälle, missa inte det! ⏰⌛💨
Dela och gilla om du vill!
Dina delning och likes är vår ständiga motivation!

 

发表 评论

Din e-postadress kommer inte att publiceras. 必填 项 已 用 * 标注

scrolla till toppen