MySQL ma'lumotlar bazasining ichki qo'shilishi ko'p jadvalli foydalanishmi? chap chapga qo'shilishdan foydalanish samaradorligi

MySQL ma'lumotlar bazasiichki birlashma ko'p jadval foydalanish? chap chapga qo'shilishdan foydalanish samaradorligi

Mysql ulanishdan foydalanish

Oldingi boblarda biz bir jadvaldagi ma'lumotlarni o'qishni o'rgandik, bu nisbatan sodda, lekin real ilovalarda ko'pincha bir nechta ma'lumotlar jadvallaridagi ma'lumotlarni o'qish kerak bo'ladi.

Ushbu bobda biz sizga MySQL-ning JOIN-dan ikki yoki undan ortiq jadvaldagi ma'lumotlarni so'rash uchun qanday foydalanishni ko'rsatamiz.

Ko'p jadvalli so'rovlarga qo'shilish uchun Mysql-ning JOIN-dan SELECT, UPDATE va DELETE iboralarida foydalanishingiz mumkin.

JOIN funktsiyasiga ko'ra taxminan quyidagi uchta toifaga bo'linadi:

  • INNER JOIN (ichki qo'shilish yoki teng qo'shilish): Ikki jadvaldagi mos keladigan maydonlar bilan yozuvlarni oling.
  • LEFT JOIN (chapga qo'shilish):O'ng jadvalda mos yozuvlar bo'lmasa ham, chap jadvaldagi barcha yozuvlarni oling.
  • O'ngga qo'shilish (o'ngga qo'shilish): LEFT JOIN dan farqli o'laroq, chap jadvalda mos keladigan yozuvlar bo'lmasa ham, o'ng jadvaldagi barcha yozuvlarni olish uchun ishlatiladi.

Buyruqlar satrida INNER JOIN dan foydalanish

Chenweiliang ma'lumotlar bazasida ikkita tcount_tbl va chenweiliang_tbl jadvallari mavjud.Ikki ma'lumot jadvalining ma'lumotlari quyidagicha:

Misol

Quyidagi misollarni sinab ko'ring:

sinov namunasi ma'lumotlari

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)

Keyinchalik MySQL dan foydalanamizINNER JOIN (shuningdek, siz INNERni qoldirib, JOIN dan foydalanishingiz mumkin, effekt bir xil)Tcount_tbl jadvalidagi chenweiliang_tbl jadvalidagi barcha chenweiliang_author maydonlariga mos keladigan chenweiliang_count maydonining qiymatini o'qish uchun yuqoridagi ikkita jadvalni ulash uchun:

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)

Yuqoridagi SQL bayonoti quyidagilarga teng:

WHERE bandi

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 CHIQISHNI CHAPLADI

MySQL chap qo'shilish qo'shilishdan farq qiladi. MySQL LEFT JOIN chap ma'lumotlar jadvalidagi barcha ma'lumotlarni o'qiydi, hatto o'ng jadvalda tegishli ma'lumotlar bo'lmasa ham.

Misol

Quyidagi misollarni sinab ko'ring chenweiliang_tbl chap stol uchun,tcount_tbl To'g'ri jadval uchun MySQL LEFT JOIN ilovasini tushuning:

LEFT JOIN

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)

Yuqoridagi misolda LEFT JOIN ishlatiladi va bu ibora chapdagi chenweiliang_tbl ma'lumotlar jadvalining barcha tanlangan maydon ma'lumotlarini o'qiydi, hatto o'ngdagi tcount_tbl jadvalida chenweiliang_author ning tegishli maydon qiymati bo'lmasa ham.


MySQL TO'G'RI QO'SHILING

MySQL RIGHT JOIN o'ngdagi ma'lumotlar jadvalidagi barcha ma'lumotlarni o'qiydi, hatto chapdagi jadvalda tegishli ma'lumotlar bo'lmasa ham.

Misol

Quyidagi misollarni sinab ko'ring chenweiliang_tbl chap stol uchun,tcount_tbl To'g'ri jadval uchun MySQL RIGHT JOIN ilovasini tushuning:

TO'G'RI QO'SHILING

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)

Yuqoridagi misolda RIGHT JOIN ishlatiladi, bu ibora tcount_tbl o'ng ma'lumotlar jadvalining barcha tanlangan maydon ma'lumotlarini o'qiydi, hatto chenweiliang_tbl chap jadvalida mos keladigan chenweiliang_author maydoni qiymati bo'lmasa ham.


PHP skriptida JOIN dan foydalanish

Mysqli_query() funksiyasi PHP da SQL operatorlarini bajarish uchun ishlatiladi, siz mysqli_query() funksiyasining parametri sifatida yuqoridagi SQL operatoridan foydalanishingiz mumkin.

Quyidagi misolni sinab ko'ring:

MySQL-ni sinov bo'yicha BUYURTISH:

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

发表 评论

Sizning elektron pochta manzilingiz nashr etilmaydi. 必填 项 已 用 * Yorliq

Top o'ting