MySQL andmebaasi sisemine liituda mitme tabeli kasutamine? vasak vasak liitumise kasutamise tõhusus

Kuidas kasutada MySQL-i andmebaasis mitme tabeliga sisemist liitumist ? Milline on vasakpoolse liitumise efektiivsus?

Mysql ühenduse kasutamine

Eelmistes peatükkides oleme õppinud, kuidas lugeda andmeid ühest tabelist, mis on suhteliselt lihtne, kuid reaalsetes rakendustes on sageli vaja andmeid lugeda mitmest andmetabelist.

Selles peatükis näitame teile, kuidas kasutada MySQL-i JOIN-i kahe või enama tabelis olevate andmete päringute tegemiseks.

Mitme tabeli päringute ühendamiseks saate kasutada Mysql-i JOIN-i lausetes SELECT, UPDATE ja DELETE.

JOIN jaguneb selle funktsiooni järgi laias laastus järgmisesse kolme kategooriasse:

  • INNER JOIN (sisemine liitumine või equijoin): hankige kahes tabelis vastavate väljadega kirjed.
  • LEFT JOIN (vasak liitumine):Hankige kõik vasakpoolses tabelis olevad kirjed, isegi kui paremas tabelis pole sobivaid kirjeid.
  • RIGHT JOIN (parem liitumine): Vastupidiselt LEFT JOIN-ile kasutatakse seda kõigi kirjete saamiseks paremasse tabelisse, isegi kui vasakpoolses tabelis pole vastavaid kirjeid.

INNER JOIN kasutamine käsuviibas

Meil on chenweiliangi andmebaasis kaks tabelit tcount_tbl ja chenweiliang_tbl.Kahe andmetabeli andmed on järgmised:

Esimese astme

Proovige järgmisi näiteid.

testeksemplari andmed

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)

Järgmisena kasutame MySQL-i INNER JOIN-i (võite INNER-i välja jätta ja kasutada JOIN-i, efekt on sama), et ühendada kaks ülaltoodud tabelit ja lugeda chenweiliang_tbl tabeli chenweiliang_author välja väärtused ja nende vastavad chenweiliang_count välja väärtused tcount_tbl tabelist:

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)

Ülaltoodud SQL-lause on samaväärne:

KUS klausel

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 LÄKS LIITUMINE

MySQL vasak liitumine erineb liitumisest. MySQL LEFT JOIN loeb kõik vasakpoolses andmetabelis olevad andmed, isegi kui parempoolses tabelis pole vastavaid andmeid.

Esimese astme

MySQL LEFT JOIN rakenduse mõistmiseks proovige järgmist näidet, kasutades vasakpoolse tabelina chenweiliang_tbl ja parempoolse tabelina tcount_tbl :

VASAK LIITU

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)

Ülaltoodud näites kasutatakse LEFT JOIN ja see lause loeb kõik vasakpoolse andmetabeli chenweiliang_tbl valitud väljaandmed, isegi kui parempoolses tabelis tcount_tbl pole chenweiliang_author vastavat välja väärtust.


MySQL RIGHT JOIN

MySQL RIGHT JOIN loeb kõik andmed paremal asuvas andmetabelis, isegi kui vasakpoolses tabelis pole vastavaid andmeid.

Esimese astme

MySQL RIGHT JOIN rakenduse mõistmiseks proovige järgmist näidet, kasutades vasakpoolse tabelina chenweiliang_tbl ja parempoolse tabelina tcount_tbl :

ÕIGE LIITUMINE

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)

Ülaltoodud näites kasutatakse RIGHT JOIN, see lause loeb kõik valitud välja andmed parempoolsest andmetabelist tcount_tbl, isegi kui vasakpoolses tabelis chenweiliang_tbl pole vastavat välja väärtust chenweiliang_author.


JOIN kasutamine PHP skriptis

Funktsiooni mysqli_query() kasutatakse PHP-s SQL-lausete täitmiseks, funktsiooni mysqli_query() parameetrina saate kasutada sama SQL-lauset nagu ülal.

Proovige järgmist näidet.

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

发表 评论

您的邮箱地址不会被公开.必填项已用*标注

Leidke Top