sql基础查询核心是 select…FROM…,搭配 WHERE、ORDER BY、GROUP BY 等子句覆盖 80% 需求;查单表需明确列名、注意 字符串 引号与空格;多表用 LEFT JOIN 防 数据丢失 且必写 ON;聚合须 GROUP BY 非聚合字段,HAVING 筛分组;排序后加 LIMIT/TOP 取前 N 条。

SQL 基础查询核心就一条语句:SELECT … FROM …,搭配 WHERE、ORDER BY、GROUP BY 等子句就能覆盖 80% 的日常取数需求。不复杂,但细节决定能不能查得准、查得快。
查单张表:最常用也最容易出错
比如查用户表里所有北京的 VIP 用户:
- SELECT * 能用但慎用——字段多、性能差、后续改逻辑易出错,建议明确写列名,如 SELECT user_id, name, city
- WHERE city = ‘ 北京 ’ AND is_vip = 1 —— 字符串加单引号,数字不用;多个条件用 AND/ OR 连接
- 注意大小写和空格:’ 北京 ’ ≠ ‘ 北京 ‘(末尾有空格),可用 TRIM(city) = ‘ 北京 ’ 防一手
查多张表:JOIN 是关键,别只记得 INNER
想看每个订单对应的用户姓名,需关联 orders 和 users 表:
- INNER JOIN:只返回两表都匹配的记录(比如没填收货信息的订单会被漏掉)
- LEFT JOIN 更常用:以 orders 为主,即使 users 找不到对应用户,订单数据仍保留,user_name 显示为 NULL
- 必须写 ON o.user_id = u.id,别漏 ON 条件,否则变笛卡尔积——1 万订单 × 1 万用户 = 1 亿行!
聚合统计:count/SUM/AVG 不是“算完就完”
统计各城市的订单总数、平均金额:
- 用 GROUP BY city 分组,SELECT 里所有非聚合字段(如 city)都得出现在 GROUP BY 中
- COUNT(*) 统计行数,COUNT(user_id) 会自动忽略 NULL 值,选哪个看业务定义
- 加 HAVING COUNT(*) > 100 筛分组结果(WHERE 是筛行,HAVING 是筛组)
排序与限制:别让结果“飘着”
查最近 10 笔高金额订单:
- ORDER BY amount DESC —— DESC 降序(默认 ASC 升序),按金额从高到低排
- LIMIT 10(mysql/postgresql)或 TOP 10(SQL Server)取前 N 条
- 注意:LIMIT 要写在 ORDER BY 后面,否则先截断再排序,结果就不是“最近 10 笔”了
基本上就这些。写 SQL 别 堆功能,先确保能跑通、结果对,再考虑优化。字段别偷懒写 *,JOIN 别忘 ON,GROUP BY 别漏字段——踩过坑,自然就熟了。