MySQL 查询数据

MySQL 数据库使用 SELECT 语句来查询数据。

你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过 PHP 脚本来查询数据。

语法

以下为在 MySQL 数据库中查询数据通用的 SELECT 语法:

									SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC_DESC]]
[LIMIT number];
								

参数说明:

  • column1 , column2 , ... 是你想要选择的列的名称,如果使用 * 表示选择所有列。
  • table_name 是你要从中查询数据的表的名称。
  • WHERE condition 是一个可选的子句,用于指定过滤条件,只返回符合条件的行。
  • ORDER BY column_name [ASC_DESC] 是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。
  • LIMIT number 是一个可选的子句,用于限制返回的行数。

MySQL SELECT 语句简单的应用实例:

实例

-- 选择所有列的所有行
SELECT * FROM users;

-- 选择特定列的所有行
SELECT username , email FROM users;

-- 添加 WHERE 子句,选择满足条件的行
SELECT * FROM users WHERE is_active = TRUE ;

-- 添加 ORDER BY 子句,按照某列的升序排序
SELECT * FROM users ORDER BY birthdate;

-- 添加 ORDER BY 子句,按照某列的降序排序
SELECT * FROM users ORDER BY birthdate DESC ;

-- 添加 LIMIT 子句,限制返回的行数
SELECT * FROM users LIMIT 10 ;

SELECT 语句可以是灵活的,我们可以根据实际需求组合和使用这些子句,比如同时使用 WHERE 和 ORDER BY 子句,或者使用 LIMIT 控制返回的行数。

WHERE 子句中,你可以使用各种条件运算符(如 = , < , > , <= , >= , != ),逻辑运算符(如 AND , OR , NOT ),以及通配符(如 % )等。

以下是一些进阶的 SELECT 语句实例:

实例

-- 使用 AND 运算符和通配符
SELECT * FROM users WHERE username LIKE 'j%' AND is_active = TRUE ;

-- 使用 OR 运算符
SELECT * FROM users WHERE is_active = TRUE OR birthdate < '1990-01-01' ;

-- 使用 IN 子句
SELECT * FROM users WHERE birthdate IN ( '1990-01-01' , '1992-03-15' , '1993-05-03' ) ;

通过命令提示符获取数据

以下实例我们将通过 SQL SELECT 命令来获取 MySQL 数据表 yssmx_tbl 的数据:

实例

以下实例将返回数据表 yssmx_tbl 的所有记录:

读取数据表:

select * from yssmx_tbl ;

输出结果:


使用 PHP 脚本来获取数据

使用 PHP 函数的 mysqli_query() SQL SELECT 命令来获取数据。

该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来使用或输出所有查询的数据。

mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。

以下实例为从数据表 yssmx_tbl 中读取所有记录。

实例

尝试以下实例来显示数据表 yssmx_tbl 的所有记录。

使用 mysqli_fetch_array MYSQLI_ASSOC 参数获取数据:

<?php $dbhost = ' localhost ' ; // mysql服务器主机地址 $dbuser = ' root ' ; // mysql用户名 $dbpass = ' 123456 ' ; // mysql用户名密码 $conn = mysqli_connect ( $dbhost , $dbuser , $dbpass ) ; if ( ! $conn ) { die ( ' 连接失败: ' . mysqli_error ( $conn ) ) ; } // 设置编码,防止中文乱码 mysqli_query ( $conn , " set names utf8 " ) ; $sql = ' SELECT yssmx_id, yssmx_title, yssmx_author, submission_date FROM yssmx_tbl ' ; mysqli_select_db ( $conn , ' yssmx ' ) ; $retval = mysqli_query ( $conn , $sql ) ; if ( ! $retval ) { die ( ' 无法读取数据: ' . mysqli_error ( $conn ) ) ; } echo ' <h2>云搜索MX教程 mysqli_fetch_array 测试</h2> ' ; echo ' <table border="1"><tr><td>教程 ID</td><td>标题</td><td>作者</td><td>提交日期</td></tr> ' ; while ( $row = mysqli_fetch_array ( $retval , MYSQLI_ASSOC ) ) { echo " <tr><td> {$row['yssmx_id']} </td> " . " <td> {$row['yssmx_title']} </td> " . " <td> {$row['yssmx_author']} </td> " . " <td> {$row['submission_date']} </td> " . " </tr> " ; } echo ' </table> ' ; mysqli_close ( $conn ) ; ?>

输出结果如下所示:

以上实例中,读取的每行记录赋值给变量 $row,然后再打印出每个值。

注意: 记住如果你需要在字符串中使用变量,请将变量置于花括号。

在上面的例子中,PHP mysqli_fetch_array() 函数第二个参数为 MYSQLI_ASSOC , 设置该参数查询结果返回关联数组,你可以使用字段名称来作为数组的索引。

PHP 提供了另外一个函数 mysqli_fetch_assoc() , 该函数从结果集中取得一行作为关联数组。 返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false。

实例

尝试以下实例,该实例使用了 mysqli_fetch_assoc() 函数来输出数据表 yssmx_tbl 的所有记录:

使用 mysqli_fetch_assoc 获取数据:

<?php $dbhost = ' localhost:3306 ' ; // mysql服务器主机地址 $dbuser = ' root ' ; // mysql用户名 $dbpass = ' 123456 ' ; // mysql用户名密码 $conn = mysqli_connect ( $dbhost , $dbuser , $dbpass ) ; if ( ! $conn ) { die ( ' 连接失败: ' . mysqli_error ( $conn ) ) ; } // 设置编码,防止中文乱码 mysqli_query ( $conn , " set names utf8 " ) ; $sql = ' SELECT yssmx_id, yssmx_title, yssmx_author, submission_date FROM yssmx_tbl ' ; mysqli_select_db ( $conn , ' yssmx ' ) ; $retval = mysqli_query ( $conn , $sql ) ; if ( ! $retval ) { die ( ' 无法读取数据: ' . mysqli_error ( $conn ) ) ; } echo ' <h2>云搜索MX教程 mysqli_fetch_assoc 测试</h2> ' ; echo ' <table border="1"><tr><td>教程 ID</td><td>标题</td><td>作者</td><td>提交日期</td></tr> ' ; while ( $row = mysqli_fetch_assoc ( $retval ) ) { echo " <tr><td> {$row['yssmx_id']} </td> " . " <td> {$row['yssmx_title']} </td> " . " <td> {$row['yssmx_author']} </td> " . " <td> {$row['submission_date']} </td> " . " </tr> " ; } echo ' </table> ' ; mysqli_close ( $conn ) ; ?>

输出结果如下所示:

你也可以使用常量 MYSQLI_NUM 作为 PHP mysqli_fetch_array() 函数的第二个参数,返回数字数组。

实例

以下实例使用 MYSQLI_NUM 参数显示数据表 yssmx_tbl 的所有记录:

使用 mysqli_fetch_array MYSQLI_NUM 参数获取数据:

<?php $dbhost = ' localhost:3306 ' ; // mysql服务器主机地址 $dbuser = ' root ' ; // mysql用户名 $dbpass = ' 123456 ' ; // mysql用户名密码 $conn = mysqli_connect ( $dbhost , $dbuser , $dbpass ) ; if ( ! $conn ) { die ( ' 连接失败: ' . mysqli_error ( $conn ) ) ; } // 设置编码,防止中文乱码 mysqli_query ( $conn , " set names utf8 " ) ; $sql = ' SELECT yssmx_id, yssmx_title, yssmx_author, submission_date FROM yssmx_tbl ' ; mysqli_select_db ( $conn , ' yssmx ' ) ; $retval = mysqli_query ( $conn , $sql ) ; if ( ! $retval ) { die ( ' 无法读取数据: ' . mysqli_error ( $conn ) ) ; } echo ' <h2>云搜索MX教程 mysqli_fetch_array 测试</h2> ' ; echo ' <table border="1"><tr><td>教程 ID</td><td>标题</td><td>作者</td><td>提交日期</td></tr> ' ; while ( $row = mysqli_fetch_array ( $retval , MYSQLI_NUM ) ) { echo " <tr><td> {$row[0]} </td> " . " <td> {$row[1]} </td> " . " <td> {$row[2]} </td> " . " <td> {$row[3]} </td> " . " </tr> " ; } echo ' </table> ' ; mysqli_close ( $conn ) ; ?>

输出结果如下所示:

以上三个实例输出结果都一样。


内存释放

在我们执行完 SELECT 语句后,释放游标内存是一个很好的习惯。

可以通过 PHP 函数 mysqli_free_result() 来实现内存的释放。

以下实例演示了该函数的使用方法。

实例

尝试以下实例:

使用 mysqli_free_result 释放内存:

<?php $dbhost = ' localhost:3306 ' ; // mysql服务器主机地址 $dbuser = ' root ' ; // mysql用户名 $dbpass = ' 123456 ' ; // mysql用户名密码 $conn = mysqli_connect ( $dbhost , $dbuser , $dbpass ) ; if ( ! $conn ) { die ( ' 连接失败: ' . mysqli_error ( $conn ) ) ; } // 设置编码,防止中文乱码 mysqli_query ( $conn , " set names utf8 " ) ; $sql = ' SELECT yssmx_id, yssmx_title, yssmx_author, submission_date FROM yssmx_tbl ' ; mysqli_select_db ( $conn , ' yssmx ' ) ; $retval = mysqli_query ( $conn , $sql ) ; if ( ! $retval ) { die ( ' 无法读取数据: ' . mysqli_error ( $conn ) ) ; } echo ' <h2>云搜索MX教程 mysqli_fetch_array 测试</h2> ' ; echo ' <table border="1"><tr><td>教程 ID</td><td>标题</td><td>作者</td><td>提交日期</td></tr> ' ; while ( $row = mysqli_fetch_array ( $retval , MYSQLI_NUM ) ) { echo " <tr><td> {$row[0]} </td> " . " <td> {$row[1]} </td> " . " <td> {$row[2]} </td> " . " <td> {$row[3]} </td> " . " </tr> " ; } echo ' </table> ' ; // 释放内存 mysqli_free_result ( $retval ) ; mysqli_close ( $conn ) ; ?>

输出结果如下所示: