惜别伤离方寸乱,忘了临行,酒盏深和浅。
——李清照《蝶恋花》
## MySql高级之常用SQL技巧☆
1. SQL执行顺序
编写顺序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| select distinct <select list> from <left_table> <join_type> join <right_table> ON <join_condition> where <where_condition> group by <group_by_list> having <having_condition> order by <order_by_condition> limit <limit_params>
|
执行顺序
1 2 3 4 5 6 7 8 9
| from <left_table> on <join_condition> <join_type> join <right_table> where <where_condition> group by <group_by_list> having <having_condition> select distinct <select list> order by <order_by_condition> limit <limit_params>
|
2. 正则表达式使用
正则表达式(Regular Expression)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
符号 |
含义 |
^ |
在字符串开始处进行匹配 |
$ |
在字符串末尾处进行匹配 |
. |
匹配任意单个字符, 包括换行符 |
[...] |
匹配出括号内的任意字符 |
[^...] |
匹配不出括号内的任意字符 |
a* |
匹配零个或者多个a(包括空串) |
a+ |
匹配一个或者多个a(不包括空串) |
a? |
匹配零个或者一个a |
a1|a2 |
匹配a1或a2 |
a(m) |
匹配m个a |
a(m,) |
至少匹配m个a |
a(m,n) |
匹配m个a 到 n个a |
a(,n) |
匹配0到n个a |
(…) |
将模式元素组成单一元素 |
1 2 3 4 5
| select * from emp where name regexp '^T';
select * from emp where name regexp '2$';
select * from emp where name regexp '[uvw]';
|
3. MySQL 常用函数
3.1 数字函数
函数名称 |
作 用 |
ABS |
求绝对值 |
SQRT |
求二次方根 |
MOD |
求余数 |
CEIL 和 CEILING |
两个函数功能相同,都是返回不小于参数的最小整数,即向上取整 |
FLOOR |
向下取整,返回值转化为一个BIGINT |
RAND |
生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列 |
ROUND |
对所传参数进行四舍五入 |
SIGN |
返回参数的符号 |
POW 和 POWER |
两个函数的功能相同,都是所传参数的次方的结果值 |
SIN |
求正弦值 |
ASIN |
求反正弦值,与函数 SIN 互为反函数 |
COS |
求余弦值 |
ACOS |
求反余弦值,与函数 COS 互为反函数 |
TAN |
求正切值 |
ATAN |
求反正切值,与函数 TAN 互为反函数 |
COT |
求余切值 |
3.2 字符串函数
函数名称 |
作 用 |
LENGTH |
计算字符串长度函数,返回字符串的字节长度 |
CONCAT |
合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个 |
INSERT |
替换字符串函数 |
LOWER |
将字符串中的字母转换为小写 |
UPPER |
将字符串中的字母转换为大写 |
LEFT |
从左侧字截取符串,返回字符串左边的若干个字符 |
RIGHT |
从右侧字截取符串,返回字符串右边的若干个字符 |
TRIM |
删除字符串左右两侧的空格 |
REPLACE |
字符串替换函数,返回替换后的新字符串 |
SUBSTRING |
截取字符串,返回从指定位置开始的指定长度的字符换 |
REVERSE |
字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串 |
3.3 日期函数
函数名称 |
作 用 |
CURDATE 和 CURRENT_DATE |
两个函数作用相同,返回当前系统的日期值 |
CURTIME 和 CURRENT_TIME |
两个函数作用相同,返回当前系统的时间值 |
NOW 和 SYSDATE |
两个函数作用相同,返回当前系统的日期和时间值 |
MONTH |
获取指定日期中的月份 |
MONTHNAME |
获取指定日期中的月份英文名称 |
DAYNAME |
获取指定曰期对应的星期几的英文名称 |
DAYOFWEEK |
获取指定日期对应的一周的索引位置值 |
WEEK |
获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53 |
DAYOFYEAR |
获取指定曰期是一年中的第几天,返回值范围是1~366 |
DAYOFMONTH |
获取指定日期是一个月中是第几天,返回值范围是1~31 |
YEAR |
获取年份,返回值范围是 1970〜2069 |
TIME_TO_SEC |
将时间参数转换为秒数 |
SEC_TO_TIME |
将秒数转换为时间,与TIME_TO_SEC 互为反函数 |
DATE_ADD 和 ADDDATE |
两个函数功能相同,都是向日期添加指定的时间间隔 |
DATE_SUB 和 SUBDATE |
两个函数功能相同,都是向日期减去指定的时间间隔 |
ADDTIME |
时间加法运算,在原始时间上添加指定的时间 |
SUBTIME |
时间减法运算,在原始时间上减去指定的时间 |
DATEDIFF |
获取两个日期之间间隔,返回参数 1 减去参数 2 的值 |
DATE_FORMAT |
格式化指定的日期,根据参数返回指定格式的值 |
WEEKDAY |
获取指定日期在一周内的对应的工作日索引 |
3.4 聚合函数
函数名称 |
作用 |
MAX |
查询指定列的最大值 |
MIN |
查询指定列的最小值 |
COUNT |
统计查询结果的行数 |
SUM |
求和,返回指定列的总和 |
AVG |
求平均值,返回指定列数据的平均值 |
☆