SQL基础查询怎么写_高频场景实例讲解便于理解使用【教程】

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 别漏字段——踩过坑,自然就熟了。