Katalog artykułów
Baza danych MySQLwewnętrzne połączenie wielostolikowe? Efektywność wykorzystania lewego lewego połączenia
Mysql korzystanie z połączenia
W poprzednich rozdziałach nauczyliśmy się czytać dane z jednej tabeli, co jest stosunkowo proste, ale w rzeczywistych aplikacjach często konieczne jest odczytywanie danych z wielu tabel danych.
W tym rozdziale pokażemy, jak używać JOIN w MySQL do tworzenia zapytań o dane w dwóch lub więcej tabelach.
Możesz użyć Mysql's JOIN w instrukcjach SELECT, UPDATE i DELETE, aby połączyć kwerendy wielotabelowe.
JOIN jest z grubsza podzielony na następujące trzy kategorie w zależności od swojej funkcji:
- INNER JOIN (sprzężenie wewnętrzne lub equijoin): Pobierz rekordy z pasującymi polami w dwóch tabelach.
- LEFT JOIN (lewe sprzężenie):Pobierz wszystkie rekordy z lewej tabeli, nawet jeśli w prawej tabeli nie ma pasujących rekordów.
- RIGHT JOIN (prawe łączenie): W przeciwieństwie do LEFT JOIN, służy do pobrania wszystkich rekordów z prawej tabeli, nawet jeśli w lewej tabeli nie ma odpowiednich pasujących rekordów.
Używanie INNER JOIN w wierszu polecenia
W bazie danych chenweiliang mamy dwie tabele tcount_tbl i chenweiliang_tbl.Dane z dwóch tabel danych są następujące:
Instancja
Wypróbuj następujące przykłady:
dane instancji testowej
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)
Następnie użyjemy MySQLINNER JOIN (możesz też pominąć INNER i użyć JOIN, efekt jest taki sam)Aby połączyć powyższe dwie tabele, aby odczytać wartość pola chenweiliang_count odpowiadającą wszystkim polom chenweiliang_author w tabeli chenweiliang_tbl w tabeli 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)
Powyższa instrukcja SQL jest odpowiednikiem:
klauzula GDZIE
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)
DOŁĄCZ DO MYSQL W LEWO
Lewe sprzężenie MySQL różni się od sprzężenia. MySQL LEFT JOIN odczyta wszystkie dane z lewej tabeli danych, nawet jeśli w prawej tabeli nie ma odpowiadających danych.
Instancja
Wypróbuj poniższe przykłady, aby chenweiliang_tbl dla lewego stołu,tliczba_tbl Aby uzyskać odpowiednią tabelę, zapoznaj się z zastosowaniem 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)
W powyższym przykładzie użyto LEFT JOIN, a ta instrukcja odczyta wszystkie wybrane dane pola tabeli danych chenweiliang_tbl po lewej stronie, nawet jeśli nie ma odpowiadającej wartości pola chenweiliang_author w tabeli tcount_tbl po prawej stronie.
DOŁĄCZ DO MYSQL
MySQL RIGHT JOIN odczyta wszystkie dane w tabeli danych po prawej stronie, nawet jeśli nie ma odpowiadających danych w tabeli po lewej stronie.
Instancja
Wypróbuj poniższe przykłady, aby chenweiliang_tbl dla lewego stołu,tliczba_tbl Aby uzyskać odpowiednią tabelę, zapoznaj się z zastosowaniem MySQL RIGHT JOIN:
WŁAŚCIWE DOŁĄCZENIE
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)
W powyższym przykładzie użyto RIGHT JOIN, ta instrukcja odczyta wszystkie wybrane dane pola z prawej tabeli danych tcount_tbl, nawet jeśli nie ma odpowiadającej wartości pola chenweiliang_author w lewej tabeli chenweiliang_tbl.
Używanie JOIN w skrypcie PHP
Funkcja mysqli_query() jest używana w PHP do wykonywania instrukcji SQL, możesz użyć tej samej instrukcji SQL co powyżej jako parametru funkcji mysqli_query().
Wypróbuj następujący przykład:
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); ?>
Nadzieja Chen Weiliang Blog ( https://www.chenweiliang.com/ ) współdzielone "Wielotablicowe użycie wewnętrznego sprzężenia bazy danych MySQL? left Left Join Efektywność użytkowania”, to ci pomoże.
Zapraszamy do udostępnienia linku do tego artykułu:https://www.chenweiliang.com/cwl-488.html
Witamy na kanale Telegram bloga Chen Weiliang, aby uzyskać najnowsze aktualizacje!
📚 Ten przewodnik zawiera ogromną wartość, 🌟To rzadka okazja, nie przegap jej! ⏰⌛💨
Udostępnij i polub, jeśli chcesz!
Twoje udostępnianie i polubienia to nasza ciągła motywacja!