SQL SERVER关键字速查

作者:Keysqiu
创建时间:2026-03-17 16:25:18 最后一次修改时间:2026-03-17 16:42:37
Categories: Tags:

🧠 总结

关键字 用途说明
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(区分大小写)