MySQL-datumbazo interna aliĝi multi-tabla uzado? maldekstra maldekstre kunigi uzadon efikecon

MySQL-datumbazointerna kunigo plurtabla uzado? maldekstra maldekstre kunigi uzadon efikecon

Mysql uzo de konekto

En la antaŭaj ĉapitroj, ni lernis kiel legi datumojn de unu tabelo, kio estas relative simpla, sed en realaj aplikoj ofte necesas legi datumojn de pluraj datumtabloj.

En ĉi tiu ĉapitro ni montros al vi kiel uzi la JOIN de MySQL por pridemandi datumojn en du aŭ pli da tabeloj.

Vi povas uzi la deklarojn JOIN de Mysql en SELECT, UPDATE kaj DELETE por kunigi plurtabelajn demandojn.

JOIN estas proksimume dividita en la sekvajn tri kategoriojn laŭ sia funkcio:

  • INNER JOIN (interna kunigo, aŭ egalkuniĝo): Akiru rekordojn kun kongruaj kampoj en du tabeloj.
  • LEFT JOIN (maldekstra aliĝo):Akiru ĉiujn rekordojn en la maldekstra tabelo, eĉ se ne estas kongruaj rekordoj en la dekstra tabelo.
  • DEKSTRA ALIGO (dekstra aliĝo): Male al LEFT JOIN, ĝi estas uzata por ricevi ĉiujn rekordojn en la dekstra tabelo, eĉ se ne estas respondaj kongruaj rekordoj en la maldekstra tabelo.

Uzante INNER JOIN en Komandprompto

Ni havas du tabelojn tcount_tbl kaj chenweiliang_tbl en la chenweiliang datumbazo.La datumoj de la du datentabloj estas kiel sekvas:

ekzemplo

Provu la sekvajn ekzemplojn:

provaj petskriboj

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)

Poste ni uzos MySQLINNER JOIN (vi ankaŭ povas preterlasi INNER kaj uzi JOIN, la efiko estas la sama)Por konekti la suprajn du tabelojn por legi la valoron de la kampo chenweiliang_count responda al ĉiuj kampoj chenweiliang_author en la tabelo chenweiliang_tbl en la tabelo tcount_tbl:

INTERNA ALIĜO

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)

La supra SQL-deklaro estas ekvivalenta al:

WHERE subfrazo

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 maldekstre aliĝi

MySQL maldekstra kunigo estas malsama al kuniĝo. MySQL LEFT JOIN legos ĉiujn datumojn en la maldekstra datumtabelo, eĉ se la dekstra tablo ne havas respondajn datumojn.

ekzemplo

Provu la sekvajn ekzemplojn por chenweiliang_tbl por la maldekstra tablo,tcount_tbl Por la ĝusta tablo, komprenu la aplikon de 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)

En la supra ekzemplo, LEFT JOIN estas uzata, kaj ĉi tiu deklaro legos ĉiujn elektitajn kampodatenojn de la datumtabelo chenweiliang_tbl maldekstre, eĉ se ne estas responda kampovaloro de chenweiliang_author en la tabelo tcount_tbl dekstre.


MySQL DEKSTRA ALIGO

MySQL RIGHT JOIN legos ĉiujn datumojn en la datuma tabelo dekstre, eĉ se ne estas respondaj datumoj en la tabelo maldekstre.

ekzemplo

Provu la sekvajn ekzemplojn por chenweiliang_tbl por la maldekstra tablo,tcount_tbl Por la ĝusta tablo, komprenu la aplikon de MySQL RIGHT JOIN:

ĜUSTA ALIGO

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 estas uzata en la supra ekzemplo, ĉi tiu deklaro legos ĉiujn elektitajn kampajn datumojn de la dekstra datumtabelo tcount_tbl, eĉ se ne estas responda chenweiliang_author kampovaloro en la maldekstra tabelo chenweiliang_tbl.


Uzante JOIN en PHP-skripto

La mysqli_query() funkcio estas uzata en PHP por ekzekuti SQL-deklarojn, vi povas uzi la saman SQL-deklaron kiel supre kiel parametron al la mysqli_query() funkcio.

Provu la sekvan ekzemplon:

MySQL MENDU PER testo:

<?
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 Blogo ( https://www.chenweiliang.com/ ) kunhavis "Mult-tablan uzadon de interna kunigo en MySQL-datumbazo? lasis Maldekstre Aliĝi Uzo-Efikecon", ĝi helpos vin.

Bonvenon dividi la ligon de ĉi tiu artikolo:https://www.chenweiliang.com/cwl-488.html

Bonvenon al la Telegram-kanalo de la blogo de Chen Weiliang por ricevi la plej novajn ĝisdatigojn!

🔔 Estu la unua ricevi la valoran "ChatGPT Content Marketing AI Tool Use Guide" en la ĉefa dosierujo de la kanalo! 🌟
📚 Ĉi tiu gvidilo enhavas grandegan valoron, 🌟Ĉi tio estas malofta ŝanco, ne maltrafu ĝin! ⏰⌛💨
Kunhavigu kaj ŝatu se vi ŝatas!
Via kundivido kaj ŝatoj estas nia kontinua instigo!

 

Lasu komenton

Via retpoŝta adreso ne estos publikigita. Bezonataj kampoj estas uzataj * Etikedo

rulumu al la supro