Uso de varias táboas de unión interna da base de datos MySQL? esquerda esquerda eficiencia de uso unirse

Base de datos MySQLuso de varias mesas de unión interna? esquerda esquerda eficiencia de uso de unión

mysql uso de conexión

Nos capítulos anteriores, aprendemos a ler datos dunha táboa, o que é relativamente sinxelo, pero en aplicacións reais adoita ser necesario ler datos de varias táboas de datos.

Neste capítulo mostrarémosche como usar o JOIN de MySQL para consultar datos en dúas ou máis táboas.

Podes usar JOIN de Mysql nas instrucións SELECT, UPDATE e DELETE para unir consultas de varias táboas.

JOIN divídese aproximadamente nas seguintes tres categorías segundo a súa función:

  • INNER JOIN (unión interna ou equijoin): obtén rexistros con campos coincidentes en dúas táboas.
  • LEFT JOIN (unión á esquerda):Obtén todos os rexistros da táboa da esquerda, aínda que non haxa rexistros coincidentes na táboa da dereita.
  • RIGHT JOIN (unirse á dereita): Ao contrario de LEFT JOIN, úsase para obter todos os rexistros da táboa da dereita, aínda que non existan rexistros coincidentes correspondentes na táboa da esquerda.

Usando INNER JOIN no símbolo do sistema

Temos dúas táboas tcount_tbl e chenweiliang_tbl na base de datos de chenweiliang.Os datos das dúas táboas de datos son os seguintes:

exemplo

Proba os seguintes exemplos:

datos da instancia de proba

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)

A continuación usaremos MySQLINNER JOIN (tamén podes omitir INNER e usar JOIN, o efecto é o mesmo)Para conectar as dúas táboas anteriores para ler o valor do campo chenweiliang_count correspondente a todos os campos chenweiliang_author da táboa chenweiliang_tbl da táboa tcount_tbl:

ENTRADA INTERIOR

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)

A instrución SQL anterior é equivalente a:

cláusula 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 ESQUERIDO UNIRSE

MySQL left join é diferente da join. MySQL LEFT JOIN lerá todos os datos da táboa de datos da esquerda, aínda que a táboa da dereita non teña datos correspondentes.

exemplo

Proba os seguintes exemplos para chenweiliang_tbl para a mesa da esquerda,tcount_tbl Para a táboa correcta, entenda a aplicación de MySQL LEFT JOIN:

ÚNETE ESQUERDO

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)

No exemplo anterior, úsase LEFT JOIN. Esta instrución lerá todos os datos de campo seleccionados da táboa de datos chenweiliang_tbl á esquerda, aínda que non haxa un valor de campo correspondente de chenweiliang_author na táboa tcount_tbl da dereita.


MySQL RIGHT JOIN

MySQL RIGHT JOIN lerá todos os datos da táboa de datos da dereita, aínda que non haxa datos correspondentes na táboa da esquerda.

exemplo

Proba os seguintes exemplos para chenweiliang_tbl para a mesa da esquerda,tcount_tbl Para a táboa correcta, entenda a aplicación de MySQL RIGHT JOIN:

ÚNETE DEREITO

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 utilízase no exemplo anterior, esta instrución lerá todos os datos do campo seleccionado da táboa de datos dereita tcount_tbl, aínda que non haxa un valor de campo chenweiliang_author correspondente na táboa esquerda chenweiliang_tbl.


Usando JOIN no script PHP

A función mysqli_query() utilízase en PHP para executar instrucións SQL, pode usar a mesma instrución SQL anterior como parámetro da función mysqli_query().

Proba o seguinte exemplo:

MySQL ORDEN POR proba:

<?
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 de Hope Chen Weiliang ( https://www.chenweiliang.com/ ) compartiu "¿Uso de varias táboas da unión interna da base de datos MySQL? left Left Join Usage Efficiency", axudarache.

Benvido a compartir a ligazón deste artigo:https://www.chenweiliang.com/cwl-488.html

Benvido á canle de Telegram do blog de Chen Weiliang para recibir as últimas actualizacións.

🔔 Sexa o primeiro en obter a valiosa "Guía de uso da ferramenta de intelixencia artificial de marketing de contidos de ChatGPT" no directorio principal da canle. 🌟
📚 Esta guía contén un gran valor, 🌟Esta é unha oportunidade rara, non a perdas! ⏰⌛💨
Comparte e da like se che gusta!
O teu compartir e gústame son a nosa motivación continua!

 

发表 评论

O seu enderezo de correo electrónico non se publicará. Utilízanse os campos obrigatorios * Etiqueta

desprázate cara arriba