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子句指定任何条件。

  • 可以使用以下方式指定偏移量OFFSETSELECT从那里开始返回记录。默认情况下,偏移量从零开始。

  • 可以使用LIMIT属性。

从命令提示符中获取数据


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

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

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from newbiego_tbl 
+-------------+----------------+-----------------+-----------------+
| newbiego_id | newbiego_title | newbiego_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。

以下程序是一个简单的示例,该示例将说明如何从newbiego_tbl表。

以下代码块将显示newbiego_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 newbiego_id, newbiego_title, newbiego_author, submission_date FROM newbiego_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['newbiego_id']}  <br> ".
            "Title: {$row['newbiego_title']} <br> ".
            "Author: {$row['newbiego_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(),它还以关联数组的形式返回该行。

下面的示例使用mysql_fetch_assoc()函数显示newbiego_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 newbiego_id, newbiego_title, newbiego_author, submission_date
        FROM newbiego_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['newbiego_id']}  <br> ".
            "Title: {$row['newbiego_title']} <br> ".
            "Author: {$row['newbiego_author']} <br> ".
            "Submission Date : {$row['submission_date']} <br> ".
            "--------------------------------<br>";
    }
    echo "Fetched data successfully\n";
    mysql_close($conn);
?>

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

尝试以下示例使用MYSQL_NUM参数显示newbiego_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 newbiego_id, newbiego_title, newbiego_author, submission_date
        FROM newbiego_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 newbiego_id, newbiego_title, newbiego_author, submission_date
        FROM newbiego_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);
?>

在获取数据时,你可以根据需要编写复杂的代码,但是该过程将与上面提到的相同。