6、数据查询基础:SELECT语句、查询所有列与指定列、WHERE子句、ORDER BY排序

说实话,数据库编程里最核心的操作就是查询。你写再多插入、更新、删除,最后不就是为了把数据查出来用吗?我做了这么多年嵌入式数据库开发,敢说90%的SQL语句都是SELECT。今天咱们就把这个基本功彻底聊透。

6.1 SELECT语句:一切查询的起点

SELECT的语法其实特别简单,就一句话:你想从哪张表里拿哪些数据。我刚开始学的时候,觉得这东西太小儿科了。后来才发现,真正的高手能把SELECT玩出花来。

最基本的格式长这样:

SELECT 列名 FROM 表名;

就这么简单。你告诉数据库:「嘿,我要看这张表的这些列。」数据库就会乖乖把数据吐出来。

6.2 查询所有列 vs 查询指定列

这里有个小坑,我当年踩过。先看两种写法:

查询所有列:用 * 号

SELECT * FROM employees;

这个星号代表「所有列」。方便是真方便,但我要提醒你——别在生产环境随便用。为什么?

我曾经在一个项目里,表有30多列,同事直接用SELECT *。结果网络传输慢得要命,嵌入式设备内存又小,直接卡死了。你想想看,你只需要两三个字段,却把整张表几十列全拉回来,这不是浪费资源吗?

查询指定列:列名一个一个写

SELECT name, age, salary FROM employees;

我个人习惯是:永远明确写出需要的列名。哪怕只查一列,也老老实实写出来。这样代码可读性强,性能也好,别人一看就知道你要什么。

小技巧:在调试阶段可以用SELECT *快速看数据,但提交代码前一定要改成指定列。我一般会在代码审查时专门盯着这个点。

6.3 WHERE子句:给查询加个筛子

没有WHERE的SELECT,就像去超市把整个货架搬回家——太粗暴了。WHERE子句就是你的筛子,只拿你想要的。

SELECT name, age, salary 
FROM employees 
WHERE age > 30;

这里只返回年龄大于30的员工。WHERE后面可以跟各种条件:

运算符 说明 示例
= 等于 WHERE name = '张三'
> 大于 WHERE salary > 5000
< 小于 WHERE age < 25
>= 大于等于 WHERE score >= 60
<= 小于等于 WHERE price <= 100
<> 或 != 不等于 WHERE status <> '离职'
BETWEEN 在范围内 WHERE age BETWEEN 20 AND 40
LIKE 模糊匹配 WHERE name LIKE '张%'
IN 在集合中 WHERE city IN ('北京','上海')
注意:字符串比较要加单引号!我见过太多新手写 WHERE name = 张三,结果报错。记住,字符串和日期都要用引号包起来。

多个条件还能组合:

SELECT name, age, salary 
FROM employees 
WHERE age > 25 AND salary > 8000;

AND表示「并且」,OR表示「或者」。嗯,这里要注意优先级——AND比OR优先级高。如果你搞混了,加个小括号就行:

SELECT * FROM employees 
WHERE (age > 30 OR salary > 10000) 
  AND status = '在职';

6.4 ORDER BY排序:让数据排好队

查出来的数据默认是乱序的,按数据库内部存储顺序返回。但谁看数据不想看个排序呢?

SELECT name, salary 
FROM employees 
ORDER BY salary DESC;

DESC表示降序(从大到小),ASC表示升序(从小到大,默认)。

还可以多列排序:

SELECT name, department, salary 
FROM employees 
ORDER BY department ASC, salary DESC;

这个意思是:先按部门升序排,同一个部门里再按工资降序排。我在做报表时经常这么用,特别清晰。

6.5 综合实战:一个完整的查询

咱们把今天学的串起来,写个完整的例子:

-- 查询在职员工中,工资在8000以上、年龄30到50之间的
-- 按工资从高到低排序
SELECT 
    name AS 姓名,
    age AS 年龄,
    salary AS 工资,
    department AS 部门
FROM employees
WHERE 
    status = '在职'
    AND salary >= 8000
    AND age BETWEEN 30 AND 50
ORDER BY salary DESC;

你看,SELECT、WHERE、ORDER BY一气呵成。这就是日常开发中最常见的查询模式。

核心要点:
  • SELECT指定要查哪些列
  • WHERE过滤行数据
  • ORDER BY控制输出顺序
  • 三者的顺序不能乱:SELECT → FROM → WHERE → ORDER BY

6.6 知识体系总览

下面这张图把今天的内容串起来了,你可以对照着理一理思路:

SELECT 查询知识体系 SELECT 查询 查询列 SELECT * SELECT 列名 WHERE 条件过滤 比较运算符 AND / OR BETWEEN / LIKE ORDER BY 排序 ASC 升序 DESC 降序 完整语法顺序:SELECT → FROM → WHERE → ORDER BY 三者组合使用,实现精准、高效的数据查询

这张图把今天讲的三个核心模块都画出来了。你写查询的时候,就按这个流程走:先想查哪些列,再想过滤条件,最后决定排序方式。顺序别搞反了就行。

我的经验:写复杂查询时,我习惯先写SELECT * FROM 表名 WHERE ...,先看数据对不对。确认过滤条件没问题后,再把*改成具体列名,最后加ORDER BY。一步一步来,不容易出错。

好了,今天的内容就这些。SELECT、WHERE、ORDER BY这三个东西,你练熟了,数据库编程就算入门了。下次咱们聊点更高级的查询技巧。


公众号:蓝海资料掘金营,微信deep3321