SQL(Structured Query Language)是与数据库沟通的标准语言,而查询数据是其最核心、最频繁的操作,掌握如何编写高效的数据库表查询语句,是每一位开发者、数据分析师乃至运维人员的必备技能,本文将从基础到进阶,系统性地讲解SQL查询语句的编写方法,帮助您快速上手并灵活运用。

查询的基石:SELECT 与 FROM
所有查询都始于两个最基本的子句:SELECT 和 FROM。
FROM子句用于指定你要从哪个表中检索数据。SELECT子句用于指定你想从该表中检索哪些列(字段)。
最简单的查询语句是获取一个表中的所有数据:
SELECT * FROM employees;
这里的星号()是通配符,代表“所有列”,在实际生产环境中,为了提升查询效率和可读性,更推荐明确指定列名:
SELECT employee_id, first_name, last_name, salary FROM employees;
这条语句会从 employees 表中,只检索出员工ID、名、姓和薪水这四列数据。
精准筛选:WHERE 子句
仅仅获取所有数据往往是不够的,我们通常需要根据特定条件来筛选数据行。WHERE 子句就是为此而生,它位于 FROM 子句之后,用于设置过滤条件。
我们要查找薪水大于8000的员工:

SELECT employee_id, first_name, salary FROM employees WHERE salary > 8000;
WHERE 子句支持多种运算符,以构建复杂的筛选逻辑:
| 运算符 | 描述 | 示例 |
|---|---|---|
| 等于 | WHERE department_id = 10; |
|
<> 或 |
不等于 | WHERE job_id <> 'MANAGER'; |
> |
大于 | WHERE salary > 5000; |
< |
小于 | WHERE salary < 10000; |
BETWEEN...AND |
在某个范围内 | WHERE salary BETWEEN 6000 AND 9000; |
LIKE |
模糊匹配 | WHERE first_name LIKE 'J%'; (查找以J开头的名字) |
IN |
在列表中 | WHERE department_id IN (10, 20, 30); |
AND |
逻辑与 | WHERE salary > 8000 AND department_id = 10; |
OR |
逻辑或 | WHERE salary > 8000 OR department_id = 10; |
排序结果:ORDER BY 子句
获取的数据可能是无序的,为了更好地查看和分析,我们可以使用 ORDER BY 子句对结果集进行排序,它通常放在查询语句的最后。
ASC(Ascending):升序排列,是默认选项。DESC(Descending):降序排列。
按薪水从高到低对所有员工进行排序:
SELECT first_name, salary FROM employees ORDER BY salary DESC;
限制数量:LIMIT 子句
当我们只需要查询结果的一部分时,前10名”员工,LIMIT 子句就非常有用,它放在 ORDER BY 之后,用于限制返回的行数。
获取薪水最高的前5名员工:
SELECT first_name, salary FROM employees ORDER BY salary DESC LIMIT 5;
综合应用
将以上所有子句组合在一起,我们就可以编写出功能强大的查询语句,查询部门ID为30,薪水在6000到10000之间,按薪水降序排列,只显示前3名员工的姓名和薪水。

SELECT first_name, salary FROM employees WHERE department_id = 30 AND salary BETWEEN 6000 AND 10000 ORDER BY salary DESC LIMIT 3;
这个例子完美地融合了 SELECT、FROM、WHERE、ORDER BY 和 LIMIT,展示了编写结构化、逻辑清晰的sql数据库表查询语句怎么写的基本流程,熟练掌握这些核心子句,您就能应对绝大多数的数据查询需求,在此基础上,还可以进一步学习多表连接(JOIN)、分组聚合(GROUP BY)等高级技巧,解锁更强大的数据分析能力。
相关问答FAQs
Q1: WHERE 和 HAVING 子句有什么区别?
A1: 两者都用于筛选,但作用的阶段和对象不同。WHERE 子句在数据分组之前对表中的原始行进行过滤,它不能使用聚合函数(如 COUNT(), SUM()),而 HAVING 子句则在数据分组之后对每个分组进行过滤,通常与 GROUP BY 子句配合使用,并且可以使用聚合函数来设置筛选条件,简单记:WHERE 筛选行,HAVING 筛选组。
Q2: 什么是子查询?如何在查询中使用它?
A2: 子查询,也称为内部查询或嵌套查询,是嵌套在另一个SQL查询(主查询或外部查询)的 WHERE 子句、FROM 子句或 HAVING 子句中的查询,它允许你使用一个查询的结果作为另一个查询的一部分,要查找薪水高于公司平均薪水的所有员工,可以这样写:
SELECT first_name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
这里,括号内的查询 (SELECT AVG(salary) FROM employees) 就是一个子查询,它先计算出公司平均薪水,然后主查询再基于这个值进行筛选。