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;
我个人习惯是:永远明确写出需要的列名。哪怕只查一列,也老老实实写出来。这样代码可读性强,性能也好,别人一看就知道你要什么。
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 ('北京','上海') |
多个条件还能组合:
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、WHERE、ORDER BY这三个东西,你练熟了,数据库编程就算入门了。下次咱们聊点更高级的查询技巧。
公众号:蓝海资料掘金营,微信deep3321