MySQL duomenų bazės vidinis prisijungti kelių lentelių naudojimas? kairysis kairysis prisijungimo efektyvumas

MySQL duomenų bazėvidinis sujungimas kelių stalų naudojimas? kairysis kairysis prisijungimo efektyvumas

MySQL ryšio naudojimas

Ankstesniuose skyriuose išmokome nuskaityti duomenis iš vienos lentelės, o tai gana paprasta, tačiau realiose programose dažnai reikia skaityti duomenis iš kelių duomenų lentelių.

Šiame skyriuje parodysime, kaip naudoti MySQL JOIN užklausai duomenų dviejose ar daugiau lentelių.

Norėdami sujungti kelių lentelių užklausas, galite naudoti Mysql JOIN teiginiuose SELECT, UPDATE ir DELETE.

JOIN apytiksliai skirstomas į tris kategorijas pagal savo funkciją:

  • INNER JOIN (vidinis sujungimas arba lygiavertis sujungimas): gaukite įrašus su atitinkančiais laukais dviejose lentelėse.
  • LEFT JOIN (kairysis prisijungimas):Gaukite visus įrašus kairiojoje lentelėje, net jei dešinėje lentelėje nėra atitinkamų įrašų.
  • PRISIJUNGTI DEŠINIU (dešiniuoju prisijungimu): Priešingai nei LEFT JOIN, jis naudojamas norint gauti visus įrašus dešinėje lentelėje, net jei kairiojoje lentelėje nėra atitinkamų įrašų.

Naudojimas INNER JOIN komandinėje eilutėje

Mes turime dvi lenteles tcount_tbl ir chenweiliang_tbl chenweiliang duomenų bazėje.Dviejų duomenų lentelių duomenys yra tokie:

pavyzdys

Išbandykite šiuos pavyzdžius:

bandomųjų egzempliorių duomenys

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)

Toliau naudosime MySQLINNER JOIN (taip pat galite praleisti INNER ir naudoti JOIN, efektas yra tas pats)Norėdami sujungti aukščiau pateiktas dvi lenteles ir nuskaityti lauko chenweiliang_count vertę, atitinkančią visus chenweiliang_author laukus chenweiliang_tbl lentelėje tcount_tbl:

VIDINIS PRISIJUNGTI

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)

Aukščiau pateiktas SQL sakinys yra lygiavertis:

WERE sąlyga

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“ paliko prisijungimą

MySQL kairysis prisijungimas skiriasi nuo prisijungimo. MySQL LEFT JOIN nuskaitys visus duomenis kairiojoje duomenų lentelėje, net jei dešinėje lentelėje nėra atitinkamų duomenų.

pavyzdys

Išbandykite šiuos pavyzdžius chenweiliang_tbl kairiajam stalui,tcount_tbl Norėdami rasti tinkamą lentelę, supraskite MySQL LEFT JOIN taikymą:

KAIRYSIS PRISIJUNGTI

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)

Aukščiau pateiktame pavyzdyje naudojamas LEFT JOIN. Šis sakinys nuskaitys visus kairėje esančios duomenų lentelės chenweiliang_tbl pasirinktus lauko duomenis, net jei dešinėje esančioje lentelėje tcount_tbl nėra atitinkamos chenweiliang_author lauko reikšmės.


„MySQL“ TEISINGAS PRISIJUNGTI

„MySQL RIGHT JOIN“ nuskaitys visus dešinėje esančios duomenų lentelės duomenis, net jei kairėje esančioje lentelėje nėra atitinkamų duomenų.

pavyzdys

Išbandykite šiuos pavyzdžius chenweiliang_tbl kairiajam stalui,tcount_tbl Norėdami rasti tinkamą lentelę, supraskite MySQL RIGHT JOIN taikymą:

TEISINGAS PRISIJUNGTI

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)

Aukščiau pateiktame pavyzdyje naudojamas RIGHT JOIN, šis teiginys nuskaitys visus dešinėje esančios duomenų lentelės tcount_tbl pasirinktus lauko duomenis, net jei kairėje lentelėje chenweiliang_tbl nėra atitinkamos chenweiliang_author lauko reikšmės.


JOIN naudojimas PHP scenarijuje

Funkcija mysqli_query() PHP naudojama SQL sakiniams vykdyti. Galite naudoti tą patį SQL sakinį, kaip nurodyta aukščiau, kaip funkcijos mysqli_query() parametrą.

Išbandykite šį pavyzdį:

MySQL ORDER BY testas:

<?
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 tinklaraštis ( https://www.chenweiliang.com/ ) pasidalino „MySQL duomenų bazės vidinis prisijungimas prie kelių lentelių? left Left Join Usage Efficiency“, tai jums padės.

Kviečiame pasidalinti šio straipsnio nuoroda:https://www.chenweiliang.com/cwl-488.html

Sveiki atvykę į Chen Weiliang tinklaraščio Telegram kanalą, kad gautumėte naujausius atnaujinimus!

🔔 Būkite pirmas, kuris kanalo viršaus kataloge gaus vertingą „ChatGPT turinio rinkodaros AI įrankio naudojimo vadovą“! 🌟
📚 Šis vadovas turi didžiulę vertę, 🌟Tai reta galimybė, nepraleiskite jos! ⏰⌛💨
Dalinkitės ir like jei patiko!
Jūsų dalijimasis ir paspaudimai „Patinka“ yra mūsų nuolatinė motyvacija!

 

发表 评论

Jūsų el. Pašto adresas nebus paskelbtas. Naudojami privalomi laukai * Etiketė

slinkite į viršų