MySQL 查询技巧大揭秘:分组、聚合与联合查询

MySQL 查询技巧大揭秘:分组、聚合与联合查询在数据库的世界里 MySQL 是当之无愧的明星产品 被广泛应用于各类项目中 今天 咱们就来深入聊聊 MySQL 中非常实用的分组查询 聚合查询以及联合查询 看看它们如何帮助我们从海量数据里精准捞出所需信息

欢迎大家来到IT世界,在知识的湖畔探索吧!

在数据库的世界里,MySQL 是当之无愧的明星产品,被广泛应用于各类项目中。今天,咱们就来深入聊聊 MySQL 中非常实用的分组查询、聚合查询以及联合查询,看看它们如何帮助我们从海量数据里精准捞出所需信息!

聚合查询:数据统计小能手

聚合查询,说白了就是对数据库里的行数据搞运算,汇总出我们想要的结果。MySQL 给咱们准备了一堆超好用的内置聚合函数:

  • COUNT 函数:想知道某列有多少数据,COUNT(列名)就行。要是想统计整个表有多少行,直COUNT(*),简单粗暴。比SELECT COUNT(*) FROM employees;,就能立马告诉employees表有多少条记录。还有个小细节,COUNT(1)效果COUNT(*)差不多,大家可以按需选择。
  • SUM 函数:计算某列数值总和必备。假设你有个存储员工工资salary列,想知道工资总额,SELECT SUM(salary) FROM employees;,瞬间搞定。
  • AVG 函数:算平均值靠它。像求员工平均工资,SELECT AVG(salary) FROM employees;,结果一目了然。
  • MAX 和 MIN 函数:找某列最大值、最小值就用它们。例SELECT MAX(salary), MIN(salary) FROM employees;,最高工资、最低工资马上呈现。

这些聚合函数还能WHERE约束搭配使用,进一步筛选数据。比如说,你只想算某个部门员工的平均工资,就可SELECT AVG(salary) FROM employees WHERE department = ‘销售部’; 。

分组查询:让数据条理清晰

分组查询,简单来讲,就是把数据按指定列进行分组。SELECT语句里加GROUP BY子句,就能实现这个操作。举个例子,咱们有students表,里面记录了学生的班级和成绩,现在想看看每个班级的平均成绩,SQL 语句就可以这么写:

SELECT class, AVG(score) FROM students GROUP BY class;

欢迎大家来到IT世界,在知识的湖畔探索吧!

GROUP BY class就是按班级分组,AVG(score)计算每个分组里成绩的平均值。

使GROUP BY分组查询时,要注SELECT指定的字段,要么是分组依据字段(像上面例子里class),要么就得包含在聚合函数里,不然可会报错哦。

分组之后,如果还想对分组结果进行条件过滤,这时WHERE就不管用了,得请HAVING。比如,你想找出平均成绩大于 80 分的班级,SQL 就得这么改:

欢迎大家来到IT世界,在知识的湖畔探索吧!SELECT class, AVG(score) FROM students GROUP BY class HAVING AVG(score) > 80;

HAVING专门用来过滤分组后的结果,WHERE是在分组前筛选数据,这俩可别搞混啦。

联合查询:整合多方数据

实际工作中,数据往往分散在不同表,联合查询就是把多张表的数据整合到一块儿。常见的联合查询方式有内连接、外连接(左外连接、右外连接)、自连接和子查询。

  • 内连接(INNER JOIN):最常用的连接方式,它会返回两张表中满足连接条件的所有行。比如students表存学生信息,scores表存成绩,想查询学生及其对应的成绩,SQL 语句如下:
SELECT students.name, scores.score FROM students INNER JOIN scores ON students.id = scores.student_id;

ON students.id = scores.student_id就是连接条件,指定了两张表通id和student_id关联。

  • 外连接(LEFT JOIN/RIGHT JOIN):左外连接(LEFT JOIN)会返回左表所有行以及满足连接条件的右表行,右表没匹配上的NULL填充;右外连接(RIGHT JOIN)则相反。假students表有学生信息,scores表部分学生有成绩,现在想展示所有学生及其成绩(没成绩的显NULL),用左外连接:
欢迎大家来到IT世界,在知识的湖畔探索吧!SELECT students.name, scores.score FROM students LEFT JOIN scores ON students.id = scores.student_id;
  • 自连接:就是同一张表自己和自己连接。比如员工表,想找出每个员工及其上级领导,就可以用自连接。假设员工employees里,员工和领导通manager_id关联:
SELECT e.employee_name, m.employee_name AS manager_name FROM employees e JOIN employees m ON e.manager_id = m.employee_id;

这里employees表当成俩表,e代表员工,m代表领导。

  • 子查询:简单来说,就是在一个 SQL 语句里嵌套另一SELECT语句。比如,想找出成绩高于平均成绩的学生,先算平均成绩,再筛选学生:
欢迎大家来到IT世界,在知识的湖畔探索吧!SELECT name, score FROM students WHERE score > (SELECT AVG(score) FROM students);

括号里SELECT AVG(score) FROM students就是子查询,先算出平均成绩,外面主查询再根据这个结果筛选学生。

除了上面这些,还能UNION和UNION ALL合并多SELECT结果。UNION会去掉重复行,UNION ALL则保留所有行,包括重复的。例如:

SELECT name, age FROM students UNION SELECT name, age FROM teachers;

这条语句会studentsteachers表的姓名、年龄数据合并,重复行只显示一次。要是UNION ALL,重复行也会保留。

怎么样,分组查询、聚合查询、联合查询是不是挺有意思?在实际开发中,这些查询技巧能帮我们高效处理数据。大家不妨动手试试,用这些方法从自己的数据库里挖掘有价值的信息。要是在学习过程中有啥疑问,或者碰到有趣的应用场景,欢迎在评论区分享交流,咱们一起进步!

#MySQL# #数据库查询# #数据库知识分享#

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/135302.html

(0)
上一篇 3小时前
下一篇 3小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信