开发学院

您的位置:首页>教程>正文

教程正文

Mysql join的使用

Mysql join的使用

  到目前为止,我们一次只从一个表获取数据。这对于简单的需要很好,但是在大多数实际的MySQL使用中,通常需要在单个查询中从多个表获取数据。

  可以在单个SQL查询中使用多个表。加入MySQL的行为是指将两个或更多的表拆分为一个表。

  您可以使用join在select、update和delete语句中加入MySQL表。我们将看到一个left join的示例,它与简单的MySQL连接不同。

在控制台下使用连接:

  假设我们有两个表tcount_tbl和kaifaxueyuan_tbl,在教程中。完整的清单如下:

例子

root@host# mysql -u root -p password;
Enter password:*******
mysql> use kaifaxueyuan;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| kaifaxueyuan_author | kaifaxueyuan_count |
+-----------------+----------------+
| mahran          |             20 |
| mahnaz          |           NULL |
| Jen             |           NULL |
| Gill            |             20 |
| John Poul       |              1 |
| Sanjay          |              1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from kaifaxueyuan_tbl;
+-------------+----------------+-----------------+-----------------+
| kaifaxueyuan_id | kaifaxueyuan_title | kaifaxueyuan_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-24      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-24      |
|           3 | JAVA kaifaxueyuan  | Sanjay          | 2007-05-06      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>

  现在我们可以编写一个SQL查询来连接这两个表。这个查询将从表kaifaxueyuan_tbl中选择所有的作者,并从tcount_tbl获取相应的教程。

在PHP代码中使用join

  您可以在PHP脚本中使用上面提到的任何SQL查询。您只需要将SQL查询传递到PHP函数MySQL ( ),然后将以通常的方式获取结果。

例子

<?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.kaifaxueyuan_id, a.kaifaxueyuan_author, b.kaifaxueyuan_count
        FROM kaifaxueyuan_tbl a, tcount_tbl b
        WHERE a.kaifaxueyuan_author = b.kaifaxueyuan_author';

mysql_select_db('kaifaxueyuan');
$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['kaifaxueyuan_author']}  <br> ".
         "Count: {$row['kaifaxueyuan_count']} <br> ".
         "kaifaxueyuan ID: {$row['kaifaxueyuan_id']} <br> ".
         "--------------------------------<br>";
} 
echo "Fetched data successfully\n";
mysql_close($conn);
?>

MySQL LEFT JOIN

  一个MySQL left join不同于简单的连接,一个MySQL left join对左侧的表进行额外的考虑。

  如果我做left join,我会得到所有匹配的记录,此外,我在连接的左边表格中获得了一个额外的记录,从而确保(在我的示例中)每一个作者都会提到:

例子

root@host# mysql -u root -p password;
Enter password:*******
mysql> use kaifaxueyuan;
Database changed
mysql> SELECT a.kaifaxueyuan_id, a.kaifaxueyuan_author, b.kaifaxueyuan_count
    -> FROM kaifaxueyuan_tbl a LEFT JOIN tcount_tbl b
    -> ON a.kaifaxueyuan_author = b.kaifaxueyuan_author;
+-------------+-----------------+----------------+
| kaifaxueyuan_id | kaifaxueyuan_author | kaifaxueyuan_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           2 | Abdul S         |           NULL |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

  你需要做更多的练习来熟悉join。这在MySQL中是一个有点复杂的概念,只有做更多的操作才会清晰的理解。