MySQL 高级(进阶) SQL 语句

server/2025/3/13 1:32:43/

MySQL 是一种功能强大的关系型数据库管理系统。为了有效地利用其高级功能,需要掌握一些进阶的 SQL 语句和技巧。本文将介绍几种常用的高级 SQL 语句,包括窗口函数、子查询、联合查询、复杂的连接操作以及事务处理等。

1. 窗口函数

窗口函数是一种高级的 SQL 功能,用于在查询结果集中计算某些聚合值,同时保留详细数据行。常用的窗口函数包括 ROW_NUMBER()RANK()DENSE_RANK()SUM()AVG() 等。

示例

SELECTemployee_id,department_id,salary,RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) as salary_rank
FROMemployees;
​

此查询为每个部门的员工按薪资排名。

2. 子查询

子查询是嵌套在其他 SQL 语句中的查询,用于解决复杂的查询需求。子查询可以分为标量子查询、多行子查询、多列子查询和相关子查询等类型。

示例

标量子查询
SELECTemployee_id,salary
FROMemployees
WHEREsalary > (SELECT AVG(salary) FROM employees);
​

此查询返回薪资高于平均薪资的员工。

相关子查询
SELECTe1.employee_id,e1.salary
FROMemployees e1
WHEREe1.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
​

此查询返回薪资高于其部门平均薪资的员工。

3. 联合查询

联合查询使用 UNIONUNION ALLINTERSECT 和 EXCEPT 等操作符来合并多个查询的结果集。

示例

SELECTemployee_id,first_name,last_name
FROMemployees
WHEREdepartment_id = 10
UNION ALL
SELECTemployee_id,first_name,last_name
FROMemployees
WHEREdepartment_id = 20;
​

此查询返回部门 ID 为 10 和 20 的所有员工。

4. 复杂连接操作

连接操作是 SQL 查询的基础,但高级的连接操作能够处理更复杂的业务需求。常见的连接类型包括内连接、左连接、右连接、全连接和自连接。

示例

内连接
SELECTe.employee_id,e.first_name,d.department_name
FROMemployees e
INNER JOINdepartments d ON e.department_id = d.department_id;
​

此查询返回所有员工及其所属部门的名称。

自连接
SELECTe1.employee_id AS employee,e2.employee_id AS manager
FROMemployees e1
LEFT JOINemployees e2 ON e1.manager_id = e2.employee_id;
​

此查询返回员工及其经理的对应关系。

5. 事务处理

事务处理是保证数据库操作的原子性、一致性、隔离性和持久性(ACID 属性)的关键。MySQL 支持使用 START TRANSACTIONCOMMIT 和 ROLLBACK 来控制事务。

示例

START TRANSACTION;UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;UPDATE accounts
SET balance = balance + 100
WHERE account_id = 2;-- 检查条件,决定提交还是回滚
IF (condition) THENCOMMIT;
ELSEROLLBACK;
END IF;
​

此事务示例实现了从一个账户转账到另一个账户的操作。

6. 分区表

分区表是将大表的数据分成更小的、易于管理的部分。分区可以提高查询性能和管理效率。

示例

创建分区表:

CREATE TABLE sales (id INT,sale_date DATE,amount DECIMAL(10, 2)
)
PARTITION BY RANGE (YEAR(sale_date)) (PARTITION p0 VALUES LESS THAN (2020),PARTITION p1 VALUES LESS THAN (2021),PARTITION p2 VALUES LESS THAN (2022)
);
​

此示例根据销售日期年份对表进行分区。

文章来源:https://blog.csdn.net/yyytucj/article/details/145366215
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/server/164507.html

相关文章

快速分析LabVIEW主要特征进行判断

在LabVIEW中,快速分析程序特征进行判断是提升开发效率和减少调试时间的重要技巧。本文将介绍如何高效地识别和分析程序的关键特征,从而帮助开发者在编写和优化程序时做出及时的判断,避免不必要的错误。 ​ 数据流和并行性分析 LabVIEW的图形…

编程AI深度实战:大模型知识一文打尽

系列文章: 编程AI深度实战:私有模型deep seek r1,必会ollama-CSDN博客 编程AI深度实战:自己的AI,必会LangChain-CSDN博客 编程AI深度实战:给vim装上AI-CSDN博客 编程AI深度实战:火的编程AI&…

[LeetCode]day9 203.移除链表元素

203. 移除链表元素 - 力扣(LeetCode) 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], v…

信号处理以及队列

下面是一个使用C和POSIX信号处理以及队列的简单示例。这个示例展示了如何使用信号处理程序将信号放入队列中&#xff0c;并在主循环中处理这些信号。 #include <iostream> #include <csignal> #include <queue> #include <mutex> #include <thread…

动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)

概览检索 动态规划DP 概览&#xff08;点击链接跳转&#xff09; 动态规划DP 背包问题 概览&#xff08;点击链接跳转&#xff09; 完全背包问题 原题链接 AcWiing 3. 完全背包问题 题目描述 有 N种物品和一个容量是 V的背包&#xff0c;每种物品都有无限件可用。 第 i种物…

3b1b线性代数基础

零、写在前面 3b1b之前没认真看&#xff0c;闲了整理整理。 一、向量 学习物理的时候&#xff0c;向量是空间中的箭头。由其方向和长度决定。 学习数据结构的时候&#xff0c;向量是有序的数字列表。向量的每一维度有着不同含义。 线性代数中&#xff0c;我们通常认为**向量…

【回溯+剪枝】回溯算法的概念 全排列问题

文章目录 46. 全排列Ⅰ. 什么是回溯算法❓❓❓Ⅱ. 回溯算法的应用1、组合问题2、排列问题3、子集问题 Ⅲ. 解题思路&#xff1a;回溯 剪枝 46. 全排列 46. 全排列 ​ 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 …

网站结构优化:加速搜索引擎收录的关键

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/9.html 网站结构优化对于加速搜索引擎收录至关重要。以下是一些关键策略&#xff0c;旨在通过优化网站结构来提高搜索引擎的抓取效率和收录速度&#xff1a; 一、合理规划网站架构 采用扁…