IT/开发指南 25 min read

SQL 基础:从数据库中提取核心信息的关键查询指南

Author

数据分析编辑

12月31日发布

复杂的数据库网格与代码屏幕

在数据即资产的时代,企业每天都会产生数万亿字节的数据。我们在这汪洋大海中奋力拼搏,只为获得有意义的洞察。而 SQL (Structured Query Language,结构化查询语言) 正是能让我们从海量数据中准确捕捉所需信息的利器。

SQL 与其说是复杂的编程语言,不如说更接近于一种与数据库“对话”的语言。当你请求“显示居住在北京且年龄在 20 多岁的会员的电子邮箱”时,SQL 能够立即为你呈现结果。今天,我们将深入探讨 SQL 中最基础但也最强大的功能:“数据提取”。

1. SQL 的核心:SELECT 与 FROM

所有数据提取的起点都是 SELECT 和 FROM。这两个词决定了“获取什么 (SELECT)”以及“从哪里获取 (FROM)”。

例如,假设有一张包含全体员工名单的 employees 表。若想查看所有员工的信息,可以使用 通配符 (*)。

SELECT * FROM employees;

但在实际工作中,一次性调取所有信息是非常低效的。如果数据量达到数百万,可能会导致系统过载。因此,我们应该养成只指定所需 列 (Column) 的习惯。有选择性地查询特定项是优化的第一步。

SELECT first_name, last_name, email FROM employees;

上述代码仅筛选出姓、名和电子邮箱。这不仅更整洁,运行速度也更快。根据 官方文档,这种显式声明能同时提高查询的可读性和性能。相关的详细语法可以在 W3Schools SQL 教程 中查看。

数据分析仪表板图形

2. 过滤所需条件:WHERE 子句

除了选择列之外,当你只想筛选出满足特定条件的 行 (Row) 时,就需要使用 WHERE 子句。WHERE 子句在数据过滤中扮演着核心角色,被誉为 SQL 的精髓。

基本比较运算符的应用

最基本的过滤是直接比较数字或字符。通过使用 比较运算符,可以精准地过滤数据。

  • =
    等于: 寻找与特定值完全匹配的数据。(例如:WHERE department = 'Sales')
  • != 或 <>
    不等于: 查询除特定值以外的其余数据。
  • >, <, >=, <=
    大小比较: 用于指定数字或日期的范围。(例如:WHERE salary > 50000)
“擅长设置条件的查询编写者能够减轻数据库负担,并为组织的快速决策提供支持。”

3. 复合条件的完成:AND, OR, NOT

现实中的业务问题往往没那么简单。很多时候需要寻找“住在北京 (条件 1),且去年购买次数超过 3 次 (条件 2) 的 VIP 会员 (条件 3)”。这时就需要结合 逻辑运算符。

逻辑运算符使用方法

  • ✅
    AND: 必须同时满足所有条件。适用于搜索范围最窄的情况。
  • ➕
    OR: 满足多个条件之一即返回结果。用于扩大搜索范围。
  • 🚫
    NOT: 筛选出不符合特定条件的数据。

使用复合条件时,括号 () 的使用至关重要。与数学运算类似,SQL 也有运算符优先级,AND 的计算优先级高于 OR。因此,为了按意图进行过滤,必须合理放置括号以确保可读性和准确性。

4. 字符串模式探索:LIKE 与通配符

当不知道准确值,或者想寻找类似模式的文本时,可以使用 LIKE 运算符。其运行方式类似于搜索引擎的搜索功能。

通配符的魔力

% (百分号) 表示任意数量的字符。_ (下划线) 则仅表示一个字符。

  • 'Zhang%': 以 'Zhang' 开头的所有字符串 (Zhang, Zhang-san, Zhang-wei 等)
  • '%son': 以 'son' 结尾的所有字符串 (Johnson, Harrison 等)
  • '%data%': 包含 'data' 一词的所有字符串
  • 'A_': 以 'A' 开头且仅有两个字符的字符串

该功能在搜索客户地址、商品名称关键词等方面威力巨大。但请注意,在字符串开头添加通配符 ('%keyword') 的方式无法使用索引,会导致搜索速度显著变慢,在处理大数据量时需谨慎。

表现服务器与数据通信的抽象图像

5. 范围与列表搜索:BETWEEN 与 IN

编写高可读性的查询是协作的基础。BETWEEN 和 IN 能让复杂的逻辑结构变得简单。

BETWEEN: 范围查询的优化

在寻找特定日期之间的销售额或特定分数段的学生时非常有用。

SELECT * FROM orders WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31';

这与 order_date >= '2025-01-01' AND order_date <= '2025-12-31' 的运行结果完全一致,但更易读。

IN: 同时比较多个值

若想一次性查询多个地区或多个等级,请使用 IN 而不是滥用 OR。

SELECT * FROM customers WHERE city IN ('Beijing', 'Shanghai', 'Guangzhou');

代码精简后,犯错的概率会降低,也更便于他人分析您的查询。

6. 处理空白信息:IS NULL

数据库中经常会出现信息缺失的情况,这被称为 NULL。重点在于 NULL 既不是 0,也不是空字符串 ('')。它表示“值不存在”本身。

因此,WHERE column = NULL 这种表达式是无效的。必须使用 IS NULL 或 IS NOT NULL。

SELECT * FROM members WHERE phone_number IS NULL;

在筛选出未注册联系方式的会员并引导其注册营销手段时,这是必不可少的语法。在 数据质量管理 (Data Quality Management) 方面,妥善处理 NULL 数据是决定分析可靠性的重要因素。

7. 数据去重与限制:DISTINCT 与 LIMIT

选定所需列后,如果结果过于庞大或重复结果较多,请利用 DISTINCT 和 LIMIT。

DISTINCT (去重)

从查询结果中移除重复行,仅保留一行。在只想了解服务客户居住的“城市种类”时非常有用。

LIMIT (限制结果数量)

仅获取前 N 条数据。常用于查看“最近注册的 5 名用户”或“销量前 10 的商品”,防止加载不必要的数据。

8. 提高结果可读性的排序:ORDER BY

提取数据的最后一步是进行美观的排序。ORDER BY 默认按升序 (ASC) 排序,必要时可以指定降序 (DESC)。

SELECT product_name, price FROM products ORDER BY price DESC LIMIT 5;

这是按顺序显示最贵 5 件商品的查询。您还可以 设置多个排序标准。例如 ORDER BY category ASC, price DESC 会先按类别分组,然后在组内按价格从高到低显示。

结语:数据分析的语言,SQL

至此,我们已经了解了从数据库中精准提取所需信息的基础查询语句。从 SELECT, WHERE, LIKE, BETWEEN, IN, IS NULL 到 ORDER BY。只要熟练掌握这几样工具,您就能在企业的海量数据中亲自发掘出如宝藏般的洞察。

重要的是不仅要了解理论,还要亲自运行查询。与数据库的对话越练习越精妙,这将极大地提高您的工作效率。如果您对 更专业的技巧 感兴趣,请参考 MySQL 官方文档 以进一步深造。

与 FreeImgFix.com 一起成长为数据专家!