在数据驱动的时代,数据库是信息系统的核心,而掌握如何与数据库对话则是一项至关重要的技能,这种“对话”主要是通过结构化查询语言(SQL)实现的,最基础也最频繁的操作便是“查看”或“查询”数据库中的数据,本文将系统性地介绍如何使用SQL语句来高效、精确地查看数据库内容,从简单的全表浏览到复杂的数据筛选与排序。

基础查询:SELECT与FROM
所有查询的起点都是SELECT语句,它的核心作用是告诉数据库你想要检索哪些数据,与之搭配的是FROM子句,它指定了数据来自哪张表。
最简单的查询形式是查看表中的所有列和所有行,这通过使用星号()通配符来实现。
SELECT * FROM employees;
这条语句的含义是:“从employees(员工)表中,选择所有的列和所有的行”,执行后,你将看到一个包含该表完整数据的结果集,这在探索不熟悉的表结构时非常有用,但在生产环境中应谨慎使用,因为如果表数据量巨大,这可能会消耗大量系统资源并导致响应缓慢。
为了更精确地查看数据,最佳实践是指定你感兴趣的列名,列名之间用逗号隔开。
SELECT employee_id, first_name, last_name, salary FROM employees;
这条语句只会返回员工的ID、名字、姓氏和薪水,结果更加清晰,网络传输和内存占用也更少。
筛选数据:WHERE子句
我们并不需要查看表中的所有数据,而是希望找到满足特定条件的记录,这时,WHERE子句就派上了用场,它位于FROM子句之后,用于过滤行。
WHERE子句支持多种操作符,
-
比较操作符 (,
>,<,>=,<=,<>或 )
-- 查询薪水大于8000的员工 SELECT employee_id, first_name, salary FROM employees WHERE salary > 8000;
-
逻辑操作符 (
AND,OR,NOT)-- 查询部门ID为10且薪水大于5000的员工 SELECT * FROM employees WHERE department_id = 10 AND salary > 5000;
-
范围操作符 (
BETWEEN ... AND ...)-- 查询薪水在6000到9000之间的员工 SELECT * FROM employees WHERE salary BETWEEN 6000 AND 9000;
-
列表操作符 (
IN)-- 查询部门ID为10或20的员工 SELECT * FROM employees WHERE department_id IN (10, 20);
-
模式匹配 (
LIKE)LIKE用于进行模糊查询,常与通配符(匹配任意多个字符)和_(匹配单个字符)结合使用。-- 查询姓氏以'S'开头的员工 SELECT * FROM employees WHERE last_name LIKE 'S%';
排序结果:ORDER BY子句
默认情况下,查询结果的返回顺序是不确定的,为了使数据更具可读性或便于分析,可以使用ORDER BY子句对结果进行排序,它通常位于WHERE子句(如果存在)之后。
-
升序排序 (
ASC,默认)-- 按薪水从低到高排序 SELECT employee_id, salary FROM employees ORDER BY salary ASC; -- 或者直接写(因为ASC是默认的) SELECT employee_id, salary FROM employees ORDER BY salary;
-
降序排序 (
DESC)-- 按薪水从高到低排序 SELECT employee_id, salary FROM employees ORDER BY salary DESC;
-
多列排序 可以指定多个排序规则,数据库会先按第一列排序,当第一列值相同时,再按第二列排序,依此类推。

-- 先按部门ID升序,再按薪水降序排序 SELECT * FROM employees ORDER BY department_id, salary DESC;
限制数量:LIMIT子句
有时我们只想查看结果集的前几行,查看薪水最高的5名员工,或者进行分页显示,不同的数据库系统提供了不同的语法来实现这一功能。
- MySQL / PostgreSQL / SQLite: 使用
LIMIT-- 查询薪水最高的5名员工 SELECT * FROM employees ORDER BY salary DESC LIMIT 5;
- SQL Server: 使用
TOPSELECT TOP 5 * FROM employees ORDER BY salary DESC;
- Oracle: 使用
FETCH FIRSTSELECT * FROM employees ORDER BY salary DESC FETCH FIRST 5 ROWS ONLY;
为了方便回顾,以下表格小编总结了查询数据库时最常用的几个子句:
| 子句 | 功能 | 示例 |
|---|---|---|
SELECT |
指定要返回的列 | SELECT name, age |
FROM |
指定查询的数据来源表 | FROM users |
WHERE |
根据条件过滤行 | WHERE age > 18 |
ORDER BY |
对结果集进行排序 | ORDER BY name DESC |
LIMIT |
限制返回的行数 | LIMIT 10 |
通过组合使用这些基本语句,你已经可以执行绝大多数日常的数据查看任务,从简单的全表扫描到精准的条件筛选、排序和数量限制,这些工具构成了与数据库进行有效沟通的坚实基础。
相关问答FAQs
*问题1:`SELECT 和SELECT column1, column2` 有什么区别?为什么通常推荐使用后者?**
解答: SELECT * 会返回表中的所有列,而 SELECT column1, column2 只返回你明确指定的列,推荐使用后者的原因主要有三点:
- 性能:只查询需要的列可以减少数据库的I/O操作和网络传输的数据量,尤其是在列很多或数据类型很复杂(如大型文本、二进制数据)的表上,性能提升非常明显。
- 可读性与可维护性:明确列出列名能让代码意图更清晰,其他开发者可以一眼看出查询需要哪些数据,当表结构发生变化(如增加或删除了列)时,
SELECT *可能会导致应用程序出错或产生意外行为,而指定列名则更加稳健。 - 减少资源消耗:查询更少的数据意味着服务器和客户端应用程序需要消耗更少的内存和CPU资源。
问题2:在WHERE子句中, 和 LIKE 有什么不同?
解答: 和 LIKE 都用于字符串比较,但它们的匹配规则不同。
- 是精确匹配,它要求整个字符串的值完全相等。
WHERE last_name = 'Smith'只会匹配姓氏为 "Smith" 的记录,不会匹配 "Smyth" 或 "Smithson"。 LIKE是模式匹配,它允许使用通配符(如 和_)来查找符合特定模式的字符串。 表示零个或多个任意字符,_表示单个任意字符。WHERE last_name LIKE 'S%'会匹配所有以 'S' 开头的姓氏,如 "Smith"、"Smyth"、"Scott" 等;而WHERE last_name LIKE 'Sm_th'则会匹配 "Smith" 和 "Smyth",当你需要进行模糊查找时,应使用LIKE;当需要完全精确匹配时,使用 更高效。