在MySQL中使用JOIN語(yǔ)句進(jìn)行連接操作的詳細(xì)教程
到目前,我們已經(jīng)學(xué)習(xí)了從一個(gè)表中獲取數(shù)據(jù)。這是簡(jiǎn)單的需要,但在大多數(shù)現(xiàn)實(shí)MySQL的使用,經(jīng)常需要將數(shù)據(jù)從多個(gè)表中的一個(gè)單一的查詢。
可以使用多個(gè)表中的單一SQL查詢。在MySQL中聯(lián)接(join)行為是指兩個(gè)或多個(gè)表到一個(gè)表中可以使用連接在SELECT,UPDATE和DELETE語(yǔ)句中加入MySQL表。我們將看到一個(gè)例子LEFT JOIN簡(jiǎn)單的MySQL連接。
在命令提示符使用聯(lián)接:
假設(shè)我們兩個(gè)表的教程tcount_tbl和tutorials_tbl的完整列表如下:
例子:
試試下面的例子:
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec) mysql> SELECT * from tutorials_tbl; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA Tutorial | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec) mysql>
現(xiàn)在,加入這兩個(gè)表我們可以編寫一個(gè)SQL查詢。這個(gè)查詢會(huì)選擇所有的作者從表tutorials_tbl,從tcount_tbl會(huì)拿起相應(yīng)數(shù)量的教程。
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count -> FROM tutorials_tbl a, tcount_tbl b -> WHERE a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 2 rows in set (0.01 sec) mysql>
在PHP腳本中使用聯(lián)接:
可以使用任何上述的SQL查詢的PHP腳本。只需要通過(guò)PHP函數(shù)mysql_query()執(zhí)行SQL查詢,然后用常規(guī)方法獲取結(jié)果。
例子:
試試下面的例子:
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ".
"Tutorial ID: {$row['tutorial_id']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
MySQL左連接:
一個(gè)簡(jiǎn)單的連接和一個(gè)MySQL左連接是不同的。一個(gè)MySQL LEFT JOIN提供了額外的考慮到在左邊的表。
如果做了LEFT JOIN,得到的所有記錄以同樣的方式相匹配,此外,得到一個(gè)額外的記錄每個(gè)不匹配的記錄,在左表中的聯(lián)接 - 從而保證了每一個(gè)作者得到關(guān)聯(lián)(本例子中):
實(shí)例:
試試下面的例子就明白了LEFT JOIN:
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b -> ON a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
需要做更多的實(shí)踐才能熟悉JOINS。這是一個(gè)復(fù)雜的概念,在MySQL/SQL將變得更加清晰。
相關(guān)文章
MySQL異常宕機(jī)無(wú)法啟動(dòng)的處理過(guò)程
MySQL宕機(jī)是指MySQL數(shù)據(jù)庫(kù)服務(wù)突然停止運(yùn)行,通常可能是由于硬件故障、軟件錯(cuò)誤、資源耗盡、網(wǎng)絡(luò)中斷、配置問(wèn)題或是惡意攻擊等導(dǎo)致,當(dāng)MySQL發(fā)生宕機(jī)時(shí),系統(tǒng)可能無(wú)法提供數(shù)據(jù)訪問(wèn),本文給大家介紹了MySQL異常宕機(jī)無(wú)法啟動(dòng)的處理過(guò)程,需要的朋友可以參考下2024-08-08
使用JS+HTML/CSS實(shí)現(xiàn)虛擬滾動(dòng)和分頁(yè)加載效果
虛擬滾動(dòng)和分頁(yè)加載是一種優(yōu)化大型數(shù)據(jù)集的常見(jiàn)技術(shù),用于在Web應(yīng)用程序中提高性能和用戶體驗(yàn),在本文中,我將演示如何使用JavaScript和HTML/CSS來(lái)實(shí)現(xiàn)虛擬滾動(dòng)和分頁(yè)加載,同時(shí)提供示例代碼和詳細(xì)解釋,需要的朋友可以參考下2023-10-10
用MySQL創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表代碼
了解了一些最基本的操作命令后,我們?cè)賮?lái)學(xué)習(xí)如何創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表。2008-10-10
Mysql如何通過(guò)ibd文件恢復(fù)數(shù)據(jù)
這篇文章主要介紹了Mysql如何通過(guò)ibd文件恢復(fù)數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
MySQL使用IF語(yǔ)句及用case語(yǔ)句對(duì)條件并結(jié)果進(jìn)行判斷?
這篇文章主要介紹了MySQL使用IF語(yǔ)句及用case語(yǔ)句對(duì)條件并結(jié)果進(jìn)行判斷,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
MySQL中UPDATE JOIN語(yǔ)句的使用詳細(xì)
UPDATE JOIN是MySQL中一種結(jié)合UPDATE語(yǔ)句和JOIN操作的技術(shù),本文主要介紹了MySQL中UPDATE JOIN語(yǔ)句的使用詳細(xì),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
(MariaDB)MySQL數(shù)據(jù)類型和存儲(chǔ)機(jī)制全面講解
下面小編就為大家分享一篇(MariaDB)MySQL數(shù)據(jù)類型和存儲(chǔ)機(jī)制全面講解,具有很的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
getdata table表格數(shù)據(jù)join mysql方法
今天小編就為大家分享一篇關(guān)于getdata table表格數(shù)據(jù)join mysql方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02

