Mysql Join的使用教程

Mysql Join的使用

在前幾章節中,我們已經學會了如果在一張表中讀取數據,這是相對簡單的,但是在真正的應用中經常需要從多個數據表中讀取數據。

本章節我們將向大家介紹如何使用MySQL 的 JOIN 在兩個或多個表中查詢數據。

你可以在SELECT, UPDATE 和 DELETE 語句中使用Mysql 的 join 來聯合多表查詢。

以下我們將演示MySQL LEFT JOIN 和 JOIN 的使用的不同之處。

在命令提示符中使用JOIN

我們在TUTORIALS數據庫中有兩張表 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>

接下來我們就使用MySQL的JOIN來連接以上兩張表來讀取tutorials_tbl表中所有tutorial_author字段在tcount_tbl表對應的tutorial_count字段值:

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腳本中使用JOIN

PHP 中使用mysql_query()函數來執行SQL語句,你可以使用以上的相同的SQL語句作為mysql_query()函數的參數。

嘗試如下實例:

<?php $dbhost = &#39;localhost:3036&#39;;$dbuser = &#39;root&#39;;$dbpass = &#39;rootpassword&#39;;$conn = mysql_connect($dbhost, $dbuser, $dbpass);if(! $conn ){  die(&#39;Could not connect: &#39; . mysql_error());}$sql = &#39;SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count        FROM tutorials_tbl a, tcount_tbl b        WHERE a.tutorial_author = b.tutorial_author&#39;;mysql_select_db(&#39;TUTORIALS&#39;);$retval = mysql_query( $sql, $conn );if(! $retval ){  die(&#39;Could not get data: &#39; . mysql_error());}while($row = mysql_fetch_array($retval, MYSQL_ASSOC)){    echo "Author:{$row[&#39;tutorial_author&#39;]}  <br>?".?????????"Count:?{$row['tutorial_count']}?<br>?".?????????"Tutorial?ID:?{$row['tutorial_id']}?<br>?".?????????"--------------------------------<br>";}?echo?"Fetched?data?successfullyn";mysql_close($conn);?&gt;

MySQL LEFT JOIN

MySQL left join 與 join 有所不同。 MySQL LEFT JOIN 會讀取左邊數據表的全部數據,即便右邊表無對應數據。

實例

嘗試以下實例,理解MySQL?LEFT?JOIN的應用:  root@host#?mysql?-u?root?-p?password;Enter?password:*******mysql&gt;?use?TUTORIALS;Database?changedmysql&gt;?SELECT?a.tutorial_id,?a.tutorial_author,?b.tutorial_count????-&gt;?FROM?tutorials_tbl?a?LEFT?JOIN?tcount_tbl?b????-&gt;?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)

以上實例中使用了LEFT JOIN,該語句會讀取左邊的數據表tutorials_tbl的所有選取的字段數據,即便在右側表tcount_tbl中沒有對應的tutorial_author字段值。

【相關推薦】

1.?特別推薦“php程序員工具箱”V0.1版本下載

2.“php程序員工具箱”V0.1版本下載“php程序員工具箱”V0.1版本下載

3.?“php程序員工具箱”V0.1版本下載

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享