易学社
第二套高阶模板 · 更大气的阅读体验

MySQL数据库查询入门:从基础到实用

发布时间:2025-12-13 13:33:24 阅读:470 次

在日常开发中,数据是系统的核心。无论是电商网站的商品列表,还是社交平台的用户动态,背后都离不开数据的支持。MySQL 作为最流行的开源关系型数据库之一,它的查询语句(SELECT)是我们获取数据的主要方式。

最简单的查询:从一张表里拿数据

假设你正在维护一个小型博客系统,所有文章都存放在名为 articles 的表中。你想查看所有文章的标题和作者,只需要这样写:

SELECT title, author FROM articles;

这条命令会返回 titleauthor 两列的所有数据。如果你不关心具体字段,只想看全部内容,可以用星号代替:

SELECT * FROM articles;

加条件筛选:只查你需要的数据

现实场景中很少需要查全部数据。比如你只想看某个特定作者的文章,比如“张三”,就可以加上 WHERE 条件:

SELECT title, created_at FROM articles WHERE author = '张三';

还可以组合多个条件。例如,查找“张三”在 2024 年之后发表的文章:

SELECT title FROM articles WHERE author = '张三' AND created_at > '2024-01-01';

模糊查找:关键词搜索很常用

有时候记不清完整信息,比如只知道作者名字里带“伟”。这时候可以用 LIKE 配合通配符:

SELECT * FROM articles WHERE author LIKE '%伟%';

这里的百分号(%)代表任意字符出现任意次数。如果想查以“王”开头的名字,可以写 '王%'

排序与限制:让结果更有序

查出来的数据默认是按存储顺序排列的,但通常我们希望最新的在前面。加上 ORDER BY 就能实现:

SELECT title, created_at FROM articles ORDER BY created_at DESC;

DESC 表示降序,也就是时间越近排越前。如果想去掉它变成升序,用 ASC 或者直接省略。

当数据量很大时,可能只想看前几条。比如首页只展示最新 5 篇文章:

SELECT title, author FROM articles ORDER BY created_at DESC LIMIT 5;

去重处理:避免重复干扰

如果只是统计有哪些作者写过文章,而不在乎每人写了多少篇,可以用 DISTINCT 去掉重复值:

SELECT DISTINCT author FROM articles;

这样返回的结果里每个作者只会出现一次。

多表联查:跨表获取关联信息

实际项目中数据往往分布在不同表中。比如用户信息在 users 表,文章在 articles 表,通过 user_id 关联。要查出每篇文章及其作者的邮箱,就得用 JOIN

SELECT a.title, u.email FROM articles a JOIN users u ON a.user_id = u.id;

这里给表起了别名(a 和 u),让语句更简洁。这种内连接(INNER JOIN)只会返回两边都能匹配上的记录。

如果还想包括那些没有对应用户的“孤儿文章”,就得换成左连接:

SELECT a.title, u.email FROM articles a LEFT JOIN users u ON a.user_id = u.id;

这样即使用户不存在,文章也会显示出来,只是邮箱为空。