SQL中的连接,分组,聚合函数详解

news/2025/3/16 22:21:07/文章来源:https://www.cnblogs.com/cqx-test/p/18775834

在 SQL 中,连接(JOIN)、分组(GROUP BY) 和 聚合函数(Aggregate Functions) 是处理复杂查询的核心功能。以下是对这些功能的详细说明和示例:

 

1. 连接(JOIN)
连接用于从多个表中组合数据。常见的连接类型包括:

【INNER JOIN】
返回两个表中匹配的记录。
示例:
sql
SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;

【LEFT JOIN】
返回左表中的所有记录,即使右表中没有匹配的记录。
示例:
sql
SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

【RIGHT JOIN】
返回右表中的所有记录,即使左表中没有匹配的记录。
示例:
sql
SELECT users.name, orders.amount
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

【FULL OUTER JOIN】
返回两个表中的所有记录(MySQL 不支持,可用 `UNION` 替代)。
示例:
sql
SELECT users.name, orders.amount
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;

【CROSS JOIN】
返回两个表的笛卡尔积(所有可能的组合)。
示例:
sql
SELECT users.name, orders.amount
FROM users
CROSS JOIN orders;

 

2. 分组(GROUP BY)
分组用于将数据按某列或某些列的值进行分组,通常与聚合函数一起使用。

基本语法
sql
SELECT column1, column2, aggregate_function(column3)
FROM table
GROUP BY column1, column2;

示例
sql
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

 

3. 聚合函数(Aggregate Functions)
聚合函数用于对一组值进行计算并返回单个值。常见的聚合函数包括:

【COUNT】
统计行数。
示例:
sql
SELECT COUNT(*) FROM users;

【SUM】
计算某列的总和。
示例:
sql
SELECT SUM(amount) FROM orders;

【AVG】
计算某列的平均值。
示例:
sql
SELECT AVG(age) FROM users;

【MIN】
查找某列的最小值。
示例:
sql
SELECT MIN(age) FROM users;

【MAX】
查找某列的最大值。
示例:
sql
SELECT MAX(age) FROM users;

 

4. 分组与聚合函数的结合使用
分组和聚合函数通常一起使用,以对分组后的数据进行统计。

示例 1:按部门统计员工数量
sql
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

示例 2:按部门统计平均工资
sql
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

示例 3:按部门统计最高和最低工资
sql
SELECT department, MAX(salary) AS max_salary, MIN(salary) AS min_salary
FROM employees
GROUP BY department;

 

5. 分组后的过滤(HAVING)
`HAVING` 用于对分组后的结果进行过滤,类似于 `WHERE`,但用于分组后的数据。

示例:筛选出员工数量大于 10 的部门
sql
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

 

6. 连接、分组和聚合函数的综合应用
在实际查询中,连接、分组和聚合函数可以结合使用,以处理复杂的业务逻辑。

示例:统计每个用户的订单总金额
sql
SELECT users.name, SUM(orders.amount) AS total_amount
FROM users
INNER JOIN orders ON users.id = orders.user_id
GROUP BY users.name;

示例:统计每个部门的平均工资,并筛选出平均工资大于 5000 的部门
sql
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;

 

总结
- 连接(JOIN):用于从多个表中组合数据。
- 分组(GROUP BY):用于将数据按某列或某些列的值进行分组。
- 聚合函数:用于对一组值进行计算并返回单个值。
- HAVING:用于对分组后的结果进行过滤。

掌握这些功能可以帮助你编写复杂的 SQL 查询,从而更好地完成数据分析和验证任务。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(18).命令模式

命令模式 命令模式的核心思想是将请求封装为个对象,将其作为命令发起者和接收者的中介,而抽象出来的命令对象又使得能够对一系列请求进行操作,如对请求进行排队,记录请求日志以及支持可撤销的操作等。命令模式参与者:◇命令的执行者(接收者Receiver):它单纯的只具体实现了功…

学嵌入式C语言,看这一篇就够了(5)

C语言的运算符 学习编程语言,应该遵循“字-->词-->句-->段--->章”,对于一条有意义的语句而言,是离不开标点符号的运算符指明要进行的运算和操作,操作数是指运算符的操作对象,根据运算符操作数的数目不同,C语言标准把运算符分为三种:单目运算符(一元运算符…

20242313 2024-2025-2 《Python程序设计》实验一报告

20242313 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级:2423 姓名:曾海鹏 学号:20242313 实验教师:王志强 实验日期:2025年3月16日 必修/选修:公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并…

nn.Embedding()函数详解

nn.Embedding()函数详解 nn.Embedding()函数:随机初始化词向量,词向量在正态分布N(0,1)中随机取值 输入: torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None) num…

htb Authority

端口扫描 nmap -sC -sV -p- -Pn -T4 10.10.11.222 Starting Nmap 7.92 ( https://nmap.org ) at 2024-10-04 19:42 CST Nmap scan report for 10.10.11.222 (10.10.11.222) Host is up (0.40s latency). Not shown: 65506 closed tcp ports (reset) PORT STATE SERVICE …

蓝桥杯14届省B

蓝桥杯14届省赛B组A:int a[105]; int day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//记录每个月有多少天 set<int> st;//记录不重复的日期void check(int mm,int dd){if (mm>12||mm<1||dd<1||dd>day[mm]) return;else st.insert(mm*100+dd);//st存日期 …

docker 安装 oracle database 问题记录

pre本地docker (WSL)安装运行 Oracle1. 镜像处理参考链接:https://www.cnblogs.com/wuchangsoft/p/18344847 oracle 镜像获取:https://container-registry.oracle.com/ords/f?p=113:10:::::: (Oracle官网,由于部分问题导致直接pull无法拉取) 阿里云,参考链接里有个个人19…

20242103 实验一《Python程序设计》实验报告

20242103 《Python程序设计》实验1报告 课程:《Python程序设计》 班级: 2421 姓名: 李雨虓 学号:20242103 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容: 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试…

20241313 2024-2025-2 《Python程序设计》实验一报告

20241313 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2413 姓名: 刘鸣宇 学号:20241313 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

mutatingwebhook的简单实例

一. k8s集群准备 这里不再赘述k8s集群搭建。主要注意参数:kubectl get po kube-apiserver-server -n kube-system -o yaml | grep plugin 预期结果为:- --enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook 至少要拥有两个参数…