實(shí)例詳解Mysql中Join的應(yīng)用

本章節(jié)我們將向大家介紹如何使用使用 的 join 在兩個或多個表中使用數(shù)據(jù)。對mysql中的join感興趣的朋友一起學(xué)習(xí)吧

在前幾章節(jié)中,我們已經(jīng)學(xué)會了如果在一張表中讀取數(shù)據(jù),這是相對簡單的,但是在真正的應(yīng)用中經(jīng)常需要從多個數(shù)據(jù)表中讀取數(shù)據(jù)。

本章節(jié)我們將向大家介紹如何使用mysql 的 JOIN 在兩個或多個表中查詢數(shù)據(jù)。

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

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

在命令提示符中使用JOIN

我們在RUNOOB數(shù)據(jù)庫中有兩張表 tcount_tbl 和 runoob_tbl。兩張數(shù)據(jù)表數(shù)據(jù)如下:

實(shí)例

嘗試以下實(shí)例:

root@host#?mysql?-u?root?-p?password;  Enter?password:*******  mysql>?use?RUNOOB;  Database?changed  mysql>?SELECT?*?FROM?tcount_tbl;  +-----------------+----------------+  |?runoob_author?|?runoob_count?|  +-----------------+----------------+  |?mahran???|????20?|  |?mahnaz???|???NULL?|  |?Jen????|???NULL?|  |?Gill???|????20?|  |?John?Poul??|????1?|  |?Sanjay???|????1?|  +-----------------+----------------+  6?rows?in?set?(0.01?sec)  mysql>?SELECT?*?from?runoob_tbl;  +-------------+----------------+-----------------+-----------------+  |?runoob_id?|?runoob_title?|?runoob_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來連接以上兩張表來讀取runoob_tbl表中所有runoob_author字段在tcount_tbl表對應(yīng)的runoob_count字段值:

mysql>?SELECT?a.runoob_id,?a.runoob_author,?b.runoob_count  ?->?FROM?runoob_tbl?a,?tcount_tbl?b  ?->?WHERE?a.runoob_author?=?b.runoob_author;  +-------------+-----------------+----------------+  |?runoob_id?|?runoob_author?|?runoob_count?|  +-------------+-----------------+----------------+  |???1?|?John?Poul??|????1?|  |???3?|?Sanjay???|????1?|  +-------------+-----------------+----------------+  2?rows?in?set?(0.01?sec)  mysql>

在PHP腳本中使用JOIN

PHP 中使用使用()使用來執(zhí)行SQL語句,你可以使用以上的相同的SQL語句作為mysql_query()使用

嘗試如下實(shí)例:

<?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.runoob_id, a.runoob_author, b.runoob_count    FROM runoob_tbl a, tcount_tbl b    WHERE a.runoob_author = b.runoob_author&#39;;  mysql_select_db(&#39;RUNOOB&#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;runoob_author&#39;]} <br>?".  ???"Count:?{$row['runoob_count']}?<br>?".  ???"Tutorial?ID:?{$row['runoob_id']}?<br>?".  ???"--------------------------------<br>";  }?  echo?"Fetched?data?successfullyn";  mysql_close($conn);  ?&gt;

MySQL LEFT JOIN

MySQL left join 與 join 有所不同。 MySQL LEFT JOIN 會讀取左邊數(shù)據(jù)表的全部數(shù)據(jù),即便右邊表無對應(yīng)數(shù)據(jù)。

實(shí)例

嘗試以下實(shí)例,理解MySQL LEFT JOIN的應(yīng)用:

root@host#?mysql?-u?root?-p?password;  Enter?password:*******  mysql&gt;?use?RUNOOB;  Database?changed  mysql&gt;?SELECT?a.runoob_id,?a.runoob_author,?b.runoob_count  ?-&gt;?FROM?runoob_tbl?a?LEFT?JOIN?tcount_tbl?b  ?-&gt;?ON?a.runoob_author?=?b.runoob_author;  +-------------+-----------------+----------------+  |?runoob_id?|?runoob_author?|?runoob_count?|  +-------------+-----------------+----------------+  |???1?|?John?Poul??|????1?|  |???2?|?Abdul?S???|???NULL?|  |???3?|?Sanjay???|????1?|  +-------------+-----------------+----------------+  3?rows?in?set?(0.02?sec)

以上實(shí)例中使用了LEFT JOIN,該語句會讀取左邊的數(shù)據(jù)表runoob_tbl的所有選取的字段數(shù)據(jù),即便在右側(cè)表tcount_tbl中沒有對應(yīng)的runoob_author字段值。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享