MySQL数据库
本文最后更新于72 天前,其中的信息可能已经过时,如有其他问题请留言
AI智能摘要
文章介绍了如何下载并安装MySQL数据库,包括下载链接、安装步骤、命令行操作、常见问题及解决方案、Navicat安装教程、Mysql使用和DDL, DML, DQL三种SQL操作语句。

一,下载MySQL

这是下载地址:https://dev.mysql.com/downloads/mysql

二,安装步骤

下载好的文件,解压到你想安装的地方

解压好后,默认是没有my.ini文件的,需要我们自己创建一个:

[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\\Program_Files_self\\MySQL
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\\Program_Files_self\\MySQL\\MySQLData
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

命令行操作

  • 以管理员身份打开 cmd 命令行工具,按下Shift+Ctrl+Enter键即可
  • 用cd命令切换到自己的安装目录下的 bin 文件夹
  • 如果在D盘,再键入D:即可进入目录
#安装
mysqld install
#初始化数据库
mysqld --initialize --console

执行完成后会输出 root 用户的初此密码

#启动服务
net start mysql
#登录
mysql -u root -p

遇到的问题

出现 “ERROR 1045 (28000): Access denied for user ‘root’@’localhost‘ (using password: YES)”

解决方案:

#停止MySQL服务
net stop mysql
#跳过权限验证启动 MySQL
mysqld --console --skip-grant-tables --shared-memory

无密码登录并重置密码

重新打开一个新的 CMD 窗口,进入bin目录

#登录
mysql -u root -p
#提示输入密码时,直接按回车(无密码登录)
#登录后,执行以下命令重置密码(替换新密码为你的密码)
-- 切换到mysql系统数据库
use mysql;
-- 重置root密码(MySQL 8.0+ 必须用此语法)
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
exit;

重启 MySQL 服务:

关闭之前 “跳过权限验证” 的 CMD 窗口(停止临时服务)

在新 CMD 窗口中启动服务:

net start mysql

其他

mysql> ALTER USER ‘root’@’localhost‘ IDENTIFIED BY ‘root’; ERROR 1290 (HY000): The MySQL server is running with the –skip-grant-tables option so it cannot execute this statement

如果出现以上问题:

先刷新权限,再修改密码,具体步骤如下:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;
exit;

之后按之前的步骤关闭临时启动的 MySQL 窗口,重新启动正常的 MySQL 服务,即可用新密码登录。

Navicat安装

Navicat Premium 16 保姆级手把手 安装教程包含下载、安装、授权(附安装包)-CSDN博客

Mysql使用

Mysql数据库通过SQL(结构化查询语言)语句对数据进行操作。

SQL操作语句可以分为三种:

  • DDL(数据定义语言)
  • DML(数据操作语言)
  • DQL(数据查询语言)

DDL(数据定义语言)

作用:定义和管理数据库、表的结构。
关键字:CREATE,ALTER,DROP

DML(数据操作语言)

作用:对表中的数据进行增、删、改。
关键字:INSERT,UPDATE,DELETE

DQL(数据查询语言)

作用:查询表中的数据。
关键字:SELECT

查询

条件查询,如一条完整的sql查询语句结构为

SELECT [DISTINCT] 列名1, 列名2, ...  -- 要查询的列(* 表示所有列)
FROM 表名                            -- 数据来源的表
[JOIN 关联表名 ON 关联条件]          -- 多表关联(可选)
[WHERE 筛选条件]                     -- 行级过滤(核心:条件查询)
[GROUP BY 分组列]                    -- 分组(可选)
[HAVING 分组后筛选条件]              -- 分组后过滤(可选)
[ORDER BY 排序列 [ASC/DESC]]         -- 排序(可选)
[LIMIT 行数 [OFFSET 偏移量]]         -- 限制结果行数(可选,不同数据库语法略有差异)

基础结构

-- 基础结构:SELECT + FROM + WHERE
SELECT name, age 
FROM student 
WHERE gender = '女' AND age > 18;

SELECT:指定需要查询的字段,使用*表示查询所有字段

FROM:指定数据来源的表名

WHERE:定义筛选条件,只有满足该条件的记录才会被返回

二、常用运算符

1. 比较运算符

比较运算符是最基础的条件判断工具,用于判断字段值与目标值的关系:

  • =:等于
  • !=/<>:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于

2. 范围运算符

当需要判断字段值是否在某个连续区间时,使用BETWEEN ... AND ...会让语句更简洁:

-- 查询年龄在18到25岁之间的学生
SELECT * FROM student WHERE age BETWEEN 18 AND 25;

3. 模糊匹配

使用LIKE关键字可以实现模糊查询,通常配合通配符使用:

  • %:匹配任意长度的任意字符(包括 0 个字符)
  • _:匹配单个任意字符
-- 查询姓张的学生
SELECT * FROM student WHERE name LIKE '张%';
-- 查询名字为两个字且姓张的学生
SELECT * FROM student WHERE name LIKE '张_';

4. 集合运算符

IN关键字用于判断字段值是否属于指定的集合,适合处理离散的多个取值:

-- 查询学号为1001、1003、1005的学生
SELECT * FROM student WHERE id IN (1001, 1003, 1005);

SQL 连接查询:LEFT JOIN 与 RIGHT JOIN 详解

在多表关联查询的场景中,LEFT JOIN(左连接)和RIGHT JOIN(右连接)是实现数据关联的核心方式,二者的核心区别在于保留的表数据不同。

一、LEFT JOIN(左连接)

核心特点

  • 数据保留规则:保留左表(FROM后的第一个表)的所有记录,即使右表中没有匹配的记录。
  • 无匹配处理:当右表无匹配记录时,右表对应的字段会显示为NULL

基础语法

SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 关联条件;

应用场景

适用于需要以左表数据为基础,关联右表补充信息的场景,例如:

  • 查询所有学生的选课信息,包括没有选课的学生
SELECT student.name, course.course_name
FROM student LEFT JOIN course
ON student.id = course.student_id;

二、RIGHT JOIN(右连接)

核心特点

  • 数据保留规则:保留右表(JOIN后的表)的所有记录,即使左表中没有匹配的记录。
  • 无匹配处理:当左表无匹配记录时,左表对应的字段会显示为NULL

基础语法

SELECT 字段 FROM 表1 RIGHT JOIN 表2 ON 关联条件;

应用场景

适用于需要以右表数据为基础,关联左表补充信息的场景,例如:

  • 查询所有课程的选课学生,包括没有学生选择的课程
SELECT student.name, course.course_name
FROM student RIGHT JOIN course
ON student.id = course.student_id;

三、核心区别对比

维度LEFT JOINRIGHT JOIN
保留的表左表右表
无匹配时的字段值右表字段为 NULL左表字段为 NULL
典型使用场景以左表为主,补充右表信息以右表为主,补充左表信息

ER 图与物理表的关系解析

ER 图是数据库设计的蓝图,而物理表是其在数据库中的最终实现,二者共同构成了从数据建模到数据存储的完整链路。

一、ER 图:数据库的设计蓝图

定义

ER 图(实体 – 关系图)是用图形化方式描述数据及其关系的工具,是数据库设计阶段的核心产出物。

核心三要素

  • 实体(Entity):用矩形表示,对应业务中的核心对象,例如 “学生”“课程”。
  • 属性(Attribute):用椭圆形表示,是实体的特征,例如学生的 “姓名”“年龄”。
  • 关系(Relationship):用菱形表示,描述实体之间的关联,例如学生 “选课”。

核心作用

清晰规划数据结构与业务关系,提前梳理数据之间的依赖,为后续物理表的创建提供明确依据。


二、物理表:ER 图的具体实现

定义

物理表是 ER 图在数据库中的具体实现,是真实存储数据的二维表结构,也是所有 SQL 操作(增删改查)的最终对象。

与 ER 图的对应关系

ER 图元素物理表对应项
实体(Entity)表(Table)
属性(Attribute)字段(列 / Column)
关系(Relationship)主键 / 外键(Primary Key/Foreign Key)

核心作用

作为数据的最终载体,通过定义字段类型、约束和关联,将 ER 图的设计转化为可操作的数据库对象。


三、从 ER 图到物理表的设计流程

  1. 需求梳理:分析业务场景,识别核心实体、属性与关系。
  2. 绘制 ER 图:用图形化方式呈现数据模型,验证业务逻辑的合理性。
  3. 表结构设计:将 ER 图的实体转化为表,属性转化为字段,关系转化为键约束。
  4. 数据库落地:通过CREATE TABLE等 SQL 语句创建物理表,完成从设计到存储的转化。

数据库操作(Database)

1. 创建数据库

-- 基础语法
CREATE DATABASE [IF NOT EXISTS] 数据库名 
[DEFAULT CHARACTER SET 字符集] 
[DEFAULT COLLATE 排序规则];

-- 示例:创建名为school的数据库,指定UTF8字符集
CREATE DATABASE IF NOT EXISTS school 
DEFAULT CHARACTER SET utf8 
DEFAULT COLLATE utf8_general_ci;

IF NOT EXISTS:避免重复创建报错(推荐必加)

常用字符集:utf8utf8mb4(支持 emoji)

删除数据库

-- 基础语法
DROP DATABASE [IF EXISTS] 数据库名;

-- 示例:删除school数据库
DROP DATABASE IF EXISTS school;

选择数据库

USE school; -- 切换到school数据库

二、数据表操作(Table)

1. 创建数据表

-- 基础语法
CREATE TABLE [IF NOT EXISTS] 表名 (
    字段1 数据类型 [约束条件],
    字段2 数据类型 [约束条件],
    ...
    [表级约束]
) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集];

-- 示例:创建student学生表
CREATE TABLE IF NOT EXISTS student (
    id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增
    name VARCHAR(50) NOT NULL, -- 姓名,非空
    age TINYINT UNSIGNED DEFAULT 18, -- 年龄,无符号,默认18
    gender ENUM('男','女','未知') DEFAULT '未知', -- 性别,枚举类型
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认当前时间
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 常用约束:PRIMARY KEY(主键)、NOT NULL(非空)、UNIQUE(唯一)、DEFAULT(默认值)、AUTO_INCREMENT(自增)
  • 常用存储引擎:InnoDB(支持事务 / 外键,推荐)、MyISAM

删除数据表

-- 基础语法
DROP TABLE [IF EXISTS] 表名;

-- 示例:删除student表
DROP TABLE IF EXISTS student;

三、数据操作(增删改查 CRUD)

1. 新增数据(CREATE – INSERT)

-- 方式1:指定字段插入(推荐,字段顺序可自定义)
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);

-- 方式2:插入多条数据(高效)
INSERT INTO 表名 (字段1, 字段2) VALUES 
(值1, 值2),
(值3, 值4);

-- 示例:插入单条学生数据
INSERT INTO student (name, age, gender) VALUES ('张三', 20, '男');

-- 示例:插入多条学生数据
INSERT INTO student (name, age, gender) VALUES 
('李四', 21, '女'),
('王五', 19, '男');

查询数据(READ – SELECT)

-- 基础语法
SELECT [DISTINCT] 字段1, 字段2, ... -- DISTINCT去重
FROM 表名
[WHERE 条件] -- 筛选条件
[ORDER BY 字段 [ASC/DESC]] -- 排序,ASC升序(默认),DESC降序
[LIMIT 起始位置, 条数]; -- 分页

-- 示例1:查询所有学生信息
SELECT * FROM student;

-- 示例2:查询年龄大于19的男生,按年龄降序
SELECT name, age FROM student 
WHERE age > 19 AND gender = '男'
ORDER BY age DESC;

-- 示例3:分页查询,第1页(从0开始),每页10条
SELECT * FROM student LIMIT 0, 10;

更新数据(UPDATE)

-- 基础语法
UPDATE 表名 
SET 字段1=值1, 字段2=值2, ...
[WHERE 条件]; -- 必加!否则更新全表数据

-- 示例:将张三的年龄改为22
UPDATE student 
SET age = 22 
WHERE name = '张三';

⚠️ 重要:UPDATE 语句必须加 WHERE 条件,否则会修改表中所有记录!

删除数据(DELETE)

-- 基础语法
DELETE FROM 表名 [WHERE 条件]; -- 必加!否则删除全表数据

-- 示例:删除姓名为王五的学生
DELETE FROM student WHERE name = '王五';

-- 清空表(自增主键重置,慎用)
TRUNCATE TABLE student;
  • ELETE:删除数据,自增主键不重置,可回滚(事务中)
  • TRUNCATE:清空表并重置结构,不可回滚,效率更高

MySQL必知必会

注释:

简短单行:优先用 -- 注释(通用标准)

MySQL 专属简写:用 # 注释

长文本 / 多行 / 调试:用 /* 注释 */

WHERE 子句

最常用的运算符,分成比较运算符、范围运算符、模糊匹配、空值判断、逻辑运算符5 大类

一、比较运算符(最基础、最常用)

用于判断值是否相等、大小关系,是 WHERE 最基础的用法。

表格

运算符含义示例
=等于WHERE age = 20
<> / !=不等于WHERE age <> 18
>大于WHERE price > 100
<小于WHERE score < 60
>=大于等于WHERE num >= 5
<=小于等于WHERE height <= 180

小提示:!=<> 效果完全一样,<> 是 SQL 标准写法,更通用。


二、范围运算符(判断区间)

1. BETWEEN ... AND ...

作用:匹配在两个值之间的数据(包含起始和结束值)

sql

-- 年龄在 18~30 之间(包含18和30)
WHERE age BETWEEN 18 AND 30

2. NOT BETWEEN ... AND ...

作用:匹配不在区间内的数据

sql

WHERE price NOT BETWEEN 100 AND 500

三、指定集合匹配(多选一)

1. IN (值1, 值2, ...)

作用:匹配等于列表中任意一个值的数据

sql

-- 省份是北京、上海、广州之一
WHERE city IN ('北京', '上海', '广州')

2. NOT IN (值1, 值2, ...)

作用:匹配不在列表中的数据

sql

WHERE status NOT IN (0, 1)

四、模糊匹配(字符串搜索)

LIKE + 通配符

专门用于模糊查询文本,两个核心通配符:

  • %:匹配任意多个字符(包含 0 个)
  • _:匹配 ** exactly 一个字符 **

表格

写法含义
LIKE '张%'张开头
LIKE '%三'三结尾
LIKE '%小%'包含
LIKE '刘_'姓刘,且名字只有两个字

示例:

sql

-- 查询所有姓“李”的用户
WHERE name LIKE '李%'

五、空值判断(特别重要!)

1. IS NULL

作用:判断字段值为空(NULL)

sql

-- 邮箱为空
WHERE email IS NULL

2. IS NOT NULL

作用:判断字段不为空

sql

WHERE phone IS NOT NULL

⚠️ 新手必坑:不能用 = NULL!= NULL,必须用 IS NULL / IS NOT NULL


六、逻辑运算符(多条件组合)

用于把多个条件组合在一起,实现复杂筛选。

表格

运算符含义示例
AND并且(所有条件都满足)age>18 AND score>=60
OR或者(任意一个满足)city='北京' OR city='上海'
NOT取反NOT age>30

示例:

sql

-- 年龄大于18 且 性别为女
WHERE age > 18 AND gender = '女'

Mysql正则表达式

一、核心关键字:REGEXP

MySQL 用 REGEXP 关键字开启正则匹配。

基本语法

sql

WHERE 字段名 REGEXP '正则表达式'

对比 LIKE:

  • LIKE 依赖 %_,功能弱
  • REGEXP 用正则规则,复杂模糊查询首选

二、最常用正则运算符(必背)

1. 基础匹配

表格

写法作用示例
.匹配任意一个字符REGEXP 'b.' → 匹配 b 后面跟任意 1 个字符
^匹配文本开头REGEXP '^李' → 以李开头
$匹配文本结尾REGEXP '三$' → 以三结尾

2. 多选一匹配

表格

写法作用示例
``或(多个条件任选)`REGEXP ‘ 苹果香蕉橘子 ‘`
[abc]匹配括号内任意一个字符REGEXP '[xyz]'
[^abc]匹配不在括号内的字符REGEXP '[^0-9]' → 非数字

3. 范围匹配

表格

写法作用
[0-9]匹配 0~9 任意数字
[a-z]匹配小写字母
[A-Z]匹配大写字母

4. 重复匹配

表格

写法作用
*0 个或多个(前面字符)
+1 个或多个
?0 个或 1 个
{n}exactly n 个

三、实战示例(一看就会)

1. 包含某个文本(最简单)

只要字段里出现内容就匹配

sql

-- 产品名包含“手机”
SELECT * FROM products 
WHERE prod_name REGEXP '手机';

2. 以某字符开头 / 结尾

sql

-- 姓名以“张”开头
WHERE name REGEXP '^张';

-- 邮箱以 .com 结尾
WHERE email REGEXP '\\.com$'; 

⚠️ 注意:. 是正则关键字,要匹配真实的点,必须加转义 \\.

3. 多条件 “或” 查询

sql

-- 城市是北京、上海、广州之一
WHERE city REGEXP '北京|上海|广州';

4. 数字 / 字母范围

sql

-- 手机号包含 13、15、18 开头
WHERE phone REGEXP '^1[358]';

-- 产品编号包含数字
WHERE prod_id REGEXP '[0-9]';

5. 复杂格式匹配(身份证 / 邮箱 / 邮编)

sql

-- 匹配 18 位身份证
WHERE id_card REGEXP '^[0-9]{17}[0-9X]$';

-- 匹配纯数字
WHERE code REGEXP '^[0-9]+$';

四、不区分大小写:REGEXP 不区分大小写

MySQL 默认正则不区分大小写

想严格区分,用 BINARY 关键字:

sql

WHERE name REGEXP BINARY 'Apple';

五、LIKE 与 REGEXP 的区别(关键)

表格

LIKEREGEXP
必须完全匹配只要包含就匹配
功能简单功能强大
无特殊语法支持复杂规则

例子:

sql

WHERE name LIKE '三'   → 只有名字=“三”才匹配
WHERE name REGEXP '三' → 名字里**包含**三就匹配(张三、李四三...)

匹配特殊字符

一、什么是正则特殊字符?

在 MySQL 正则里,这些字符自带特殊功能,不能直接写:

. * + ? | [ ] ( ) { } ^ $ \

如果你想真正匹配这些符号本身,必须加 转义符

\\(两个反斜杠)


二、正确写法:必须用 \\ 转义

1. 最常用特殊字符匹配(直接复制用)

表格

你想匹配的字符正则里必须这样写示例
. 点号\\.REGEXP '\\.com'
* 星号\\*REGEXP '\\*特价'
+ 加号\\+REGEXP '\\+86'
? 问号\\?REGEXP '\\?查询'
`` 竖线`\``REGEXP ‘\分隔 ‘`
[ 左中括号\\[` | `REGEXP '\\[通知'` | | `]` 右中括号 | `\\]REGEXP '结束\\]'
( 左括号\\(` | `REGEXP '\\(备注'` | | `)` 右括号 | `\\)REGEXP '完成\\)'
^ 尖号\\^REGEXP '\\^重点'
$ 美元符\\$REGEXP '价格\\$'
\ 反斜杠\\\\REGEXP '\\\\文件夹'

三、实战示例(一看就懂)

1. 匹配包含点号 . 的文本

sql

-- 匹配邮箱、网址里的 .
SELECT * FROM user 
WHERE email REGEXP '\\.com';  -- 必须写 \\.

2. 匹配包含括号 () 的内容

sql

-- 匹配商品名里的 (特价)
SELECT * FROM products 
WHERE prod_name REGEXP '\\(特价\\)';

3. 匹配包含星号 *、加号 +

sql

-- 匹配 *热销* 、+新品
WHERE title REGEXP '\\*热销\\*|\\+新品';

4. 匹配反斜杠 \(最难记)

匹配一个 \ 必须写 4 个反斜杠 \\\\

sql

-- 匹配路径里的 \
WHERE path REGEXP '\\\\img';

四、超级重点:为什么是两个反斜杠?

MySQL 里有两层解析

  1. MySQL 解析器:处理 \\ → 变成 \
  2. 正则引擎:处理 \ → 转义特殊字符

所以:

  • 想匹配 . → 必须写 \\.
  • 想匹配 \ → 必须写 \\\\

五、避坑总结

  1. 只要匹配特殊字符,前面必须加 \\
  2. 直接写 . = * + ? | [ ] 一定会匹配错误或报错
  3. 反斜杠 \ 最特殊,必须写 \\\\

12 个 POSIX 正则字符类

  1. [:alnum:] 字母数字
  2. [:alpha:] 纯字母
  3. [:blank:] 空格、制表符
  4. [:cntrl:] 控制字符
  5. [:digit:] 数字 0-9
  6. [:graph:] 可见非空白字符
  7. [:lower:] 小写字母
  8. [:upper:] 大写字母
  9. [:print:] 可打印字符
  10. [:punct:] 标点符号
  11. [:space:] 所有空白(空格、换行、制表)
  12. [:xdigit:] 十六进制字符 0-9 a-f A-F

MySQL 正则 重复元字符

表格

元字符含义
*匹配前面字符 0 次或多次
+匹配前面字符 1 次或多次
?匹配前面字符 0 次或 1 次
{n}精确匹配 n 次
{n,}匹配 至少 n 次
{n,m}匹配 n 到 m 次

用法示例:a{3} 匹配连续 3 个 a。

MySQL 正则 定位符

  1. ^ 匹配字符串开头
  2. $ 匹配字符串结尾
  3. [[:<:]] 单词开头
  4. [[:>:]] 单词结尾

示例:

^a 以 a 开头;z$ 以 z 结尾。

MySQL 计算字段

1. 概念

计算字段:数据库中不存在,查询时临时拼接、运算生成的字段。

2. 常用场景

  • 拼接字符串
  • 数值四则运算
  • 起别名 AS

3. 核心语法

sql

-- 拼接
SELECT CONCAT(字段1,字段2) AS 新字段名;

-- 计算
SELECT 字段1 * 字段2 AS 新字段名;

4. 常用操作

  1. 拼接CONCAT() 合并多个字段
  2. 算术运算+ - * /
  3. 别名AS 给计算字段起名,可省略 AS
  4. 计算字段只在查询结果生效,不改变原表

MySQL 去空格函数

  1. LTRIM() 去掉左侧空格
  2. RTRIM() 去掉右侧空格
  3. TRIM() 去掉左右两端空格

语法:

sql

SELECT TRIM(字段) FROM 表;
SELECT LTRIM(字段), RTRIM(字段) FROM 表;

扩展:TRIM(字符 FROM 字段) 可去除指定首尾字符。

MySQL 函数

一、字符串函数

  1. CONCAT() 拼接字符串
  2. CONCAT_WS() 带分隔符拼接
  3. LTRIM() 去除左侧空格
  4. RTRIM() 去除右侧空格
  5. TRIM() 去除两端空格
  6. UPPER()/UCASE() 转大写
  7. LOWER()/LCASE() 转小写
  8. LEFT() 左截取
  9. RIGHT() 右截取
  10. SUBSTRING() 截取子串
  11. LENGTH() 字节长度
  12. CHAR_LENGTH() 字符长度
  13. REPLACE() 替换
  14. LOCATE() 查找位置
  15. REVERSE() 反转
  16. REPEAT() 重复字符串

二、数值 / 数学函数

  1. ABS() 绝对值
  2. MOD() 取模 / 余数
  3. ROUND() 四舍五入
  4. CEIL()/CEILING() 向上取整
  5. FLOOR() 向下取整
  6. RAND() 0~1 随机数
  7. PI() 圆周率 π
  8. SQRT() 平方根
  9. POW()/POWER() 幂运算
  10. EXP() e 的 x 次方
  11. LOG() 自然对数
  12. LOG10() 以 10 为底对数
  13. SIN() 正弦
  14. COS() 余弦
  15. TAN() 正切
  16. ASIN() 反正弦
  17. ACOS() 反余弦
  18. ATAN() 反正切

三、日期时间函数

  1. NOW() 当前日期时间
  2. CURDATE() 当前日期
  3. CURTIME() 当前时间
  4. DATE() 提取日期
  5. TIME() 提取时间
  6. YEAR()/MONTH()/DAY() 年月日
  7. HOUR()/MINUTE()/SECOND() 时分秒
  8. DATE_ADD() 增加时间
  9. ADDDATE() 增加日期
  10. DATE_SUB() 减少日期
  11. ADDTIME() 增加时间
  12. DATEDIFF() 日期差
  13. TIMEDIFF() 时间差
  14. DAYOFWEEK() 周几
  15. DAYOFMONTH() 当月第几天
  16. DAYOFYEAR() 当年第几天

四、聚合函数

  1. COUNT() 计数
  2. SUM() 求和
  3. AVG() 平均值
  4. MAX() 最大值
  5. MIN() 最小值

五、条件 / 流程函数

  1. IF() 条件判断
  2. IFNULL() 空值替换
  3. NULLIF() 相等返回 NULL
  4. CASE WHEN 多分支判断

六、文本处理函数

  1. TRIM()
  2. UPPER()
  3. LOWER()
  4. LENGTH()

MySQL 聚合函数 + 组合用法

一、5 大基础聚合函数

  • COUNT() 统计行数 / 非空值
  • SUM() 求和
  • AVG() 平均值
  • MAX() 最大值
  • MIN() 最小值

二、基础语法

sql

SELECT 聚合函数(字段) FROM 表名;

三、组合用法核心

1. 同句多个聚合一起用

sql

SELECT 
COUNT(*) AS 总数量,
SUM(price) AS 总价,
AVG(price) AS 均价,
MAX(price) AS 最高价,
MIN(price) AS 最低价
FROM products;

2. 搭配 WHERE 先筛选再聚合

sql

SELECT COUNT(*),SUM(price)
FROM products
WHERE price > 50;

3. GROUP BY 分组聚合(最常用)

规则GROUP BY 分组字段,SELECT 里非聚合字段必须出现在 GROUP BY 中

sql

SELECT category,COUNT(*),AVG(price)
FROM products
GROUP BY category;

4. HAVING 过滤分组结果

WHERE 过滤行,HAVING 过滤分组后的数据

sql

SELECT category,COUNT(*) AS cnt
FROM products
GROUP BY category
HAVING cnt >= 3;

四、关键区别

  • WHERE:分组筛选原始行
  • GROUP BY:按字段分组
  • HAVING:分组筛选聚合结果
  • 聚合函数不能用在 WHERE,只能用在 SELECT、HAVING、ORDER BY

整理资料不易,觉得有帮助可以投喂下博主哦~感谢!
作者:Hueil
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议
转载请注明 文章地址 及 作者 哦~
暂无评论

发送评论 编辑评论


                
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇