news 2026/5/1 4:59:42

【MySQL】内置函数和内外连

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MySQL】内置函数和内外连

MySQL 内置函数 + 内外连接 超实用总结(2026 面试+生产必备)

一、MySQL 最常用内置函数(背会这 50 个,够用 99% 场景)
1. 字符串函数(最常用 TOP10)
函数说明示例结果
CONCAT(str1,str2,…)拼接字符串(NULL 会污染)CONCAT(‘A’,‘B’,NULL)NULL
CONCAT_WS(sep,str1,str2…)带分隔符拼接(NULL 不影响)CONCAT_WS(‘-’,‘A’,‘B’,NULL,‘C’)A-B-C
LEFT(str,len)左起 len 个字符LEFT(‘abcde’,3)abc
RIGHT(str,len)右起 len 个字符RIGHT(‘abcde’,3)cde
SUBSTRING(str,pos,len)从 pos 开始取 len 个(pos 从 1 开始)SUBSTRING(‘abcde’,2,3)bcd
TRIM([BOTH] ‘x’ FROM str)去掉两边指定字符,默认空格TRIM(’ abc ')abc
LTRIM / RTRIM去左/去右空格
REPLACE(str,from,to)替换所有 from 为 toREPLACE(‘aaabbb’,‘a’,‘x’)xxxbbb
UPPER(str) / LOWER(str)大小写转换UPPER(‘Abc’)ABC
LENGTH(str)字节长度(中文占 3)LENGTH(‘中国’)6
CHAR_LENGTH(str)字符长度(中文占 1)CHAR_LENGTH(‘中国’)2
2. 数值函数(TOP8)
函数说明示例
ROUND(x,d)四舍五入,d 小数位ROUND(3.14159,2) → 3.14
CEIL(x) / FLOOR(x)向上/向下取整CEIL(3.01) → 4
TRUNCATE(x,d)直接截断,不四舍五入TRUNCATE(3.14159,2) → 3.14
ABS(x)绝对值ABS(-5) → 5
RAND()0~1 随机小数RAND()
MOD(a,b)取模(余数)MOD(10,3) → 1
POW(x,y)x 的 y 次方POW(2,10) → 1024
GREATEST / LEAST多值取最大/最小GREATEST(1,5,3) → 5
3. 日期时间函数(TOP15,超级高频!)
函数说明示例结果
NOW() / CURRENT_TIMESTAMP当前日期时间2026-01-22 18:45:30
CURDATE() / CURRENT_DATE当前日期2026-01-22
CURTIME()当前时间18:45:30
DATE_ADD(date, INTERVAL 1 DAY)日期加减2026-01-23
DATE_SUB(date, INTERVAL 1 MONTH)2025-12-22
DATEDIF(date1,date2,‘d’)MySQL 无此函数!用 TIMESTAMPDIFF
TIMESTAMPDIFF(unit,datetime1,datetime2)计算两个日期差(年月日时分秒)TIMESTAMPDIFF(DAY,‘2026-01-01’,‘2026-01-22’) → 21
DATE_FORMAT(date,‘%Y-%m-%d %H:%i:%s’)格式化输出2026-01-22 18:45
STR_TO_DATE(str,format)字符串转日期STR_TO_DATE(‘2026/01/22’,‘%Y/%m/%d’)
YEAR/MONTH/DAY/HOUR/MINUTE/SECOND(date)取年月日时分秒YEAR(NOW()) → 2026
UNIX_TIMESTAMP()当前时间戳(秒)1737581130
FROM_UNIXTIME(unix_timestamp)时间戳转日期2026-01-22 18:45:30
4. 条件判断函数(神级)
函数说明示例
IF(expr1,expr2,expr3)三元运算IF(1>0,‘真’,‘假’) → ‘真’
IFNULL(expr1,expr2)expr1 为 NULL 返回 expr2IFNULL(NULL,‘默认’) → ‘默认’
NULLIF(expr1,expr2)expr1=expr2 返回 NULL,否则返回 expr1NULLIF(‘A’,‘A’) → NULL
CASE WHEN … THEN … ELSE … END多条件判断(SQL 版 switch)见下面实战
5. 聚合函数(分组必备)

COUNT、SUM、AVG、MAX、MIN、GROUP_CONCAT(字段 SEPARATOR ‘,’) → 超级好用!

二、内外连接全家福(背会这张表就够了)
连接类型写法1(SQL99)写法2(SQL92,老项目常见)结果说明使用频率
内连接INNER JOIN … ONWHERE a.id = b.id两表匹配的记录(交集)★★★★★
左外连接LEFT JOIN … ONWHERE a.id = b.id(+) (Oracle 语法)左表全部 + 右表匹配的(右表无匹配补 NULL)★★★★★
右外连接RIGHT JOIN … ONWHERE a.id = (+ )b.id (Oracle)右表全部 + 左表匹配的(左表无匹配补 NULL)★★★★☆
全外连接FULL OUTER JOIN … ONMySQL 不支持!用 UNION 模拟两表全部记录,无匹配补 NULL★★☆☆☆
左连接排除交集LEFT JOIN … ON … WHERE b.id IS NULL左表有但右表没有的记录(左差集)★★★★☆
右连接排除交集RIGHT JOIN … ON … WHERE a.id IS NULL右表有但左表没有的记录(右差集)★★★☆☆
全外排除交集FULL JOIN + WHERE a.id IS NULL OR b.id IS NULLUNION 模拟两表互不相同的记录(对称差集)★★★☆☆

经典案例:查询所有学生(包括没选课的)和他们的成绩

-- 左连接(最常用写法)SELECTs.*,c.course_name,sc.scoreFROMstudent sLEFTJOINscore scONs.id=sc.student_idLEFTJOINcourse cONsc.course_id=c.id;

查询没选课的学生(左连接排除交集)

SELECTs.*FROMstudent sLEFTJOINscore scONs.id=sc.student_idWHEREsc.student_idISNULL;

MySQL 模拟全外连接(不支持 FULL JOIN)

SELECT*FROMALEFTJOINBONA.id=B.idUNIONSELECT*FROMARIGHTJOINBONA.id=B.id;
三、2026 年最实用的 5 个组合技巧
  1. GROUP_CONCAT + CASE WHEN 实现一行多列转一行一列(神技)
  2. IFNULL + COALESCE 防止 NULL 污染
  3. DATE_FORMAT + GROUP BY 按年月统计
  4. LEFT JOIN + IS NULL 查“有A无B”数据
  5. TIMESTAMPDIFF + INTERVAL 动态时间段统计

把上面这些函数和连接方式记熟,MySQL 面试题基本秒杀,日常开发也够用 95% 以上了!

需要我给你出 20 道经典 MySQL 面试题(带答案)练手吗?随时说~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 21:16:14

5分钟快速原型:用快马构建API测试工具MVP

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速开发一个最小可行API测试工具原型,要求:1. 支持GET/POST请求 2. 简单参数输入 3. 响应展示 4. 历史记录 5. 一键分享功能。使用纯前端实现,…

作者头像 李华
网站建设 2026/5/1 2:40:30

企业级应用中处理GPG签名验证失败的实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业级应用案例,展示如何处理GPG签名验证失败问题。案例应包括:1) 问题描述和错误日志;2) 分析缺失的公钥来源;3) 从企业内…

作者头像 李华
网站建设 2026/4/23 10:01:03

5分钟快速搭建:Ubuntu Samba最小化可行配置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个极简Ubuntu Samba快速部署工具,功能:1. 最小化安装选项(仅安装必需组件)2. 单命令完成部署 3. 自动生成随机共享密码 4. 临…

作者头像 李华
网站建设 2026/4/23 22:14:30

下一代代码模型趋势分析:IQuest-Coder-V1训练范式解读

下一代代码模型趋势分析:IQuest-Coder-V1训练范式解读 1. 它不是又一个“会写代码”的模型,而是懂软件怎么长大的模型 你可能已经用过不少代码大模型——输入函数名,它补全;贴段报错,它给方案;甚至还能写…

作者头像 李华