Eolaire Eolaire
Conas úsáid a bhaint as inner join le iltháblaí i mbunachar sonraí MySQL ? Cad é éifeachtúlacht an chlé join?
MySQL Úsáid naisc
Sna caibidlí roimhe seo, tá muid tar éis foghlaim conas sonraí a léamh ó tábla amháin, atá sách simplí, ach i bhfeidhmchláir fíor is minic is gá sonraí a léamh ó tháblaí sonraí iolracha.
Sa chaibidil seo, cuirfimid in iúl duit conas MySQL's JOIN a úsáid chun sonraí a fhiosrú in dhá thábla nó níos mó.
Is féidir leat JOIN Mysql a úsáid i ráitis ROGHNAITHE, NUASHONRUITHE agus Scriosadh chun dul le ceisteanna tábla iolracha.
Tá JOIN roinnte go garbh sna trí chatagóir seo a leanas de réir a fheidhmeanna:
- ISTEACH INNER (ceangal inmheánach, nó páirt chomhionann): Faigh taifid ar chaidreamh meaitseála allamuigh in dhá tábla.
- JOIN LEFT (ceangailte ar chlé):Faigh na taifid go léir sa tábla ar chlé, fiú mura bhfuil aon taifid chomhfhreagracha sa tábla ar dheis.
- CEANN ISTEACH (páirteach ar dheis): Murab ionann agus LEAFT JOIN, úsáidtear é chun gach taifead sa tábla ar dheis a fháil, fiú mura bhfuil aon taifid chomhfhreagracha sa tábla ar chlé.
Ag baint úsáide as JOIN INNER sa ordú go pras
Tá dhá thábla againn tcount_tbl agus chenweiliang_tbl sa bhunachar sonraí chenweiliang. Is iad seo a leanas na sonraí sa dá thábla sonraí:
sampla
Bain triail as na samplaí seo a leanas:
Sonraí ásc tástála
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)
Ansin, úsáidfimid INNER JOIN MySQL (is féidir leat INNER a fhágáil ar lár agus JOIN a úsáid, tá an éifeacht mar a chéile) chun an dá thábla thuas a cheangal le chéile agus luachanna an réimse chenweiliang_author sa tábla chenweiliang_tbl agus a luachanna réimse chenweiliang_count comhfhreagracha sa tábla tcount_tbl a léamh:
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)
Tá an ráiteas SQL thuas comhionann le:
CÁS clásal
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)
Glac páirt i MySQL ar chlé
Tá ceangal fágtha MySQL difriúil leis an gcomhcheangal. Léifidh MySQL LEFT JOIN na sonraí go léir sa tábla sonraí ar chlé, fiú mura bhfuil aon sonraí comhfhreagracha sa tábla ar dheis.
sampla
Bain triail as an sampla seo a leanas, ag baint úsáide as chenweiliang_tbl mar an tábla ar chlé agus tcount_tbl mar an tábla ar dheis, chun cur i bhfeidhm MySQL LEFT JOIN a thuiscint:
AR CHÉILE
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)
Úsáidtear LEFT JOIN sa sampla thuas. Léifidh an ráiteas seo na sonraí réimse roghnaithe go léir sa tábla sonraí chenweiliang_tbl ar chlé, fiú mura bhfuil luach réimse comhfhreagrach chenweiliang_author sa tábla tcount_tbl ar dheis.
Ceangal le MySQL CEART
Léifidh MySQL RIGHT JOIN na sonraí go léir sa tábla sonraí ceart, fiú mura bhfuil aon sonraí comhfhreagracha sa tábla ar chlé.
sampla
Bain triail as an sampla seo a leanas, ag baint úsáide as chenweiliang_tbl mar an tábla ar chlé agus tcount_tbl mar an tábla ar dheis, chun cur i bhfeidhm MySQL RIGHT JOIN a thuiscint:
CEART 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)
Úsáidtear RIGHT JOIN sa sampla thuas. Léifidh an ráiteas seo na sonraí réimse roghnaithe go léir sa tábla sonraí ar dheis tcount_tbl, fiú mura bhfuil luach réimse comhfhreagrach chenweiliang_author sa tábla ar chlé chenweiliang_tbl.
Ag baint úsáide as JOIN i scripteanna PHP
Úsáidtear an fheidhm mysqli_query() i PHP chun ráitis SQL a rith. Is féidir leat an ráiteas SQL céanna thuas a úsáid mar pharaiméadar na feidhme mysqli_query().
Bain triail as an sampla seo a leanas:
MySQL ORDÚ DE RÉIR tástála:
<?
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);
?>Tá súil agam go mbeidh an t-alt "Using MySQL Database inner join across multiple tables? Efficiency of left join" atá roinnte ar bhlag Chen Weiliang ( https://www.chenweiliang.com/ ) ina chuidiú duit.
Ná bíodh drogall ort nasc an ailt seo a roinnt: https://www.chenweiliang.com/cwl-488.html
