【数据库初阶】表的查询语句和聚合函数

ops/2025/2/4 22:26:31/
图片名称
🎉博主首页: 有趣的中国人

🎉专栏首页: 数据库初阶

🎉其它专栏: C++初阶 | C++进阶 | 初阶数据结构

在这里插入图片描述

亲爱的小伙伴们,大家好!在这篇文章中,我们将深入浅出地为大家讲解 表的查询语句和聚合函数 帮助您轻松入门,快速掌握核心概念。


如果文章对您有所启发或帮助,请别忘了 点赞 👍、收藏 🌟、留言 📝 支持!您的每一份鼓励,都是我持续创作的源动力。让我们携手前行,共同进步!

文章目录

    • @[toc]
  • 1. SELECT 基本用法
    • 🐱‍🏍1.1 基础语法🐱‍🏍
    • 🐱‍🏍1.2 基础查询🐱‍🏍
      • ✨查询所有列✨
      • ✨查询特定列✨
    • 🐱‍🏍1.3 条件过滤(WHERE)🐱‍🏍
      • ✨比较运算符✨
      • ✨逻辑运算符(AND/OR/NOT)✨
    • 🐱‍🏍1.4 结果排序(ORDER BY) 🐱‍🏍
    • 🐱‍🏍1.5 限制结果数量(LIMIT) 🐱‍🏍
    • 🐱‍🏍1.6 去重(DISTINCT)🐱‍🏍
    • 🐱‍🏍1.7 别名(AS)🐱‍🏍
    • 🐱‍🏍1.8 模糊查询(LIKE)🐱‍🏍
    • 🐱‍🏍1.9 范围查询🐱‍🏍
      • ✨BETWEEN✨
      • ✨IN✨
  • 2. 聚合函数
    • 🐱‍🏍2.1 什么是聚合函数🐱‍🏍
    • 🐱‍🏍2.2 常用聚合函数列表🐱‍🏍
    • 🐱‍🏍2.3 详细用法及示例🐱‍🏍
      • ✨`COUNT()`:统计行数✨
      • ✨`SUM()`:计算总和✨
      • ✨`AVG()`:计算平均值✨
      • ✨`MAX() / MIN()`:极值查询✨
      • ✨`GROUP_CONCAT()`:合并字符串✨
    • 🐱‍🏍2.4 分组统计(GROUP BY)🐱‍🏍
    • 🐱‍🏍2.5 过滤分组结果(HAVING)🐱‍🏍
    • 🐱‍🏍2.6 关键注意事项🐱‍🏍
      • ✨COUNT(*) vs COUNT(列名)✨
      • ✨分组字段限制✨
      • ✨执行顺序✨

上一篇文章中,博主介绍了 :

表的增删改语句

可以将上一篇文章看完之后再来看这篇文章,链接如下:

数据库初阶】表的增删改语句

那么接下来正文开始:



1. SELECT 基本用法

🐱‍🏍1.1 基础语法🐱‍🏍

SELECT 列名1, 列名2, ... 
FROM 表名 
[WHERE 条件] 
[ORDER BY 排序列 [ASC|DESC]] 
[LIMIT 行数];

🐱‍🏍1.2 基础查询🐱‍🏍

✨查询所有列✨

SELECT * FROM employees;  -- 返回表中所有行和列

✨查询特定列✨

SELECT id, name, department FROM employees;  -- 仅返回指定列

🐱‍🏍1.3 条件过滤(WHERE)🐱‍🏍

✨比较运算符✨

-- 查询薪资大于 8000 的 IT 部门员工
SELECT * FROM employees 
WHERE department = 'IT' AND salary > 8000;

✨逻辑运算符(AND/OR/NOT)✨

-- 查询 IT 或 HR 部门,且年龄小于 50 的员工
SELECT * FROM employees 
WHERE (department = 'IT' OR department = 'HR') AND age < 50;

🐱‍🏍1.4 结果排序(ORDER BY) 🐱‍🏍

-- 按薪资降序排序,薪资相同则按入职日期升序排序
SELECT name, salary, hire_date 
FROM employees 
ORDER BY salary DESC, hire_date ASC;

🐱‍🏍1.5 限制结果数量(LIMIT) 🐱‍🏍

-- 返回前 5 条记录
SELECT * FROM employees LIMIT 5;-- 分页查询:跳过前 10 条,返回接下来的 5 条
SELECT * FROM employees LIMIT 10, 5;SELECT * FROM employees LIMIT 5 OFFSET 10;

🐱‍🏍1.6 去重(DISTINCT)🐱‍🏍

-- 返回不重复的部门名称
SELECT DISTINCT department FROM employees;

🐱‍🏍1.7 别名(AS)🐱‍🏍

SELECT id AS '员工ID', name AS '姓名', salary * 12 AS '年薪' 
FROM employees;

🐱‍🏍1.8 模糊查询(LIKE)🐱‍🏍

-- 查询名字以 "张" 开头的员工
SELECT * FROM employees 
WHERE name LIKE '张%';-- 查询名字包含 "小" 的员工
SELECT * FROM employees 
WHERE name LIKE '%小%';

🐱‍🏍1.9 范围查询🐱‍🏍

✨BETWEEN✨

-- 查询年龄在 30 到 40 岁之间的员工
SELECT * FROM employees 
WHERE age BETWEEN 30 AND 40;

✨IN✨

-- 查询 IT 或 HR 部门的员工
SELECT * FROM employees 
WHERE department IN ('IT', 'HR');

2. 聚合函数

🐱‍🏍2.1 什么是聚合函数🐱‍🏍

  • 聚合函数用于对一组值执行计算,并返回单个汇总值。它们通常与 GROUP BY 子句结合使用,实现分组统计,但也可以直接用于整张表的汇总。

🐱‍🏍2.2 常用聚合函数列表🐱‍🏍

函数描述是否忽略 NULL
COUNT()统计行数或非 NULL 值的数量
SUM()计算数值列的总和
AVG()计算数值列的平均值
MAX()返回列中的最大值
MIN()返回列中的最小值
GROUP_CONCAT()将多行的值连接成单个字符串

🐱‍🏍2.3 详细用法及示例🐱‍🏍

COUNT():统计行数✨

-- 统计表中总行数(包括 NULL 行)
SELECT COUNT(*) AS total_rows FROM employees;-- 统计某列非 NULL 值的数量
SELECT COUNT(salary) AS non_null_salaries FROM employees;-- 统计去重后的数量
SELECT COUNT(DISTINCT department) AS unique_departments FROM employees;

SUM():计算总和✨

-- 计算 IT 部门的总薪资
SELECT SUM(salary) AS total_salary 
FROM employees 
WHERE department = 'IT';

AVG():计算平均值✨

-- 计算平均年龄(忽略 NULL 值)
SELECT AVG(age) AS average_age FROM employees;-- 保留两位小数
SELECT ROUND(AVG(salary), 2) AS avg_salary FROM employees;

MAX() / MIN():极值查询✨

-- 查询最高和最低薪资
SELECT MAX(salary) AS max_salary,MIN(salary) AS min_salary 
FROM employees;

GROUP_CONCAT():合并字符串✨

-- 将同一部门的员工姓名合并为逗号分隔的字符串
SELECT department,GROUP_CONCAT(name ORDER BY hire_date ASC SEPARATOR ', ') AS employees_list
FROM employees 
GROUP BY department;

🐱‍🏍2.4 分组统计(GROUP BY)🐱‍🏍

  • 聚合函数常与 GROUP BY 结合,按指定列分组汇总:
-- 按部门统计人数、平均薪资、最高薪资
SELECT department,COUNT(*) AS headcount,AVG(salary) AS avg_salary,MAX(salary) AS max_salary
FROM employees
GROUP BY department;

🐱‍🏍2.5 过滤分组结果(HAVING)🐱‍🏍

  • HAVING 用于对聚合后的结果进行过滤(类似 WHERE但作用于分组后):
-- 筛选平均薪资超过 10000 的部门
SELECT department,AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING avg_salary > 10000;  -- 必须使用聚合结果或分组列

🐱‍🏍2.6 关键注意事项🐱‍🏍

✨COUNT(*) vs COUNT(列名)✨

  • COUNT(*):统计所有行数(包括 NULL 行)
  • COUNT(列名):统计该列非 NULL 值的数量。

✨分组字段限制✨

  • SELECT 中的 非聚合列必须出现在 GROUP BY

错误示例:

-- department 未在 GROUP BY 中,但出现在 SELECT
SELECT name, AVG(salary) FROM employees;  -- 报错!

✨执行顺序✨

SQL 子句的实际执行顺序为:

  • 1.FROM → 2. WHERE → 3. GROUP BY → 4. HAVING → 5. SELECT → 6. ORDER BY → 7. LIMIT

http://www.ppmy.cn/ops/155690.html

相关文章

视频拼接,拼接时长版本

目录 视频较长&#xff0c;分辨率较大&#xff0c;这个效果很好&#xff0c;不耗用内存 ffmpeg imageio&#xff0c;适合视频较短 视频较长&#xff0c;分辨率较大&#xff0c;这个效果很好&#xff0c;不耗用内存 ffmpeg import subprocess import glob import os from nats…

ubuntu18.04环境下,Zotero 中pdf translate划线后不翻译问题解决

问题&#xff1a; 如果使用fastgithub&#xff0c;在/etc/profile中设置全局代理&#xff0c;系统重启后会产生划线后不翻译的问题&#xff0c;包括所有翻译代理均不行。终端中取消fastgithub代理&#xff0c;也不行。 解决&#xff1a; 1&#xff09;不在/etc/profile中设置…

GESP2023年9月认证C++六级( 第三部分编程题(1)小杨买饮料)

参考程序&#xff1a; #include <iostream> using namespace std;const int INF 1000000000; // 定义一个大的数&#xff0c;代表无解的状态int cost[2001]; // 用来存储每个容量所需的最小花费int main() {int N 0, L 0;cin >> N >> L; // 读入饮料种…

安卓pad仿写element-ui表单验证

安卓pad仿写element-ui表单验证 背景&#xff1a;仿写对象&#xff1a;showcase&#xff1a; 布局总览&#xff1a;核心代码总览&#xff1a;代码仓&#xff1a; 背景&#xff1a; 最近半年开始接触安卓开发&#xff0c;平时开发接触的点比较零碎&#xff0c;计划闲暇时做一些…

大数据数仓实战项目(离线数仓+实时数仓)2

1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 下面是阿里的一种分层方式 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast…

预防和应对DDoS的方法

DDoS发起者通过大量的网络流量来中断服务器、服务或网络的正常运行&#xff0c;通常由多个受感染的计算机或联网设备&#xff08;包括物联网设备&#xff09;发起。 换种通俗的说法&#xff0c;可以将其想象成高速公路上的一次突然的大规模交通堵塞&#xff0c;阻止了正常的通勤…

w190工作流程管理系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

51单片机入门_02_C语言基础0102

C语言基础部分可以参考我之前写的专栏C语言基础入门48篇 以及《从入门到就业C全栈班》中的C语言部分&#xff0c;本篇将会结合51单片机讲差异部分。 课程主要按照以下目录进行介绍。 文章目录 1. 进制转换2. C语言简介3. C语言中基本数据类型4. 标识符与关键字5. 变量与常量6.…