Použití vnitřního spojení databáze MySQL s více tabulkami? vlevo vlevo účinnost využití připojení

MySQL databázevnitřní spojení použití více tabulek? vlevo vlevo účinnost využití spojení

Mysql použití spojení

V předchozích kapitolách jsme se naučili číst data z jedné tabulky, což je poměrně jednoduché, ale v reálných aplikacích je často nutné číst data z více datových tabulek.

V této kapitole vám ukážeme, jak používat MySQL JOIN k dotazování na data ve dvou nebo více tabulkách.

Ke spojení vícetabulkových dotazů můžete použít JOIN Mysql v příkazech SELECT, UPDATE a DELETE.

JOIN je zhruba rozdělen do následujících tří kategorií podle své funkce:

  • INNER JOIN (vnitřní spojení nebo equijoin): Získejte záznamy se shodnými poli ve dvou tabulkách.
  • LEFT JOIN (levé připojení):Získejte všechny záznamy v levé tabulce, i když v pravé tabulce nejsou žádné odpovídající záznamy.
  • RIGHT JOIN (pravé připojení): Na rozdíl od LEFT JOIN se používá k získání všech záznamů v pravé tabulce, i když v levé tabulce nejsou žádné odpovídající odpovídající záznamy.

Pomocí INNER JOIN v příkazovém řádku

V databázi chenweiliang máme dvě tabulky tcount_tbl a chenweiliang_tbl.Údaje dvou datových tabulek jsou následující:

Instance

Zkuste následující příklady:

data testovací instance

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ále použijeme MySQLINNER JOIN (můžete také vynechat INNER a použít JOIN, efekt je stejný)Chcete-li propojit výše uvedené dvě tabulky a přečíst hodnotu pole chenweiliang_count odpovídající všem polím chenweiliang_author v tabulce chenweiliang_tbl v tabulce tcount_tbl:

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)

Výše uvedený příkaz SQL je ekvivalentní:

klauzule WHERE

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

Levé připojení MySQL se liší od připojení. MySQL LEFT JOIN přečte všechna data v levé datové tabulce, i když pravá tabulka nemá žádná odpovídající data.

Instance

Vyzkoušejte následující příklady chenweiliang_tbl pro levý stůl,tcount_tbl Pro pravou tabulku pochopte aplikaci MySQL LEFT JOIN:

LEVÉ SPOJENÍ

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)

Ve výše uvedeném příkladu je použito LEFT JOIN a tento příkaz přečte všechna vybraná data pole datové tabulky chenweiliang_tbl vlevo, i když v tabulce tcount_tbl vpravo není žádná odpovídající hodnota pole chenweiliang_author.


MySQL SPRÁVNÉ PŘIPOJENÍ SE

MySQL RIGHT JOIN přečte všechna data v datové tabulce vpravo, i když v tabulce vlevo žádná odpovídající data nejsou.

Instance

Vyzkoušejte následující příklady chenweiliang_tbl pro levý stůl,tcount_tbl Pro správnou tabulku pochopte aplikaci MySQL RIGHT JOIN:

SPRÁVNÉ PŘIPOJENÍ SE

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 se používá ve výše uvedeném příkladu, tento příkaz přečte všechna vybraná data pole pravé datové tabulky tcount_tbl, i když v levé tabulce chenweiliang_tbl není žádná odpovídající hodnota pole chenweiliang_author.


Použití JOIN v PHP skriptu

Funkce mysqli_query() se v PHP používá k provádění příkazů SQL, jako parametr funkce mysqli_query() můžete použít stejný příkaz SQL jako výše.

Zkuste následující příklad:

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

Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) sdílené „Využití více tabulek vnitřního spojení databáze MySQL? vlevo vlevo Join Usage Efficiency“, pomůže vám to.

Vítejte u sdílení odkazu na tento článek:https://www.chenweiliang.com/cwl-488.html

Vítejte na telegramovém kanálu blogu Chen Weiliang, kde získáte nejnovější aktualizace!

🔔 Buďte první, kdo získá cenný „Průvodce používáním nástroje AI pro obsahový marketing ChatGPT“ v hlavním adresáři kanálu! 🌟
📚 Tento průvodce má obrovskou hodnotu, 🌟Toto je vzácná příležitost, nenechte si ji ujít! ⏰⌛💨
Sdílejte a lajkujte, pokud se vám líbí!
Vaše sdílení a lajky jsou naší neustálou motivací!

 

发表 评论

Vaše e-mailová adresa nebude zveřejněna. 必填 项 已 用 * 标注

滚动 到 顶部