MySQL database ġewwa jingħaqdu multi-tabella użu? xellug xellug jissieħbu effiċjenza fl-użu

database MySQLinner join użu multi-mejda? xellug xellug jissieħbu effiċjenza fl-użu

Mysql użu ta 'konnessjoni

Fil-kapitoli preċedenti, tgħallimna kif naqraw dejta minn tabella waħda, li hija relattivament sempliċi, iżda f'applikazzjonijiet reali ħafna drabi jkun meħtieġ li taqra dejta minn tabelli ta 'dejta multipli.

F'dan il-kapitlu ser nuruk kif tuża l-JOIN tal-MySQL biex titlob dejta f'żewġ tabelli jew aktar.

Tista' tuża l-JOIN ta' Mysql f'dikjarazzjonijiet SELECT, UPDATE u DELETE biex tgħaqqad mistoqsijiet multi-tabella.

JOIN hija bejn wieħed u ieħor maqsuma fit-tliet kategoriji li ġejjin skond il-funzjoni tagħha:

  • INNER JOIN (inner join, jew equijoin): Ikseb rekords b'oqsma li jaqblu f'żewġ tabelli.
  • LEFT JOIN (għaqqad ix-xellug):Ikseb ir-rekords kollha fit-tabella tax-xellug, anki jekk ma jkunx hemm rekords li jaqblu fit-tabella tal-lemin.
  • RIGHT JOIN (jingħaqad bil-lemin): Kuntrarjament għal LEFT JOIN, tintuża biex tikseb ir-rekords kollha fit-tabella tal-lemin, anki jekk ma jkunx hemm rekords korrispondenti li jaqblu fit-tabella tax-xellug.

Bl-użu ta 'INNER JOIN fil-Prompt tal-Kmand

Għandna żewġ tabelli tcount_tbl u chenweiliang_tbl fid-database ta 'chenweiliang.Id-dejta taż-żewġ tabelli tad-dejta hija kif ġej:

eżempju

Ipprova l-eżempji li ġejjin:

data tal-istanza tat-test

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)

Sussegwentement se nużaw MySQLINNER JOIN (tista 'wkoll tħalli barra INNER u tuża JOIN, l-effett huwa l-istess)Biex tgħaqqad iż-żewġ tabelli ta 'hawn fuq biex taqra l-valur tal-qasam chenweiliang_count li jikkorrispondi għall-oqsma kollha chenweiliang_author fit-tabella chenweiliang_tbl fit-tabella tcount_tbl:

Ġewwa ġewwa jissieħbu

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)

Id-dikjarazzjoni SQL ta' hawn fuq hija ekwivalenti għal:

FEJN klawsola

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 left join huwa differenti minn join. MySQL LEFT JOIN se jaqra d-dejta kollha fit-tabella tad-dejta tax-xellug, anki jekk it-tabella tal-lemin ma jkollha l-ebda dejta korrispondenti.

eżempju

Ipprova l-eżempji li ġejjin biex chenweiliang_tbl għat-tabella tax-xellug,tcount_tbl Għat-tabella t-tajba, ifhem l-applikazzjoni ta 'MySQL LEFT JOIN:

Ix-XELLUG JINGħaqDU

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)

Fl-eżempju ta 'hawn fuq, jintuża LEFT JOIN, u din id-dikjarazzjoni se taqra d-dejta kollha tal-qasam magħżula tat-tabella tad-dejta chenweiliang_tbl fuq ix-xellug, anki jekk m'hemm l-ebda valur tal-qasam korrispondenti ta' chenweiliang_author fit-tabella tcount_tbl fuq il-lemin.


MySQL DRITT JOIN

MySQL RIGHT JOIN se jaqra d-dejta kollha fit-tabella tad-dejta fuq il-lemin, anki jekk ma jkunx hemm dejta korrispondenti fit-tabella fuq ix-xellug.

eżempju

Ipprova l-eżempji li ġejjin biex chenweiliang_tbl għat-tabella tax-xellug,tcount_tbl Għat-tabella t-tajba, ifhem l-applikazzjoni ta 'MySQL RIGHT JOIN:

DRITT 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 tintuża fl-eżempju ta 'hawn fuq, din id-dikjarazzjoni se taqra d-dejta kollha tal-qasam magħżula tat-tabella tad-dejta tal-lemin tcount_tbl, anki jekk m'hemm l-ebda valur korrispondenti tal-qasam chenweiliang_author fit-tabella tax-xellug chenweiliang_tbl.


Bl-użu JOIN fl-iskrittura PHP

Il-funzjoni mysqli_query() tintuża fil-PHP biex tesegwixxi dikjarazzjonijiet SQL, tista 'tuża l-istess dikjarazzjoni SQL bħal hawn fuq bħala l-parametru tal-funzjoni mysqli_query().

Ipprova l-eżempju li ġej:

MySQL ORDNI B'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);
?>

发表 评论

您的邮箱地址不会被公开。 Jintużaw l-oqsma meħtieġa * Tikketta

Skrollja Top