MySQL маалымат базасы ички кошулуу көп үстөл колдонуу? сол сол кошулуу колдонуу натыйжалуулугу

MySQL маалымат базасыБир нече таблицалар менен ички бириктирүүнү кантип колдонсо болот? сол сол кошулуу колдонуу натыйжалуулугу

MySQL Байланыштарды колдонуу

Мурунку бөлүмдөрдө биз бир таблицадагы маалыматтарды окууну үйрөндүк, бул салыштырмалуу жөнөкөй, бирок реалдуу тиркемелерде көп учурда бир нече маалымат таблицаларынан маалыматтарды окуу керек болот.

Бул бөлүмдө биз эки же андан көп таблицалардагы маалыматтарды суроо үчүн MySQL'тин JOINди кантип колдонууну тааныштырабыз.

Бир нече таблица сурамдарына кошулуу үчүн SELECT, UPDATE жана DELETE билдирүүлөрүндө Mysql'дин JOIN колдонсоңуз болот.

JOIN функциялары боюнча болжол менен төмөнкү үч категорияга бөлүнөт:

  • INNER JOIN (ички кошулуу же эквиваленттүү кошулуу): Эки таблицадагы талаа дал келген мамилелердин жазууларын алыңыз.
  • LEFT JOIN (солго кошулуу):Оң таблицада тиешелүү жазуулар жок болсо да, сол таблицадагы бардык жазууларды алыңыз.
  • ОҢ КОШУЛУУ (оңго кошулуу): LEFT JOINден айырмаланып, ал оң жадыбалдагы бардык жазууларды алуу үчүн колдонулат, ал тургай, сол жадыбалда тиешелүү жазуулар жок болсо да.

Буйрук тилкесинде INNER JOIN колдонуу

Бизде chenweiliang маалымат базасында tcount_tbl жана chenweiliang_tbl деген эки таблица бар. Эки маалымат таблицасындагы маалыматтар төмөнкүдөй:

Instance

Төмөнкү мисалдарды колдонуп көрүңүз:

Сыноо үлгүсү

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)

Кийинки биз MySQL колдонобузINNER JOIN (Сиз INNERди калтырып, JOIN колдонсоңуз болот, эффект бирдей)Жогорудагы эки таблицаны туташтыруу үчүн chenweiliang_tbl таблицасындагы жана tcount_tbl таблицасындагы бардык chenweiliang_author талааларына туура келген chenweiliang_count талаасынын маанилерин окуу үчүн:

ички 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)

Жогорудагы SQL билдирүүсү төмөнкүгө барабар:

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 КОШУУНУ СОЛ

MySQL сол кошулуу кошулуудан айырмаланат. MySQL LEFT JOIN оң жадыбалда тиешелүү маалыматтар жок болсо да, сол жактагы маалыматтар таблицасындагы бардык маалыматтарды окуйт.

Instance

Төмөнкү мисалды колдонуп көрүңүз chenweiliang_tbl сол жактагы үстөл,tcount_tbl Оң жактагы таблица үчүн MySQL 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)

LEFT JOIN жогорудагы мисалда колдонулат. Бул билдирүү оң жактагы tcount_tbl таблицасында тиешелүү chenweiliang_author талаасынын мааниси жок болсо да, сол жактагы chenweiliang_tbl маалымат таблицасындагы бардык тандалган талаа маалыматтарын окуйт.


MySQL ОҢГО КОШУЛУУ

MySQL RIGHT JOIN, сол жадыбалда тиешелүү маалыматтар жок болсо да, оң маалымат таблицасындагы бардык маалыматтарды окуйт.

Instance

Төмөнкү мисалды колдонуп көрүңүз chenweiliang_tbl сол жактагы үстөл,tcount_tbl Туура таблица үчүн MySQL RIGHT JOIN тиркемесин түшүнүңүз:

ТУУРА КОШУЛУУ

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 жогорудагы мисалда колдонулат. Бул билдирме chenweiliang_tbl сол жадыбалында тиешелүү chenweiliang_author талаасынын мааниси жок болсо да, tcount_tbl оң маалымат таблицасындагы бардык тандалган талаа маалыматтарын окуйт.


PHP скрипттеринде JOIN колдонуу

mysqli_query() функциясы PHPде SQL операторлорун аткаруу үчүн колдонулат.Сиз жогорудагы ошол эле SQL операторун mysqli_query() функциясынын параметри катары колдонсоңуз болот.

Төмөнкү мисалды колдонуп көрүңүз:

Сыноо боюнча MySQL ТАРТИП:

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

Hope Chen Weiliang блогу ( https://www.chenweiliang.com/ ) бөлүштү "MySQL маалымат базасында ички бириктирилген бир нече таблицаларды кантип колдонуу керек?" "Сол кошулууну колдонуунун натыйжалуулугу" сизге пайдалуу болот.

Бул макаланын шилтемесин бөлүшүүгө кош келиңиз:https://www.chenweiliang.com/cwl-488.html

Көбүрөөк жашыруун трюктарды ачуу үчүн🔑, биздин Telegram каналыбызга кошулуңуз!

Бөлүшүп, жакса лайк! Сиздин бөлүшүүлөрүңүз жана лайктарыңыз биздин туруктуу мотивациябыз!

 

发表 评论

Сиздин электрондук почта дарегиңиз жарыяланбайт. Милдеттүү талаалар колдонулат * 标注

Жылдыруу үчүн Top