为什么使用MySQL函数?
为了简化操作,MySql提供了大量的函数给程序员使用(比如你想输入当前时间,可y以调用now()函数)
在哪里使用MySQL函数
插入语句的values()中,更新语句中,删除语句中,查询语句及其子句中。
MySQL常见函数
字符串函数
| 函数操作符 | 方法描述 |
|---|---|
| CONCAT(S1,S2,…,Sn) | 连接S1,S2,…,Sn为一个字符串 |
| CONCAT(s, S1,S2,…,Sn) | 同CONCAT(s1,s2,…)函数,但是每个字符串之间要加上s |
| CONCAT_WS(separator, str1, str2, …) | 可以指定间隔符将多个字符串进行连接; |
| CHAR_LENGTH(s) | 返回字符串s的字符数 |
| LENGTH(s) | 返回字符串s的字节数,和字符集有关 |
| INSERT(str, index , len, instr) | 将字符串str从第index位置开始,len个字符长的子串替换为字符串instr |
| UPPER(s) 或 UCASE(s) | 将字符串s的所有字母转成大写字母 |
| LOWER(s) 或LCASE(s) | 将字符串s的所有字母转成小写字母 |
| LEFT(s,n) | 返回字符串s最左边的n个字符 |
| RIGHT(s,n) | 返回字符串s最右边的n个字符 |
| LPAD(str, len, pad) | 用字符串pad对str最左边进行填充,直到str的长度为len个字符 |
| RPAD(str ,len, pad) | 用字符串pad对str最右边进行填充,直到str的长度为len个字符 |
| LTRIM(s) | 去掉字符串s左侧的空格 |
| RTRIM(s) | 去掉字符串s右侧的空格 |
| TRIM(s) | 去掉字符串s开始与结尾的空格 |
| TRIM(【BOTH 】s1 FROM s) | 去掉字符串s开始与结尾的s1 |
| TRIM(【LEADING】s1 FROM s) | 去掉字符串s开始处的s1 |
| TRIM(【TRAILING】s1 FROM s) | 去掉字符串s结尾处的s1 |
| REPEAT(str, n) | 返回str重复n次的结果 |
| REPLACE(str, a, b) | 用字符串b替换字符串str中所有出现的字符串a |
| STRCMP(s1,s2) | 比较字符串s1,s2 |
| SUBSTRING(s,index,len) | 返回从字符串s的index位置其len个字符 |
数学函数
| 函数操作符 | 方法描述 |
|---|---|
| ABS(x) | 返回x的绝对值 |
| CEIL(x) | 返回大于x的最小整数值 |
| FLOOR(x) | 返回大于x的最大整数值 |
| MOD(x,y) | 返回x/y的模 |
| RAND(x) | 返回0~1的随机值 |
| ROUND(x,y) | 返回参数x的四舍五入的有y位的小数的值 |
| TRUNCATE(x,y) | 返回数字x截断为y位小数的结果 |
| SQRT(x) | 返回x的平方根 |
| POW(x,y) | 返回x的y次方 |
日期时间函数
| 函数操作符 | 方法描述 |
|---|---|
| current_date() | 获取当前日期,如 2019-10-18 |
| current_time() | 获取当前时:分:秒,如:15:36:11 |
| now() | 获取当前的日期和时间,如:2019-10-18 15:37:17 |
| WEEK(date) WEEKOFYEAR(date) | 返回一年中的第几周 |
| DAYOFWEEK() | 返回周几,注意:周日是1,周一是2,。。。周六是7 |
| WEEKDAY(date) | 返回周几,注意,周1是0,周2是1,。。。周日是6 |
| DAYNAME(date) | 返回星期:MONDAY,TUESDAY…SUNDAY |
| MONTHNAME(date) | 返回月份:January,。。。。。 |
| DATEDIFF(date1,date2) TIMEDIFF(time1, time2) | 返回date1 - date2的日期间隔 返回time1 - time2的时间间隔 |
| DATE_ADD(datetime, INTERVALE expr type) | 返回与给定日期时间相差INTERVAL时间段的日期时间 |
| DATE_FORMAT(datetime ,fmt) | 按照字符串fmt格式化日期datetime值 |
| STR_TO_DATE(str, fmt) | 按照字符串fmt对str进行解析,解析为一个日期 |
流程函数
| 函数操作符 | 方法描述 |
|---|---|
| IF(value,t ,f) | 如果value是真,返回t,否则返回f |
| IFNULL(value1, value2) | 如果value1不为空,返回value1,否则返回value2 |
| CASE WHEN 条件1 THEN result1 WHEN 条件2 THEN result2 … [ELSE resultn] END | 相当于Java的if…else if… |
| CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1 … [ELSE 值n] END | 相当于Java的switch |
聚合函数
| 函数操作符 | 方法描述 |
|---|---|
| max(列名) | 求这一列的最大值 |
| min(列名) | 求这一列的最小值 |
| avg(列名) | 求这一列的平均值 |
| count(列名) | 统计这一列有多少条记录 |
| sum(列名) | 对这一列求总和 |
分组函数
语法:
GROUP BY将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。
SELECT 字段1,字段2... FROM 表名 [where 条件] GROUP BY 列 [HAVING 条件];.
< 分组的目的就是为了统计,一般分组会跟聚合函数一起使用 >
注意事项:
- 根据某一列进行分组, 将分组字段结果中相同内容作为一组; 有几组 返回的记录就有几条
- 单独分组 没有意义, 返回每一组的第一条记录
- 分组的目的一般为了做统计使用, 所以经常和聚合函数一起使用
- 在分组里面, 如果select后面的列没有出现在group by后面 展示这个组的这个列的第一个数据
连接查询
内连接:
隐式内连接: select … from 表1,表2 where 外键字段的值 = 主表主键的值 and 条件…;
显式内连接: select … from 表1 inner join 表2 on 外键字段的值 = 主表主键的值 [where 条件];
外连接:
左外连接: select … from 左表 left [outer] join 右表 on 外键字段的值 = 主表主键的值 [where 条件];
右外连接: select … from 左表 right [outer] join 右表 on 外键字段的值 = 主表主键的值 [where 条件];
子查询:
子查询的结果是一个值: select … from 表名 where 字段 (= > < >= <= <>) (子查询);
子查询的结果是单列多行: select … from 表名 where 字段 in (子查询);
子查询的结果是多列多行:
select … from (子查询) 别名 where 条件;
select … from (子查询) 别名,表名 别名 where 条件;
select … from (子查询) 别名 left join 表名 别名 on 条件;
select … from (子查询) 别名 right join 表名 别名 on 条件;
博客介绍了使用MySQL函数的原因及使用场景,详细阐述了常见的MySQL函数,包括字符串、数学、日期时间等函数。还介绍了分组函数的语法、注意事项,以及连接查询,如内连接、外连接和子查询的不同情况。
1242

被折叠的 条评论
为什么被折叠?



