游乐游手机版
首页/数据库/文章详情

MySQL SELECT 查询语句完整指南:语法、进阶与 PHP 实现

时间:2026-08-31 11:47
本文详细讲解 MySQL 数据库中使用 SELECT 语句查询数据的核心方法。涵盖基础语法结构、WHERE 过滤、ORDER BY 排序及 LIMIT 限制,并深入解析 PHP 中 mysqli 扩展的三种数据获取方式(关联数组、索引数组、混合数组)及内存释放机制,提供可直接运行的代码示例。

本文详细讲解 MySQL 数据库中使用 SELECT 语句查询数据的核心方法。涵盖基础语法结构、WHERE 过滤、ORDER BY 排序及 LIMIT 限制,并深入解析 PHP 中 mysqli 扩展的三种数据获取方式(关联数组、索引数组、混合数组)及内存释放机制,提供可直接运行的代码示例。

MySQL 查询数据的核心结果预览

在 MySQL 中,SELECT 语句是获取数据的最基本且最重要的命令。通过该语句,你可以从数据库表中提取特定列或所有行的数据,并根据条件进行过滤、排序和限制。最终,这些数据可以通过命令行工具直接查看,或通过 PHP 脚本嵌入到 Web 页面中展示。

操作前准备说明

在执行以下操作前,请确保已满足以下条件:

  • MySQL 服务运行中:确保数据库服务器已启动并可访问。
  • 数据库与数据表:已创建好目标数据库(如 RUNOOB)和数据表(如 runoob_tblusers),并包含测试数据。
  • 访问权限:拥有对目标数据库的读取权限(通常使用 root 或特定用户)。
  • PHP 环境(可选):若需通过 PHP 查询,请确保服务器已安装 mysqli 扩展。

MySQL SELECT 基础语法与参数解析

SELECT 语句的通用语法结构如下:

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

第1步:指定要查询的列与表

首先确定数据来源。使用 column1, column2 指定具体字段,或使用 * 选择所有列。使用 FROM table_name 指定数据表。

示例:

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

完成判断: 执行后应返回指定列的数据集。

第2步:添加条件过滤(WHERE 子句)

使用 WHERE 子句指定过滤条件,仅返回符合条件的行。支持各种运算符(=, <, >, !=)和逻辑运算符(AND, OR, NOT)。

示例:

-- 选择满足特定条件的行
SELECT * FROM users WHERE is_active = TRUE;
-- 使用 AND 和通配符
SELECT * FROM users WHERE username LIKE 'j%' AND is_active = TRUE;

完成判断: 结果集中所有行均满足 WHERE 后的条件。

第3步:对结果进行排序(ORDER BY 子句)

使用 ORDER BY 子句指定结果集的排序顺序。默认按升序(ASC)排列,可使用 DESC 指定降序。

示例:

-- 按某列升序排序
SELECT * FROM users ORDER BY birthdate;
-- 按某列降序排序
SELECT * FROM users ORDER BY birthdate DESC;

完成判断: 返回的数据行按照指定列的值顺序排列。

第4步:限制返回行数(LIMIT 子句)

使用 LIMIT 子句限制返回的行数,常用于分页或获取前几条记录。

示例:

-- 限制返回前10行
SELECT * FROM users LIMIT 10;

完成判断: 结果集的行数不超过指定的 number

通过命令行提示符获取数据

在 MySQL 命令提示符(mysql>)中,可以直接输入 SELECT 语句并回车执行。这是最直接的查询方式,适用于数据库管理和即时数据验证。

第5步:在命令行执行查询

操作目的: 快速获取数据库表中的记录。

具体动作:

  1. 登录 MySQL 服务器。
  2. 选择目标数据库(如 USE RUNOOB;)。
  3. 输入查询语句,例如 SELECT * FROM runoob_tbl;
  4. 以分号 ; 结尾并回车。

完成判断: 屏幕下方显示查询结果表格。

通过 PHP 脚本获取数据

在 Web 开发中,通常使用 PHP 的 mysqli 扩展来执行 SELECT 语句并处理结果。核心流程包括:建立连接、执行查询、获取数据、释放内存和关闭连接。

第6步:建立数据库连接

使用 mysqli_connect() 函数建立与 MySQL 服务器的连接。

$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
    die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn, "set names utf8");

完成判断: $conn 变量不为 false,表示连接成功。

第7步:执行 SELECT 查询

使用 mysqli_query() 函数执行 SQL 语句。首先通过 mysqli_select_db() 选定数据库。

$sql = 'SELECT runoob_id, runoob_title, runoob_author, submission_date FROM runoob_tbl';
mysqli_select_db($conn, 'RUNOOB');
$retval = mysqli_query($conn, $sql);
if(! $retval ) {
    die('无法读取数据: ' . mysqli_error($conn));
}

完成判断: $retval 包含结果集资源,表示查询执行成功。

第8步:获取并输出查询结果

使用 mysqli_fetch_array()mysqli_fetch_assoc() 函数从结果集中逐行获取数据。根据第二个参数的不同,返回的数据类型有所区别:

方式一:使用 MYSQLI_ASSOC 获取关联数组

mysqli_fetch_array($retval, MYSQLI_ASSOC) 返回关联数组,可以使用字段名作为索引访问数据。这是最推荐的用法,代码可读性高。

while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)) {
    echo "{$row['runoob_id']}".
         "{$row['runoob_title']}".
         "{$row['runoob_author']}".
         "{$row['submission_date']}";
}

完成判断: 每行数据可通过字段名(如 $row['runoob_id'])准确获取。

方式二:使用 MYSQLI_NUM 获取索引数组

mysqli_fetch_array($retval, MYSQLI_NUM) 返回数字索引数组,使用数字索引(0, 1, 2...)访问数据。适用于对字段名不敏感或性能要求极高的场景。

while($row = mysqli_fetch_array($retval, MYSQLI_NUM)) {
    echo "{$row[0]}".
         "{$row[1]}".
         "{$row[2]}".
         "{$row[3]}";
}

完成判断: 每行数据可通过数字索引(如 $row[0])准确获取。

方式三:使用 mysqli_fetch_assoc 获取关联数组

mysqli_fetch_assoc($retval)mysqli_fetch_array 的简化版,专门返回关联数组,功能与方式一相同,但语义更明确。

while($row = mysqli_fetch_assoc($retval)) {
    // 处理 $row
}

完成判断: 行为与方式一一致,返回关联数组。

第9步:释放内存并关闭连接

查询完成后,应释放结果集占用的内存,并关闭数据库连接,以释放服务器资源。

// 释放结果集内存
mysqli_free_result($retval);
// 关闭数据库连接
mysqli_close($conn);

完成判断: 脚本执行完毕,服务器资源被正确回收。

常见问题与调整建议

  • 中文乱码问题:如果在 PHP 中查询中文数据显示乱码,请确保在连接数据库后执行 mysqli_query($conn, "set names utf8");,并确保数据库、表、字段的字符集均为 utf8utf8mb4
  • 连接失败:检查 $dbhost$dbuser$dbpass 是否正确,以及 MySQL 服务是否运行。
  • 查询结果为空:检查 SQL 语句拼写、表名和字段名是否正确,以及数据库中是否存在匹配的数据。

总结

MySQL 的 SELECT 语句是数据查询的核心,掌握其基础语法(SELECT, FROM, WHERE, ORDER BY, LIMIT)是进行数据库操作的基础。在 PHP 开发中,推荐使用 mysqli 扩展,并优先使用 MYSQLI_ASSOCmysqli_fetch_assoc() 来获取关联数组,以提高代码的可读性和可维护性。同时,务必注意内存释放和连接关闭,以优化服务器性能。

以上就是 MySQL SELECT 查询语句的详细内容,更多关于 MySQL 数据库操作的资料请关注本站其它相关文章!

来源:https://www.runoob.com/mysql/mysql-select-query.html
上一篇MySQL UNION 操作符:语法、UNION与UNION ALL区别及实战示例 下一篇MySQL 插入数据 INSERT INTO 语法与实战操作指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。