MySQL veritabanı iç çoklu tablo kullanımına katılmak mı? sol sol birleştirme kullanım verimliliği

MySQL veritabanında birden fazla tabloyla inner join nasıl kullanılır ? Left join'in verimliliği nedir?

mySQL bağlantı kullanımı

Önceki bölümlerde, nispeten basit olan bir tablodan veri okumayı öğrendik, ancak gerçek uygulamalarda genellikle birden çok veri tablosundan veri okumak gerekir.

Bu bölümde, iki veya daha fazla tablodaki verileri sorgulamak için MySQL'in JOIN'ini nasıl kullanacağınızı göstereceğiz.

Çok tablolu sorguları birleştirmek için SELECT, UPDATE ve DELETE deyimlerinde Mysql'in JOIN'ini kullanabilirsiniz.

JOIN, işlevine göre kabaca aşağıdaki üç kategoriye ayrılır:

  • INNER JOIN (iç birleşim veya equijoin): İki tabloda eşleşen alanlara sahip kayıtları alın.
  • LEFT JOIN (sol birleşim):Sağdaki tabloda eşleşen kayıt olmasa bile soldaki tablodaki tüm kayıtları alın.
  • RIGHT JOIN (sağ birleştirme): LEFT JOIN'in aksine, soldaki tabloda eşleşen kayıt olmasa bile tüm kayıtları sağdaki tabloya almak için kullanılır.

Komut İsteminde INNER JOIN'i Kullanma

Chenweiliang veritabanında tcount_tbl ve chenweiliang_tbl olmak üzere iki tablomuz var.İki veri tablosunun verileri aşağıdaki gibidir:

Örnek

Aşağıdaki örnekleri deneyin:

test örneği verileri

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)

Ardından, yukarıdaki iki tabloyu birleştirmek ve chenweiliang_tbl tablosundaki chenweiliang_author alanının değerlerini ve tcount_tbl tablosundaki karşılık gelen chenweiliang_count alanının değerlerini okumak için MySQL'in INNER JOIN işlevini kullanacağız (INNER yerine JOIN de kullanabilirsiniz, sonuç aynıdır) .

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)

Yukarıdaki SQL ifadesi şuna eşdeğerdir:

WHERE yan tümcesi

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 SOL BİRLEŞTİR

MySQL sol birleştirme, birleştirmeden farklıdır. MySQL LEFT JOIN, sağdaki tabloda karşılık gelen veri olmasa bile sol veri tablosundaki tüm verileri okuyacaktır.

Örnek

MySQL LEFT JOIN'in uygulamasını anlamak için, sol tablo olarak chenweiliang_tbl'yi ve sağ tablo olarak tcount_tbl'yi kullanarak aşağıdaki örneği deneyin :

SOL KATILIN

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)

Yukarıdaki örnekte, LEFT JOIN kullanılır ve bu ifade, sağdaki tcount_tbl tablosunda chenweiliang_author'a karşılık gelen bir alan değeri olmasa bile, soldaki chenweiliang_tbl veri tablosunun tüm seçili alan verilerini okuyacaktır.


MySQL DOĞRU BİRLEŞTİRME

MySQL RIGHT JOIN, soldaki tabloda karşılık gelen veri olmasa bile sağdaki veri tablosundaki tüm verileri okuyacaktır.

Örnek

MySQL RIGHT JOIN'in uygulamasını anlamak için, sol tablo olarak chenweiliang_tbl'yi ve sağ tablo olarak tcount_tbl'yi kullanarak aşağıdaki örneği deneyin :

DOĞRU BİRLEŞTİR

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)

Yukarıdaki örnekte RIGHT JOIN kullanılmıştır, bu ifade, soldaki chenweiliang_tbl tablosunda karşılık gelen chenweiliang_author alan değeri olmasa bile, sağ veri tablosu tcount_tbl'nin seçilen tüm alan verilerini okuyacaktır.


PHP betiğinde JOIN kullanma

mysqli_query() işlevi PHP'de SQL deyimlerini yürütmek için kullanılır, yukarıdakiyle aynı SQL deyimini mysqli_query() işlevine parametre olarak kullanabilirsiniz.

Aşağıdaki örneği deneyin:

MySQL SİPARİŞ TARAFINDAN 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);
?>

发表 评论

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

En gidin