在信息时代的浪潮中,数据库作为存储与管理数据的核心枢纽,其重要性不言而喻,无论是大型企业级应用还是小型个人项目,从数据库中精准、高效地提取所需数据都是一项基本且关键的技能,当我们谈论“查询表里的几个数”时,实际上是在探讨如何使用结构化查询语言(SQL)来定位并获取表中的特定列和特定行的数据,这不仅仅是简单的“查看”,更是一种对数据的精确控制。

基础查询:SELECT 与 FROM 的协奏
一切查询的起点都是 SELECT 语句,它的核心作用是告诉数据库你想要“选择”哪些数据,与之搭档的是 FROM 子句,它指定了数据来源,即“从哪个表”中获取。
最基础的语法结构如下:
SELECT column1, column2, ... FROM table_name;
这里,column1, column2 是你希望查询的表的列名,用逗号隔开。table_name 则是数据表的名称,如果我们有一个名为 employees 的员工表,包含 id, name, department, salary 等列,要查询所有员工的姓名和薪水,可以执行:
SELECT name, salary FROM employees;
如果想查询表中的所有列,可以使用星号()作为通配符,但出于性能和代码可读性的考虑,在生产环境中明确指定所需列名是更佳实践。
精确筛选:WHERE 子句的力量
仅仅选择列是不够的,更多时候我们关心的是满足特定条件的数据,这时,WHERE 子句便登场了,它如同一个过滤器,放置在 FROM 子句之后,用于筛选出符合条件的行。
WHERE 子句支持丰富的运算符,让我们能够构建复杂的筛选条件:

- 比较运算符:,
>,<,>=,<=,<>(或 ),用于数值或文本的比较。 - 逻辑运算符:
AND,OR,NOT,用于组合多个条件。 - 范围查询:
BETWEEN ... AND ...,用于查询某个范围内的值。 - 列表查询:
IN (...),用于查询值是否在给定的列表中。 - 模糊查询:
LIKE,结合通配符 (匹配任意多个字符)和_(匹配单个字符)进行模式匹配。
要查询“销售部”中薪水大于5000的员工姓名和薪水:
SELECT name, salary FROM employees WHERE department = '销售部' AND salary > 5000;
排序与限制:ORDER BY 和 LIMIT
查询出的结果集默认是按表中的物理顺序或数据库内部优化顺序排列的,为了使数据更具可读性,我们通常需要对其进行排序。ORDER BY 子句就是为此而生,它可以按一个或多个列对结果进行升序(ASC,默认)或降序(DESC)排列。
当我们只需要结果集的前几行时,查询薪水最高的三名员工”,就需要使用 LIMIT 子句(在MySQL, PostgreSQL中)或 TOP 关键字(在SQL Server中)。
综合示例:查询“技术部”薪水最高的前3名员工的姓名和薪水,并按薪水从高到低排序。
SELECT name, salary FROM employees WHERE department = '技术部' ORDER BY salary DESC LIMIT 3;
这个查询完美地结合了 SELECT, WHERE, ORDER BY 和 LIMIT,实现了从指定表中筛选、排序并限制数量的复杂需求。
SQL 子句功能概览
为了更清晰地理解这些核心子句的作用,下表进行了小编总结:

| 子句 | 功能 | 示例 |
|---|---|---|
SELECT |
指定要查询的列 | SELECT name, age |
FROM |
指定查询的数据来源表 | FROM students |
WHERE |
设置行的筛选条件 | WHERE age > 18 |
ORDER BY |
对结果集进行排序 | ORDER BY score DESC |
LIMIT |
限制返回的行数 | LIMIT 10 |
相关问答FAQs
Q1: WHERE 和 HAVING 都可以用来过滤数据,它们有什么区别?
A1: WHERE 和 HAVING 的主要区别在于它们作用的时间点不同。WHERE 子句在数据分组(GROUP BY)之前对表中的原始行进行过滤,它不能使用聚合函数(如 COUNT(), SUM()),而 HAVING 子句在数据分组之后对聚合后的结果进行过滤,因此它通常与 GROUP BY 一起使用,并且可以包含聚合函数。WHERE 过滤行,HAVING 过滤组。
Q2: 如何查询一个字段满足多个不连续的值,比如查询部门为‘销售部’、‘技术部’或‘市场部’的所有员工?
A2: 这种情况有两种常见的实现方式,第一种是使用 OR 逻辑运算符:
SELECT * FROM employees WHERE department = '销售部' OR department = '技术部' OR department = '市场部';
第二种,也是更简洁、更高效的方式是使用 IN 子句:
SELECT * FROM employees WHERE department IN ('销售部', '技术部', '市场部');
IN 子句专门用于判断字段的值是否存在于给定的列表中,代码可读性更好,并且在处理大量值时,数据库优化器通常能提供更好的执行计划。