MySQL database indre join multi-table brug? venstre venstre joinbrugseffektivitet

MySQL databasebrug af indre join-multibord? venstre venstre joinbrugseffektivitet

mysql brug af forbindelse

I de foregående kapitler har vi lært, hvordan man læser data fra én tabel, hvilket er relativt enkelt, men i rigtige applikationer er det ofte nødvendigt at læse data fra flere datatabeller.

I dette kapitel vil vi vise dig, hvordan du bruger MySQL's JOIN til at forespørge data i to eller flere tabeller.

Du kan bruge Mysqls JOIN i SELECT-, UPDATE- og DELETE-sætninger til at deltage i multi-table-forespørgsler.

JOIN er groft opdelt i følgende tre kategorier efter dets funktion:

  • INNER JOIN (indre joinforbindelse eller equijoin): Få poster med matchende felter i to tabeller.
  • LEFT JOIN (venstre join):Hent alle poster i den venstre tabel, selvom der ikke er nogen matchende poster i den højre tabel.
  • HØJRE JOIN (højre JOIN): I modsætning til LEFT JOIN bruges den til at få alle poster i den højre tabel, selvom der ikke er tilsvarende matchende poster i den venstre tabel.

Brug af INNER JOIN i kommandoprompt

Vi har to tabeller tcount_tbl og chenweiliang_tbl i chenweiliang-databasen.Dataene i de to datatabeller er som følger:

Instans

Prøv følgende eksempler:

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)

Dernæst vil vi bruge MySQLINNER JOIN (du kan også udelade INNER og bruge JOIN, effekten er den samme)For at forbinde ovenstående to tabeller for at læse værdien af ​​chenweiliang_count-feltet svarende til alle chenweiliang_author-felterne i chenweiliang_tbl-tabellen 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)

Ovenstående SQL-sætning svarer til:

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

MySQL venstre join er forskellig fra join. MySQL LEFT JOIN vil læse alle data i den venstre datatabel, selvom den højre tabel ikke har nogen tilsvarende data.

Instans

Prøv følgende eksempler chenweiliang_tbl til venstre bord,tcount_tbl For den rigtige tabel, forstå anvendelsen af ​​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)

I ovenstående eksempel bruges LEFT JOIN, og denne sætning vil læse alle de valgte feltdata i datatabellen chenweiliang_tbl til venstre, selvom der ikke er nogen tilsvarende feltværdi for chenweiliang_author i tabellen tcount_tbl til højre.


MySQL HØJRE JOIN

MySQL RIGHT JOIN vil læse alle data i datatabellen til højre, selvom der ikke er tilsvarende data i tabellen til venstre.

Instans

Prøv følgende eksempler chenweiliang_tbl til venstre bord,tcount_tbl For den rigtige tabel, forstå anvendelsen af ​​MySQL RIGHT JOIN:

HØJRE 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 bruges i ovenstående eksempel, vil denne sætning læse alle de valgte feltdata i den højre datatabel tcount_tbl, selvom der ikke er nogen tilsvarende chenweiliang_author feltværdi i den venstre tabel chenweiliang_tbl.


Brug af JOIN i PHP script

Mysqli_query()-funktionen bruges i PHP til at udføre SQL-sætninger, du kan bruge den samme SQL-sætning som ovenfor som parameteren for mysqli_query()-funktionen.

Prøv følgende eksempel:

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 Blog ( https://www.chenweiliang.com/ ) delt "Multi-table brug af MySQL database indre joinforbindelse? venstre Venstre Join Usage Efficiency", vil det hjælpe dig.

Velkommen til at dele linket til denne artikel:https://www.chenweiliang.com/cwl-488.html

Velkommen til Telegram-kanalen på Chen Weiliangs blog for at få de seneste opdateringer!

🔔 Vær den første til at få den værdifulde "ChatGPT Content Marketing AI Tool Usage Guide" i kanalens øverste bibliotek! 🌟
📚 Denne guide indeholder enorm værdi, 🌟Dette er en sjælden mulighed, gå ikke glip af det! ⏰⌛💨
Del og like hvis du har lyst!
Din deling og likes er vores kontinuerlige motivation!

 

发表 评论

Din e-mail-adresse vil ikke blive offentliggjort. 必填 项 已 用 * 标注

scroll til toppen