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

MySQL veritabanıiç birleştirme çoklu masa kullanımı? sol sol birleştirme kullanım verimliliği

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)

Daha sonra MySQL kullanacağızINNER JOIN (INNER'ı atlayabilir ve JOIN'i kullanabilirsiniz, efekt aynıdır)tcount_tbl tablosundaki chenweiliang_tbl tablosundaki tüm chenweiliang_author alanlarına karşılık gelen chenweiliang_count alanının değerini okumak üzere yukarıdaki iki tabloyu bağlamak için:

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

Aşağıdaki örnekleri deneyin chenweiliang_tbl sol masa için,tcount_tbl Doğru tablo için MySQL LEFT JOIN uygulamasını anlayın:

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

Aşağıdaki örnekleri deneyin chenweiliang_tbl sol masa için,tcount_tbl Doğru tablo için MySQL RIGHT JOIN uygulamasını anlayın:

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

Umut Chen Weiliang Blogu ( https://www.chenweiliang.com/ ) paylaşılan "MySQL veritabanı iç birleşiminin çoklu tablo kullanımı? Sol Birleştirme Kullanım Verimliliği", size yardımcı olacaktır.

Bu makalenin bağlantısını paylaşmaya hoş geldiniz:https://www.chenweiliang.com/cwl-488.html

En son güncellemeleri almak için Chen Weiliang'ın blogunun Telegram kanalına hoş geldiniz!

🔔 Kanalın üst dizinindeki değerli "ChatGPT İçerik Pazarlama Yapay Zeka Aracı Kullanım Kılavuzunu" alan ilk kişi olun! 🌟
📚 Bu rehber çok büyük değer içeriyor, 🌟Bu nadir bir fırsat, kaçırmayın! ⏰⌛💨
İsterseniz paylaşın ve beğenin!
Paylaşımlarınız ve beğenileriniz bizim sürekli motivasyonumuz!

 

发表 评论

E-posta hesabınız yayımlanmayacak. 必填 项 已 用 * 标注

yukarı kaydır