Директориум за статии
Како да се користи внатрешно спојување со повеќе табели во MySQL база на податоци ? Колкава е ефикасноста на левото спојување?
Mysql Употреба на врски
Во претходните поглавја научивме како да читаме податоци од една табела, што е релативно едноставно, но во реални апликации често е потребно да се читаат податоци од повеќе табели со податоци.
Во ова поглавје, ќе ве запознаеме како да го користите JOIN на MySQL за барање податоци во две или повеќе табели.
Можете да го користите JOIN на Mysql во изјавите SELECT, UPDATE и DELETE за да се придружите на повеќе барања за табели.
JOIN е грубо поделен на следните три категории според неговите функции:
- ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ (внатрешно спојување или еквивалентно спојување): Добијте записи за односите со совпаѓање на полињата во две табели.
- LEFT JOIN (лево приклучување):Добијте ги сите записи во левата табела, дури и ако нема соодветни записи што се совпаѓаат во десната табела.
- ПРИКЛУЧУВАЈ ДЕСНО (десно приклучување): Спротивно на LEFT JOIN, се користи за добивање на сите записи во десната табела, дури и ако нема соодветни записи што се совпаѓаат во левата табела.
Користење на ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ во командната линија
Имаме две табели tcount_tbl и chenweiliang_tbl во базата на податоци chenweiliang. Податоците во двете табели со податоци се како што следува:
Инстанца
Обидете се со следниве примери:
Податоци за тест примери
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)
Потоа, ќе го користиме MySQL INNER JOIN (можете да го изоставите INNER и да го користите JOIN, ефектот е ист) за да ги споиме двете табели погоре и да ги прочитаме вредностите на полето chenweiliang_author во табелата chenweiliang_tbl и нивните соодветни вредности на полето chenweiliang_count во табелата tcount_tbl:
ВНАТРЕШНИ ПРИЈАВИ
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)
Горенаведената SQL изјава е еквивалентна на:
КАДЕ клаузула
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 го напушти придружувањето
Левото придружување на MySQL се разликува од придружувањето. MySQL LEFT JOIN ќе ги прочита сите податоци во левата табела со податоци, дури и ако нема соодветни податоци во десната табела.
Инстанца
Обидете се со следниов пример, користејќи chenweiliang_tbl како лева табела и tcount_tbl како десна табела, за да ја разберете примената на MySQL 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)
LEFT JOIN се користи во горниот пример.Оваа изјава ќе ги прочита сите избрани податоци од полето во табелата со податоци chenweiliang_tbl лево, дури и ако нема соодветна вредност на полето chenweiliang_author во табелата tcount_tbl на десната страна.
MySQL ПРИДРУЖИ СЕ ПРАВО
MySQL RIGHT JOIN ќе ги прочита сите податоци во десната табела со податоци, дури и ако нема соодветни податоци во левата табела.
Инстанца
Обидете се со следниов пример, користејќи chenweiliang_tbl како лева табела и tcount_tbl како десна табела, за да ја разберете примената на MySQL RIGHT 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 се користи во горниот пример.Оваа изјава ќе ги прочита сите избрани податоци од полето во десната табела со податоци tcount_tbl, дури и ако нема соодветна вредност на полето chenweiliang_author во левата табела chenweiliang_tbl.
Користење JOIN во PHP скрипти
Функцијата mysqli_query() се користи во PHP за извршување на SQL изјави.Можете да ја користите истата изјава SQL погоре како параметар на функцијата mysqli_query().
Обидете се со следниот пример:
MySQL ПОРАЧНИК ПО тест:
<?
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);
?>Се надеваме дека статијата „Користење на внатрешно спојување на MySQL базата на податоци низ повеќе табели? Ефикасност на левото спојување“ споделена на блогот на Чен Вејлијанг ( https://www.chenweiliang.com/ ) ќе ви биде корисна.
Слободно споделете го линкот до овој напис: https://www.chenweiliang.com/cwl-488.html
