GF-MySQL
内容简介:本文主要介绍MySQL相关知识,包括安装、配置、优化等内容。风哥教程参考MySQL官方文档MySQL SQL Syntax、MySQL Server Administration。 01 更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 什么是函数
函数是一种特殊的操作,它接收一个或多个参数,执行特定的操作,并返回一个结果。在MySQL中,函数用于处理数据、执行计算、转换数据类型等操作。
1.2 MySQL函数的分类
- 字符串函数:用于处理字符串数据
- 数值函数:用于执行数值计算
- 日期时间函数:用于处理日期和时间
- 聚合函数:用于对数据进行聚合计算
- 条件函数:用于条件判断
- 转换函数:用于数据类型转换
- 其他函数:如系统函数、加密函数等
Part02-生产环境规划与建议
2.1 常用字符串函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
CONCAT() |
连接字符串 | CONCAT(‘Hello’, ‘ ‘, ‘World’) | Hello World |
LENGTH() |
返回字符串长度 | LENGTH(‘Hello’) | 5 |
SUBSTRING() |
提取子字符串 | SUBSTRING(‘Hello World’, 1, 5) | Hello |
LOWER() |
转换为小写 | LOWER(‘HELLO’) | hello |
UPPER() |
转换为大写 | UPPER(‘hello’) | HELLO |
TRIM() |
去除首尾空格 | TRIM(‘ Hello ‘) | Hello |
REPLACE() |
替换字符串 | REPLACE(‘Hello World’, ‘World’, ‘MySQL’) | Hello MySQL |
LIKE() |
模式匹配 | ‘Hello’ LIKE ‘Hel%’ | 1 (TRUE) |
2.2 字符串函数的使用
示例:
-- 基本字符串函数
SELECT
CONCAT('Hello', ' ', 'World') AS concatenated,
LENGTH('Hello') AS length,
SUBSTRING('Hello World', 1, 5) AS substring,
LOWER('HELLO') AS lowercase,
UPPER('hello') AS uppercase,
TRIM(' Hello ') AS trimmed,
REPLACE('Hello World', 'World', 'MySQL') AS replaced;
-- 在表中使用字符串函数
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);
INSERT INTO users (first_name, last_name)
VALUES ('John', 'Doe'), ('Jane', 'Smith'), ('Bob', 'Johnson');
-- 拼接姓名
SELECT
id,
CONCAT(first_name, ' ', last_name) AS full_name,
LOWER(CONCAT(first_name, '.', last_name, '@fgedu.net.cn')) AS email
FROM users;
Part03-生产环境项目实施方案
3.1 常用数值函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
ABS() |
返回绝对值 | ABS(-10) | 10 |
ROUND() |
四舍五入 | ROUND(3.14159, 2) | 3.14 |
CEIL() |
向上取整 | CEIL(3.14) | 4 |
FLOOR() |
向下取整 | FLOOR(3.99) | 3 |
MOD() |
取模 | MOD(10, 3) | 1 |
POW() |
幂运算 | POW(2, 3) | 8 |
RAND() |
生成随机数 | RAND() | 0-1之间的随机数 |
3.2 数值函数的使用
示例: 02 学习交流加群风哥微信: itpux-com
-- 基本数值函数
SELECT
ABS(-10) AS absolute,
ROUND(3.14159, 2) AS rounded,
CEIL(3.14) AS ceiling,
FLOOR(3.99) AS floor,
MOD(10, 3) AS modulus,
POW(2, 3) AS power,
RAND() AS random;
-- 在表中使用数值函数
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
price DECIMAL(10,2),
quantity INT
);
INSERT INTO products (name, price, quantity)
VALUES ('产品1', 100.50, 5), ('产品2', 200.75, 3), ('产品3', 150.25, 2);
-- 计算总价值并四舍五入
SELECT
name,
price,
quantity,
ROUND(price * quantity, 2) AS total_value
FROM products;
Part04-生产案例与实战讲解
4.1 常用日期时间函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
NOW() |
返回当前日期时间 | NOW() | 2023-01-01 12:00:00 |
CURDATE() |
返回当前日期 | CURDATE() | 2023-01-01 |
CURTIME() |
返回当前时间 | CURTIME() | 12:00:00 |
DATE() |
提取日期部分 | DATE(‘2023-01-01 12:00:00’) | 2023-01-01 |
TIME() |
提取时间部分 | TIME(‘2023-01-01 12:00:00’) | 12:00:00 |
YEAR() |
提取年份 | YEAR(‘2023-01-01’) | 2023 |
MONTH() |
提取月份 | MONTH(‘2023-01-01’) | 1 |
DAY() |
提取日期 | DAY(‘2023-01-01’) | 1 |
DATE_ADD() |
添加日期时间间隔 | DATE_ADD(‘2023-01-01’, INTERVAL 1 DAY) | 2023-01-02 |
DATE_SUB() |
减去日期时间间隔 | DATE_SUB(‘2023-01-01’, INTERVAL 1 MONTH) | 2022-12-01 |
DATEDIFF() |
计算日期差 | DATEDIFF(‘2023-01-02’, ‘2023-01-01’) | 1 |
4.2 日期时间函数的使用
示例:
-- 基本日期时间函数
SELECT
NOW() AS current_datetime,
CURDATE() AS current_date,
CURTIME() AS current_time,
DATE('2023-01-01 12:00:00') AS date_part,
TIME('2023-01-01 12:00:00') AS time_part,
YEAR('2023-01-01') AS year,
MONTH('2023-01-01') AS month,
DAY('2023-01-01') AS day,
DATE_ADD('2023-01-01', INTERVAL 1 DAY) AS next_day,
DATE_SUB('2023-01-01', INTERVAL 1 MONTH) AS last_month,
DATEDIFF('2023-01-02', '2023-01-01') AS days_diff;
-- 在表中使用日期时间函数
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATETIME,
customer_id INT
);
INSERT INTO orders (order_date, customer_id)
VALUES ('2023-01-01 10:00:00', 1), ('2023-01-02 11:00:00', 2), ('2023-01-03 12:00:00', 1);
-- 查询今天的订单
SELECT * FROM orders WHERE DATE(order_date) = CURDATE();
-- 查询本月的订单
SELECT * FROM orders WHERE YEAR(order_date) = YEAR(CURDATE()) AND MONTH(order_date) = MONTH(CURDATE());
-- 计算订单年龄(天数)
SELECT
id,
order_date,
DATEDIFF(CURDATE(), DATE(order_date)) AS order_age_days
FROM orders;
Part05-风哥经验总结与分享
5.1 常用聚合函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
SUM() |
求和 | SUM(price) | 总价格 |
AVG() |
求平均值 | AVG(price) | 平均价格 |
COUNT() |
计数 | COUNT(*) | 记录数 |
MAX() |
求最大值 | MAX(price) | 最高价格 |
MIN() |
求最小值 | MIN(price) | 最低价格 |
5.2 聚合函数的使用
示例: 03 学习交流加群风哥QQ113257174
-- 基本聚合函数
SELECT
SUM(price * quantity) AS total_fgsales,
AVG(price) AS average_price,
COUNT(*) AS product_count,
MAX(price) AS max_price,
MIN(price) AS min_price
FROM products;
-- 按客户ID分组聚合
SELECT
customer_id,
COUNT(*) AS order_count,
SUM(quantity * unit_price) AS total_spent,
MAX(order_date) AS last_order_date
FROM fgsales
GROUP BY customer_id;
-- 带条件的聚合
SELECT
status,
COUNT(*) AS order_count,
SUM(quantity * unit_price) AS total_amount
FROM fgsales
GROUP BY status
HAVING order_count > 1;
6. 条件函数
6.1 常用条件函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
IF() |
条件判断 | IF(price > 100, ‘ expensive’, ‘ cheap’) | 根据价格返回不同值 |
IFNULL() |
处理NULL值 | IFNULL(name, ‘Unknown’) | 如果name为NULL返回’Unknown’ |
NULLIF() |
比较两个值 | NULLIF(a, b) | 如果a=b返回NULL,否则返回a |
CASE |
多条件判断 | CASE WHEN price > 200 THEN ‘high’ WHEN price > 100 THEN ‘medium’ ELSE ‘low’ END | 根据价格返回不同级别 |
6.2 条件函数的使用
示例:
-- 基本条件函数
SELECT
name,
price,
IF(price > 150, '昂贵', '实惠') AS price_level,
IFNULL(description, '无描述') AS description
FROM products;
-- 使用CASE语句
SELECT
name,
price,
CASE
WHEN price > 200 THEN '高端产品'
WHEN price > 100 THEN '中端产品'
ELSE '低端产品'
END AS product_level
FROM products;
-- 处理NULL值
SELECT
id,
first_name,
last_name,
CONCAT(IFNULL(first_name, ''), ' ', IFNULL(last_name, '')) AS full_name
FROM users;
7. 转换函数
7.1 常用转换函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
CAST() |
类型转换 | CAST(‘123’ AS INT) | 123 |
CONVERT() |
类型转换 | CONVERT(‘123’, UNSIGNED) | 123 |
DATE_FORMAT() |
日期格式化 | DATE_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’) | 2023-01-01 12:00:00 |
STR_TO_DATE() |
字符串转日期 | STR_TO_DATE(‘2023-01-01’, ‘%Y-%m-%d’) | 2023-01-01 |
7.2 转换函数的使用
示例:
-- 基本转换函数
SELECT
CAST('123' AS INT) AS string_to_int,
CAST(123 AS CHAR) AS int_to_string,
CONVERT('123.45', DECIMAL(10,2)) AS string_to_decimal,
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date,
STR_TO_DATE('2023-01-01', '%Y-%m-%d') AS string_to_date;
-- 在表中使用转换函数
SELECT
id,
order_date,
DATE_FORMAT(order_date, '%Y年%m月%d日 %H时%i分%s秒') AS formatted_order_date,
CAST(total_amount AS CHAR) AS amount_string
FROM orders;
8. 其他函数
8.1 系统函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
USER() |
返回当前用户 | USER() | user@localhost |
DATABASE() |
返回当前数据库 | DATABASE() | test |
VERSION() |
返回MySQL版本 | VERSION() | 8.4.0 |
UUID() |
生成UUID | UUID() | 唯一标识符 |
8.2 加密函数
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
MD5() |
生成MD5哈希 | MD5(‘password’) | 5f4dcc3b5aa765d61d8327deb882cf99 |
SHA1() |
生成SHA1哈希 | SHA1(‘password’) | 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 |
PASSWORD() |
生成密码哈希 | PASSWORD(‘password’) | 加密后的密码 |
8.3 其他函数的使用
示例:
-- 系统函数
SELECT
USER() AS current_user,
DATABASE() AS current_database,
VERSION() AS mysql_version,
UUID() AS generated_uuid;
-- 加密函数
SELECT
MD5('password') AS md5_hash,
SHA1('password') AS sha1_hash,
PASSWORD('password') AS password_hash;
9. 函数使用最佳实践
9.1 函数的性能考虑
- 避免在WHERE子句中使用函数,会导致索引失效
- 合理使用聚合函数,避免在大表上进行复杂的聚合操作
- 使用内置函数代替自定义函数,内置函数通常性能更好
9.2 函数的可读性
- 使用有意义的函数名
- 合理使用括号,提高代码可读性
- 避免嵌套过多的函数,会降低代码可读性
9.3 函数的使用场景
- 字符串函数:处理文本数据
- 数值函数:执行数学计算
- 日期时间函数:处理时间相关数据
- 聚合函数:统计数据
- 条件函数:根据条件返回不同结果
- 转换函数:转换数据类型
10. 常见错误与解决方案
10.1 函数参数错误
问题:函数参数类型或数量不正确 04 风哥提示:
解决方案:检查函数的参数要求,确保参数类型和数量正确
10.2 函数返回值错误
问题:函数返回值不符合预期
解决方案:检查函数的返回值类型和计算逻辑 05更多学习教程公众号风哥教程itpux_com
10.3 性能问题
问题:函数使用导致性能下降
解决方案:优化函数使用,避免在大表上使用复杂函数
11. 示例:综合使用函数
示例:
-- 创建综合示例表
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
salary DECIMAL(10,2),
department VARCHAR(50)
);
-- 插入数据
INSERT INTO employees (first_name, last_name, hire_date, salary, department)
VALUES
('John', 'Doe', '2020-01-01', 5000.00, 'IT'),
('Jane', 'Smith', '2021-02-01', 6000.00, 'HR'),
('Bob', 'Johnson', '2019-03-01', 5500.00, 'IT'),
('Alice', 'Brown', '2022-04-01', 6500.00, 'Finance'),
('Charlie', 'Davis', '2020-05-01', 7000.00, 'IT');
-- 综合使用函数
SELECT
id,
CONCAT(first_name, ' ', last_name) AS full_name,
department,
salary,
CASE
WHEN salary > 6000 THEN '高收入'
WHEN salary > 5000 THEN '中等收入'
ELSE '低收入'
END AS salary_level,
hire_date,
DATEDIFF(CURDATE(), hire_date) AS days_employed,
ROUND(DATEDIFF(CURDATE(), hire_date) / 365, 1) AS years_employed
FROM employees
ORDER BY salary DESC;
-- 按部门聚合
SELECT
department,
COUNT(*) AS employee_count,
AVG(salary) AS average_salary,
MAX(salary) AS max_salary,
MIN(salary) AS min_salary
FROM employees
GROUP BY department;
12. 总结
本教程详细介绍了MySQL的函数使用,包括: 06 from mysql视频:www.itpux.com
- 函数概述
- 字符串函数
- 数值函数
- 日期时间函数
- 聚合函数
- 条件函数
- 转换函数
- 其他函数
- 函数使用最佳实践
- 常见错误与解决方案
函数是MySQL中强大的工具,掌握各种函数的使用方法对于编写高效、正确的SQL语句非常重要。在实际项目中,应根据具体的业务需求选择合适的函数,并注意函数的性能影响和使用场景,以提高SQL语句的性能和可读性。
提示:在使用函数时,应注意函数的参数要求和返回值类型,以避免出现错误。同时,应合理使用函数,避免过度使用导致性能下降。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
