当前位置: 首页 > news >正文

SQL查询知识点速记

SQL查询

写法顺序:

SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

执行顺序:

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

一、基础查询

语句/函数

作用

用法

示例

SELECT

查询指定列

SELECT 列1, 列2 FROM 表

SELECT customer_name, city FROM customers

DISTINCT

去重

SELECT DISTINCT 列 FROM 表

SELECT DISTINCT city FROM customers

LIMIT

限制返回行数

... LIMIT 数字

SELECT * FROM orders LIMIT 3

WHERE

条件筛选

WHERE 列 运算符 值

WHERE amount > 1000

AND / OR

多条件组合

WHERE 条件1 AND 条件2

WHERE city = '北京' AND amount > 1000

IN

匹配多个值之一

WHERE 列 IN (值1, 值2)

WHERE city IN ('北京', '上海')

BETWEEN

范围匹配(含边界)

WHERE 列 BETWEEN 小值 AND 大值

WHERE amount BETWEEN 100 AND 1000

LIKE

模糊匹配

WHERE 列 LIKE '%关键词%'

WHERE customer_name LIKE '张%'

IS NULL/IS NOT NULL

判断是否为空

WHERE 列 IS NULL

WHERE salary IS NULL

⚠️ 易错提醒:

  • IS只能配 NULL!等值判断用=不用IS(如city = '北京'√,city IS '北京'×)
  • OR两侧都要写完整条件:city = '北京' OR city = '广州'√,city = '北京' OR '广州'×
  • BETWEEN包含两端边界值

二、排序与分组聚合

语句/函数

作用

用法

示例

ORDER BY

排序

ORDER BY 列 ASC/DESC

ORDER BY amount DESC

GROUP BY

分组

GROUP BY 列1, 列2

GROUP BY customer_id

COUNT(*)

统计行数

COUNT(*)

SELECT COUNT(*) FROM orders

COUNT(DISTINCT 列)

去重统计

COUNT(DISTINCT 列)

COUNT(DISTINCT customer_id)

SUM(列)

求和

SUM(amount)

SUM(amount)

AVG(列)

求平均

AVG(salary)

AVG(salary)

MAX(列) / MIN(列)

最大/最小值

MAX(order_date)

MAX(order_date)

HAVING

分组后筛选

HAVING 聚合条件

HAVING SUM(amount) > 1000

⚠️ 易错提醒:

  • GROUP BY 规则:SELECT 中每个非聚合列都必须放进 GROUP BY
  • 记法:「每个XX的…」→ GROUP BY XX,「的」后面的是聚合结果不是分组依据
  • 别名能用在哪:ORDER BY✅、HAVING✅、GROUP BY
  • 子句顺序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
  • COUNT(*)不会返回 NULL,不需要包 IFNULL
  • 只要用聚合函数就要分组,且SELECT 中每个非聚合列都必须放进分组
  • WHERE不能放聚合函数 → 用HAVING
  • ORDER BY 只能写一次,多个排序字段用逗号分隔

三、连接查询

语句

作用

用法

示例

INNER JOIN

只返回匹配的行

表A JOIN 表B ON 条件

orders o JOIN customers c ON o.customer_id = c.customer_id

LEFT JOIN

左表全保留,右表无匹配为 NULL

表A LEFT JOIN 表B ON 条件

customers c LEFT JOIN orders o ON c.customer_id = o.customer_id

⚠️ 易错提醒:

  • JOIN后面写ONON c.customer_id = o.customer_id√,不要用WHERE×
  • 左表选择:从主体出发("查询所有客户"→ customers 放左边)

四、子查询

类型

作用

用法

示例

WHERE 子查询·单值

返回一个值供比较

WHERE 列 > (SELECT AVG(...))

WHERE amount > (SELECT AVG(amount) FROM orders)

WHERE 子查询·列表

返回一列值供 IN 判断

WHERE 列 IN (SELECT ...)

WHERE customer_id IN (SELECT customer_id FROM orders)

FROM 子查询

把查询结果当临时表

FROM (SELECT ...) AS 别名

FROM (SELECT SUM(amount) FROM orders GROUP BY customer_id) AS t

⚠️ 易错提醒:

  • FROM 子查询必须起别名:FROM (子查询) AS t
  • FROM 子查询可以继续 JOIN 其他表:customers c LEFT JOIN (子查询) t ON ...
  • 嵌套子查询从内往外写,先确认内部结果对不对

五、条件分支

语句

作用

用法

示例

CASE WHEN

SQL 里的 if-else

CASE WHEN 条件 THEN 结果 ELSE 默认 END

CASE WHEN amount > 5000 THEN '高' ELSE '低' END

CASE WHEN + GROUP BY

分组后的条件判断

CASE WHEN SUM(列) >= 值 THEN ...

CASE WHEN SUM(amount) >= 5000 THEN 'VIP' ELSE '普通' END

⚠️ 易错提醒:

  • CASE WHEN 条件从严格到宽松(VIP > 普通 > 低消)
  • 有 GROUP BY 时,条件里用WHEN SUM(amount) >= 5000不是WHEN amount >= 5000
  • 别名只写在END后面:... END AS 等级√,AS 等级 ... END×
  • CASE WHEN 前一个条件不满足时,自动去匹配下一条件,直接case when salary>5000 then 结果 when salary>2000 then 结果 else 结果

六、数值函数

函数

作用

用法

示例

ROUND(数值, 位数)

四舍五入

ROUND(列, 小数位数)

ROUND(AVG(salary), 2)

ROUND 负数精度

整数位四舍五入

ROUND(列, -位数)

ROUND(5678, -2)→ 5700

⚠️ 易错提醒:

  • 先 AVG 再 ROUND:ROUND(AVG(...), 2)√,AVG(ROUND(...))×
  • ORDER BY 里可以用别名:ORDER BY 平均工资
  • GROUP BY 里不可以用别名

七、日期函数

函数

作用

用法

示例

DATE_FORMAT(日期, 格式)

日期格式化

DATE_FORMAT(order_date, '%Y-%m')

DATE_FORMAT(order_date, '%Y-%m')→ 2026-01

NOW()

当前时间

NOW()

WHERE order_date >= DATE_SUB(NOW(), INTERVAL 30 DAY)

DATE_SUB(日期, INTERVAL N 单位)

日期加减

DATE_SUB(NOW(), INTERVAL 30 DAY)

当前时间往前推30天

格式符:%Y四位年份、%m两位月份、%d两位日期、%m月中文格式也可用

八、NULL 处理

函数

作用

用法

示例

IFNULL(值, 默认)

NULL 替换(两个参数)

IFNULL(列, 0)

IFNULL(SUM(amount), 0)

COALESCE(值1, 值2, ...)

返回第一个非 NULL(多个参数)

COALESCE(列1, 列2, 保底)

COALESCE(salary, bonus, 0)

九、字符串函数

函数

作用

用法

示例

CONCAT(a, b, ...)

拼接字符串

CONCAT(列, '文本', 列)

CONCAT(customer_name, '来自', city)

SUBSTRING(字符串, 起始, 长度)

截取子串

SUBSTRING(email, 1, 5)

SUBSTRING(email, 1, LOCATE('@', email)-1)

REPLACE(字符串, 旧, 新)

替换字符

REPLACE(email, '@qq.com', '@company.com')

REPLACE(email, '@qq.com', '@company.com')

LENGTH(字符串)

字符数

LENGTH('你好')→ 2

LENGTH(customer_name)

UPPER(字符串) / LOWER(字符串)

大小写转换

UPPER(email)

UPPER(SUBSTRING(email, 1, 3))

TRIM(字符串)

去除首尾空格

TRIM(' abc ')→ 'abc'

TRIM(city)

LOCATE(要找的, 从哪里找)

返回位置

LOCATE('@', email)→ 9

LOCATE('@', email)

⚠️ 易错提醒:

  • 列名不加引号,文本加引号:CONCAT(customer_name, '文本', city)
  • 函数可以嵌套,从内往外执行

UNION 核心总结:

语句

作用

注意

UNION

合并 SELECT 结果 + 去重

列数必须相同,性能比 UNION ALL 稍差

UNION ALL

合并 SELECT 结果,不去重

性能更好,不需要去重时优先用

固定文本 AS 列名

给每组数据打标签

SELECT '高消费' AS 等级

UNION 的主要使用场景:

  • 合并不同表的结构相同的数据
  • 给每组数据打不同标签再合并(分类报表)
  • 不能用一个 WHERE 或 JOIN 简单替代时才值得用
http://www.jsqmd.com/news/1132552/

相关文章:

  • 2026年AI写作辅助平台深度评测:6款工具合规过检得分排名
  • 2026年电脑录音软件推荐:办公场景实测对比,谁才是智能易用王者
  • 最后,我再聊聊我新近观察的一个项目的运作,来分享一下我的第三层认识。
  • 从陇剑杯CTF实战解析Web渗透与应急响应的核心技能
  • 非对称加密原理深度解析:从RSA/ECC算法到HTTPS、区块链实战应用
  • VIA键盘配置终极指南:从新手到高手的完全手册
  • 太原考公考编线下班口碑红黑榜:2026学员真实评价背后的选班避坑指南
  • 邮箱验证实战:基于ApiZero检测API从原理到代码一网打尽
  • InstructGPT 论文阅读笔记
  • AI工程化实践:用HTML替代Figma构建可交互智能体
  • USB设备共享终极指南:usbipd-win完整教程
  • QMCDecode终极指南:3步解锁QQ音乐加密音频,实现音乐格式自由转换
  • 微信聊天记录永久保存完整指南:让数据真正属于你
  • 扩展管理器
  • 用九宫格切图API打造爆款朋友圈:从原理到代码实战
  • 拉普拉斯展开实战指南:零基础掌握行列式策略性手算
  • 从 AI 套图开始,下一步可以做什么?
  • 视频帧率插值工具的技术解析与应用实践:从24fps到60fps的完美蜕变指南
  • 异型/单曲/双曲铝单板选型区别及造价施工工艺指南
  • 2026超稳国内AI中转API平台|支持GPT/Claude/Gemini/Codex 免费可用
  • 终极指南:如何在Mac上轻松制作Windows启动盘并绕过系统限制
  • 移动端图片浏览体验差?这个Vue组件让你告别卡顿和等待
  • 3分钟掌握Deforum动画生成:Stable Diffusion终极视频创作指南
  • 企业级AI Agent平台架构设计:从概念到生产环境的工程实践
  • Jeepay企业级分布式支付系统:面向电商平台的高性能聚合支付解决方案
  • 猫抓:当浏览器拥有“火眼金睛“,网页资源无处遁形
  • 凭什么要用面向对象编程(补充)
  • 输电线异物检测数据集725张VOC+YOLO格式
  • 【Qwen3.6-27B技术解析】27B稠密模型如何用混合架构击败397B MoE
  • PingFangSC字体包:让Windows系统也能享受苹果级别的中文排版体验