高级SQL本领详解与实例

[复制链接]
发表于 2026-1-3 06:23:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在数据处置惩罚与分析范畴,高级SQL本领是提升服从与精确性的关键。本文将联合参考资料,对高级SQL本领举行体系的整理与解读,并通过实例展示其应用。
一、窗口函数

窗口函数是一种在SQL中实行复杂盘算的强盛工具,它们答应用户在一组行(称为窗口)上实行盘算,而不会将这些行归并成单个效果行。窗口函数在处置惩罚排名、累计和运行总和等场景中非常有用。
根本语法:
  1. <窗口函数> OVER([PARTITION BY <分区列>][ORDER BY <排序列>])
复制代码
常见窗口函数:

  • ROW_NUMBER():为每一行分配一个唯一的序号。
  • RANK():为每一行分配一个序号,但序号间大概有跳跃(如有两行数据雷同,则它们共享同一序号,下一行的序号将跳过)。
  • DENSE_RANK():为每一行分配一个序号,序号间无跳跃(纵然两行数据雷同,也会为下一行分配一连的序号)。
  • LEAD() 和 LAG():用于访问同一窗口中前一行或后一行的数据。
实例:
  1. SELECT employee_id, department_id, salary,
  2.        ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) AS row_num,
  3.        RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS rank,
  4.        DENSE_RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS dense_rank,
  5.        LAG(salary, 1) OVER(PARTITION BY department_id ORDER BY salary DESC) AS previous_salary
  6. FROM employees;
复制代码
二、递归查询

递归查询答应用户在一个查询中多次引用同一个表,这在处置惩罚树形布局数据(如构造架构、目次布局)时非常有用。
根本语法:
  1. WITH RECURSIVE cte_name AS (
  2.     初始查询
  3.     UNION ALL
  4.     递归查询
  5. )
  6. SELECT * FROM cte_name;
复制代码
实例:
  1. WITH RECURSIVE EmployeeCTE AS (
  2.     SELECT employee_id, manager_id, 1 AS level
  3.     FROM employees
  4.     WHERE manager_id IS NULL
  5.     UNION ALL
  6.     SELECT e.employee_id, e.manager_id, ecte.level + 1
  7.     FROM employees e
  8.     INNER JOIN EmployeeCTE ecte ON e.manager_id = ecte.employee_id
  9. )
  10. SELECT employee_id, employee_name, level
  11. FROM EmployeeCTE
  12. ORDER BY level, employee_id;
复制代码
三、公共表表达式(CTEs)

CTE是一种暂时的效果集,只在单个查询的实行周期内有用。它有助于使复杂查询更加易读和易维护。
根本语法:
  1. WITH cte_name AS (
  2.     查询语句
  3. )
  4. SELECT * FROM cte_name;
复制代码
实例:
  1. WITH SalesCTE AS (
  2.     SELECT employee_id, SUM(amount) AS total_sales
  3.     FROM sales
  4.     GROUP BY employee_id
  5. )
  6. SELECT employee_id, total_sales
  7. FROM SalesCTE
  8. WHERE total_sales > 10000;
复制代码
四、子查询

子查询是嵌套在另一个查询中的查询,常用于筛选条件和数据过滤。
实例:
  1. SELECT employee_id, salary
  2. FROM employees
  3. WHERE salary > (SELECT AVG(salary) FROM employees);
复制代码
五、聚集操纵

聚集操纵答应用户将两个或多个查询效果集举行归并或比力。常见的聚集操纵符包罗UNION、INTERSECT和EXCEPT。
实例:
  1. -- 合并两个查询结果集
  2. SELECT name FROM customers
  3. UNION
  4. SELECT name FROM suppliers;
  5. -- 找出两个查询结果集的交集
  6. SELECT name FROM customers
  7. INTERSECT
  8. SELECT name FROM suppliers;
  9. -- 找出只在第一个查询结果集中存在的记录
  10. SELECT name FROM customers
  11. EXCEPT
  12. SELECT name FROM suppliers;
复制代码
六、其他高级本领


  • 暂时函数:在支持的数据库中(如PostgreSQL),可以界说暂时函数来封装复杂的逻辑,增强代码重用性。
  • 日期时间操纵:包罗日期加减、日期格式转换等。
  • 索引优化:创建得当的索引可以显着进步查询性能。
  • 自联结:一个表与自身举行联结,常用于处置惩罚相对数据。
  • 分页:使用LIMIT子句举行分页查询,镌汰大偏移量
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表