MySQL - 选择查询

SQL SELECT 命令用于从MySQL数据库中获取数据.你可以在mysql>上使用这个命令.提示以及任何脚本,如PHP.

语法

这是SELECT命令的通用SQL语法,用于从MySQL表中获取数据 :

SELECT field1, field2,...fieldN 
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]

  • 您可以使用一个或多个用逗号分隔的表包含使用WHERE子句的各种条件,但WHERE子句是SELECT命令的可选部分.

  • 您可以获取一个或多个单个SELECT命令中的字段.

  • 您可以指定星号(*)代替字段.在这种情况下,SELECT将返回所有字段.

  • 您可以使用WHERE子句指定任何条件.

  • 您可以使用 OFFSET 指定偏移量,SELECT将从此处开始返回记录.默认情况下,偏移量从零开始.

  • 您可以使用 LIMIT 属性限制退货次数.

从命令提示符中获取数据

这将使用SQL SELECT命令从MySQL表中获取数据 tutorials_tbl .

示例

以下示例将返回 tutorials_tbl 表中的所有记录 :

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl 
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-21      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-21      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)

mysql>

使用PHP脚本获取数据

您可以在PHP函数中使用相同的SQL SELECT命令的mysql_query()的.此函数用于执行SQL命令,然后可以使用另一个PHP函数 mysql_fetch_array()来获取所有选定的数据.此函数将行作为关联数组,数字数组或两者返回.如果没有更多行,则此函数返回FALSE.

以下程序是一个简单示例,它将显示如何从 tutorials_tbl 表中获取/显示记录.

示例

以下代码块将显示tutorials_tbl表中的所有记录.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';

   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 "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

行的内容被分配给变量$ row,然后打印该行中的值.

注意 : 当你想直接将一个数组值插入一个字符串时,总是记得放置大括号.

在上面的例子中,常量 MYSQL_ASSOC 用作第二个PHP函数 mysql_fetch_array()的参数,以便它将该行作为关联数组返回.使用关联数组,您可以使用其名称而不是使用索引来访问该字段.

PHP提供另一个名为 mysql_fetch_assoc()的函数,该函数也返回row作为关联数组.

示例

以下示例使用mysql_fetch_assoc()函数显示tutorial_tbl表中的所有记录.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_assoc($retval)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

您还可以使用常量 MYSQL_NUM 作为PHP函数mysql_fetch_array()的第二个参数.这将导致函数返回带有数字索引的数组.

示例

尝试以下示例以显示tutorials_tbl表中的所有记录使用MYSQL_NUM参数.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   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_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

以上三个例子都会产生相同的结果.

释放内存

最好在每个SELECT语句的末尾释放游标内存.这可以通过使用PHP函数 mysql_free_result()来完成.以下程序是显示如何使用它的示例.

示例

尝试以下示例 :

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   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_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   mysql_free_result($retval);
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

在获取数据时,您可以根据需要编写复杂的代码,但程序将保持与上述相同.