MySQL 零基础教程

MySQL SELECT 语句

SELECT 语句是查询存储在 MySQL 数据库中信息的主要机制。当你执行一个 SELECT 查询时,数据库引擎会扫描指定的表,并返回一个“结果集”(result set)——这是一个包含符合你请求的数据的虚拟表。

1. 检索整个表

要查看表中的所有列和行,可以使用星号 (*) 通配符。这个操作符充当了“表结构中定义的每一列”的占位符。

-- 从 city(城市)表中检索每一列
SELECT * FROM city;

虽然 SELECT * 对于快速探索或调试非常高效,但在生产环境中很少使用。请求不必要的数据会增加数据库服务器和你的应用程序的网络流量及内存使用。请始终只检索你需要的列。

2. 指定单个列

为了缩小结果范围,明确写出你想要检索的列名,并用逗号隔开。

-- 仅检索城市的名称(Name)和人口(Population)
SELECT Name, Population FROM city;

当你定义了一个特定的列列表时,无论它们在底层表结构中的物理顺序如何,MySQL 都会按照你在查询中书写的确切顺序返回它们。

3. 使用别名

SELECT 语句返回的结果会继承数据库表中的列名。如果这些名称过于技术化或难以理解,你可以使用 AS 关键字在查询期间为列分配一个临时的“别名”(alias)。

-- 使用别名使输出结果更易读
SELECT 
    Name AS City_Name, 
    Population AS Total_Residents 
FROM city;

别名不会改变表的实际结构;它们仅仅改变了结果集在当前窗口或应用程序中的呈现方式。

4. 数据检索的逻辑流程

当你执行查询时,MySQL 引擎会执行一系列操作来定位并返回你请求的数据:

  1. 客户端发送 SELECT 查询
  2. 解析器(Parser)验证语法
  3. 优化器(Optimizer)确定获取数据的最佳路径
  4. 存储引擎(Storage Engine)从表中读取行
  5. 应用投影(Projections):仅选择请求的列
  6. 将结果集返回给客户端

5. 使用 DISTINCT 消除重复项

在很多场景下,你可能希望找出一列中唯一的值。例如,如果你想知道 city 表中包含哪些国家,一个简单的查询可能会返回数千行。DISTINCT 关键字可以将重复的值折叠成单个条目。

-- 获取 city 表中存在的唯一的国家代码(CountryCode)列表
SELECT DISTINCT CountryCode FROM city;

当你在多个列上使用 DISTINCT 时,MySQL 会将这些列的组合视为唯一标识符。只有当某一行的所有指定列与前面某一行完全相同时,该行才会被隐藏。