🧠 总结
| 关键字 | 用途 |
|---|---|
GROUP BY |
分组聚合 |
HAVING |
过滤分组结果 |
ORDER BY |
排序结果 |
UNION |
合并结果集(去重) |
INTERSECT |
交集 |
EXCEPT |
差集 |
FOR |
游标操作(PL/SQL) |
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(区分大小写)