位置:首页 > 数据库 > MySQL在线教程 > MySQL Select查询

MySQL Select查询

SQL SELECT命令用于从MySQL数据库获取数据。可以在MySQL>提示符使用这个命令,以及任何像PHP的脚本和语言等。

语法

下面是通用的SQL的SELECT命令语法,从MySQL表获取数据:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • 可以使用分隔的一个或多个逗号从多个表,以及使用WHERE子句包括各种条件,但WHERE子句是SELECT命令的可选部分

  • 可以在一个SELECT命令指定读取一个或多个字段

  • 可以指定星号(*)代替选择的字段。在这种情况下,将返回所有字段

  • 可以指定任意的条件在 WHERE 子句后面

  • 可以使用OFFSET指定一个偏移量,SELECT从那里开始返回记录。默认情况下 offset 的值是 0

  • 可以使用LIMIT属性限制返回的数量

1、从命令提示符读取数据

这将使用SQL SELECT命令从MySQL 表 tutorials_tbl 读取数据

示例

下面的例子将从 tutorials_tbl 表返回所有记录:

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
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>

2、使用PHP脚本提取数据

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

下面是一个简单的例子来从tutorials_tbl表中提取记录。

示例

试试下面的例子来显示tutorials_tbl表中的所有记录。

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$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('test');
$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(),也返回该行作为关联数组。

示例

试试下面的例子用来显示 tutorial_tbl 表所有的记录,使用 mysql_fetch_assoc() 函数例子如下:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$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('test');
$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()函数的第二个参数。这会使该函数返回数字索引的数组。

示例

试试下面的例子来使用MYSQL_NUM 参数显示 tutorials_tbl 表的所有记录。

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$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('test');
$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';
$dbuser = 'root';
$dbpass = '';
$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('test');
$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);
?>

在读取数据时,可以根据需要编写复杂的SQL。如上所述过程将保持不变。