Məqalələr kataloqu
MySQL verilənlər bazasında birdən çox cədvəllə daxili birləşmədən necə istifadə olunur ? Sol birləşmənin səmərəliliyi nədir?
mysql əlaqənin istifadəsi
Əvvəlki fəsillərdə biz bir cədvəldən verilənləri oxumağı öyrəndik, bu nisbətən sadədir, lakin real tətbiqlərdə çox vaxt çoxlu verilənlər cədvəlindən məlumatları oxumaq lazımdır.
Bu fəsildə iki və ya daha çox cədvəldəki məlumatları sorğulamaq üçün MySQL-in JOIN-dən necə istifadə edəcəyinizi sizə göstərəcəyik.
Çox cədvəlli sorğulara qoşulmaq üçün SELECT, UPDATE və DELETE ifadələrində Mysql-in JOIN funksiyasından istifadə edə bilərsiniz.
JOIN funksiyasına görə təxminən aşağıdakı üç kateqoriyaya bölünür:
- INNER JOIN (daxili birləşmə və ya bərabər birləşmə): İki cədvəldə uyğun sahələri olan qeydləri əldə edin.
- SOL QOŞULMA (soldan qoşulma):Sağ cədvəldə uyğun qeydlər olmasa belə, sol cədvəldəki bütün qeydləri əldə edin.
- SAĞ QOŞULMA (sağda qoşulma): LEFT JOIN-dan fərqli olaraq, sol cədvəldə uyğun gələn qeydlər olmasa belə, sağ cədvəldəki bütün qeydləri əldə etmək üçün istifadə olunur.
Komanda əmrində INNER JOIN-dan istifadə edin
Chenweiliang verilənlər bazasında tcount_tbl və chenweiliang_tbl adlı iki cədvəlimiz var.İki məlumat cədvəlinin məlumatları aşağıdakı kimidir:
Nümunə
Aşağıdakı nümunələri sınayın:
test nümunəsi məlumatları
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, yuxarıdakı iki cədvəli birləşdirmək və chenweiliang_tbl cədvəlindəki chenweiliang_author sahəsinin dəyərlərini və tcount_tbl cədvəlindəki onlara uyğun chenweiliang_count sahə dəyərlərini oxumaq üçün MySQL -in INNER JOIN funksiyasından istifadə edəcəyik (INNER funksiyasını buraxıb JOIN funksiyasından istifadə edə bilərsiniz, effekt eynidir) :
İNTER 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)
Yuxarıdakı SQL ifadəsi aşağıdakılara bərabərdir:
WHERE bəndi
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 QOŞULUŞDAN SOL
MySQL sol birləşmə birləşmədən fərqlidir. MySQL LEFT JOIN, sağ cədvəldə müvafiq məlumat olmasa belə, sol verilənlər cədvəlindəki bütün məlumatları oxuyacaq.
Nümunə
MySQL SOL JOIN tətbiqini başa düşmək üçün sol cədvəl kimi chenweiliang_tbl və sağ cədvəl kimi tcount_tbl istifadə edərək aşağıdakı nümunəni sınayın :
SOL QOŞUN
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)
Yuxarıdakı misalda LEFT JOIN istifadə olunur və bu ifadə, sağdakı tcount_tbl cədvəlində chenweiliang_author-un müvafiq sahə dəyəri olmasa belə, soldakı chenweiliang_tbl verilənlər cədvəlinin bütün seçilmiş sahə məlumatlarını oxuyacaq.
MySQL SAĞ QOŞULUN
MySQL RIGHT JOIN, soldakı cədvəldə müvafiq məlumat olmasa belə, sağdakı verilənlər cədvəlindəki bütün məlumatları oxuyacaq.
Nümunə
MySQL RIGHT JOIN tətbiqini başa düşmək üçün sol cədvəl kimi chenweiliang_tbl və sağ cədvəl kimi tcount_tbl istifadə edərək aşağıdakı nümunəni sınayın :
SAĞ QOŞULUN
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 yuxarıdakı misalda istifadə olunur, bu ifadə soldakı chenweiliang_tbl cədvəlində chenweiliang_author üçün müvafiq sahə dəyəri olmasa belə, sağdakı tcount_tbl verilənlər cədvəlinin bütün seçilmiş sahə məlumatlarını oxuyacaq.
PHP skriptində JOIN-dan istifadə
mysqli_query() funksiyası PHP-də SQL ifadələrini yerinə yetirmək üçün istifadə olunur, siz mysqli_query() funksiyasının parametri kimi yuxarıdakı SQL ifadəsindən istifadə edə bilərsiniz.
Aşağıdakı nümunəni sınayın:
MySQL SİPARİŞİ Sınaqla:
<?
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);
?>Ümid edirəm ki, Chen Weiliang-ın bloqunda ( https://www.chenweiliang.com/ ) paylaşılan "MySQL verilənlər bazasının daxili birləşməsindən birdən çox cədvəldə istifadə olunurmu? Sol birləşmənin effektivliyi" məqaləsi sizə faydalı olacaq.
Bu məqalənin linkini paylaşmaqdan çəkinməyin: https://www.chenweiliang.com/cwl-488.html
