🧠 总结
| 关键字 | 用途说明 |
|---|---|
GROUP BY |
按列分组,配合聚合函数(如 COUNT, SUM)使用 |
HAVING |
过滤分组后的结果(作用于聚合值) |
ORDER BY |
对查询结果排序(支持 ASC/DESC) |
UNION |
合并多个查询结果,自动去重;UNION ALL 保留重复行 |
INTERSECT |
返回两个查询结果的交集(仅共有的行) |
EXCEPT |
返回第一个查询有、但第二个查询没有的行(差集) |
FOR |
用于格式化输出,如 FOR JSON, FOR XML |
COLLATE |
指定字符串排序规则,例如大小写敏感或语言特定比较 |
GROUP
-- 按指定列分组,通常与聚合函数一起使用。
-- 按部门分组,统计每个部门的人数
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
HAVING
对 GROUP BY 后的结果进行过滤(不能用 WHERE 过滤聚合结果)。
-- 只显示员工人数超过 10 的部门
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;
ORDER BY
对查询结果排序,默认升序(ASC),可指定降序(DESC)。
-- 按薪资从高到低排序
SELECT name, salary
FROM employees
ORDER BY salary DESC;
UNION
使用
UNION ALL可保留重复行。
合并两个查询结果,并自动去重(列数和类型需一致)。
-- 合并员工和外包人员姓名,去除重复
SELECT name FROM employees
UNION
SELECT name FROM contractors;
INTERSECT
返回两个查询结果中都存在的行(交集)。
-- 找出 2025 和 2026 年都卖过的商品
SELECT product_id FROM orders_2025
INTERSECT
SELECT product_id FROM orders_2026;
EXCEPT
返回第一个查询有、但第二个查询没有的行(差集)。
-- 找出非 VIP 的普通客户
SELECT customer_id FROM all_customers
EXCEPT
SELECT customer_id FROM vip_customers;
FOR
用于将查询结果格式化为 JSON 或 XML(SQL Server 特有功能)。
-- 将产品列表输出为 JSON 格式
SELECT id, name
FROM products
FOR JSON AUTO;
常见用法:
FOR JSON PATH,FOR JSON AUTO,FOR XML PATH
COLLATE
指定字符串比较时的排序规则(如区分大小写、语言等)。
-- 区分大小写匹配:'Admin' ≠ 'admin'
SELECT name
FROM users
WHERE name COLLATE SQL_Latin1_General_CP1_CS_AS = 'Admin';
常见规则:
-
_CI_ = Case Insensitive(不区分大小写)-
_CS_ = Case Sensitive(区分大小写)