MySQL知识点查漏补缺
- 数据库常识
- 不常见知识点:
数据库常识
知识点001: between…and … 包含临界值。
知识点002:任何内容与null相加等于null。
知识点003:模糊查询涉及的函数有:like,between…and…, in/ not in
知识点004:concat(col1,col2),拼接函数。
知识点005:instr() 获取字符串下标。
知识点006:length()获取字节下标。
知识点007:substr substring 函数功能相同,截取字符串。
知识点008:INNODB搜索引擎查询效率: count(*) >=count(1) >count(字段),因为: count(字段) 包含一个过滤条件,需要将字段中的null值过滤掉。(查询值比较:count(*) =count(1) >=count(字段))。
知识点009:转义字符为:
知识点010:左/右外连接, 内连接
知识点013:union 不去重, union all 去重
知识点014:阿里巴巴开发手册, 超过三个表禁止join,需要join的字段,数据类型保持绝对一致,多表关联查询时,保证被关联的字段需要有索引。
知识点015:MySQL提供的内置函数从实现功能分为 数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数。
知识点016:rand(),返回0-1的随机值。rand(x) , 返回0-1的随机值,其中x的值用作种子值,相同的x值会产生相同的随机值。
知识点017:round(x) 返回一个队x的值进行四舍五入后,接近x的整数;round(x,y) 返回一个对x的值进行四舍五入后最后接近x的值,并保留到小说点后面Y位。
知识点018:truncate(x,y):返回数字X截断为Y位小数的结果。
知识点019:字符串的索引是从1开始的,Java是从0开始的。
知识点020:CONCAT_WS(x,s1,s2,…,sn) 同CONCAT(s1,s2,…)函数,但是每个字符串之间要加上x
知识点021:INSERT(str, idx, len,replacestr)将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr
知识点022:LEFT(str,n) 返回字符串str最左边的n个字符;RIGHT(str,n) 返回字符串str最右边的n个字符
知识点023:LPAD(str, len, pad) 用字符串pad对str最左边进行填充,直到str的长度为len个字符
知识点024:RPAD(str ,len, pad) 用字符串pad对str最右边进行填充,直到str的长度为len个字符
知识点025:REPEAT(str, n) 返回str重复n次的结果
知识点026:SPACE(n) 返回n个空格
知识点027:SUBSTR(s,index,len)返回从字符串s的index位置其len个字符,作用与SUBSTRING(s,n,len)、MID(s,n,len)相同
知识点028:LOCATE(substr,str)返回字符串substr在字符串str中首次出现的位置,作用于POSITION(substrIN str)、INSTR(str,substr)相同。未找到,返回0
知识点029:FIELD(s,s1,s2,…,sn) 返回字符串s在字符串列表中第一次出现的位置
知识点030:FIND_IN_SET(s1,s2)返回字符串s1在字符串s2中出现的位置。其中,字符串s2是一个以逗号分隔的字符串
知识点031:REVERSE(s) 返回s反转后的字符串
知识点032:NULLIF(value1,value2)比较两个字符串,如果value1与value2相等,则返回NULL,否则返回value1
获取日期、时间
知识点033:CURDATE() ,CURRENT_DATE()返回当前日期,只包含年、月、日
知识点034:CURTIME() , CURRENT_TIME()返回当前时间,只包含时、分、秒
知识点035:NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() /LOCALTIMESTAMP()返回当前系统日期和时间
知识点036:UTC_DATE()返回UTC(世界标准时间)日期
知识点037:UTC_TIME()返回UTC(世界标准时间)时间
日期与时间戳的转换
知识点038:UNIX_TIMESTAMP()以UNIX时间戳的形式返回当前时间。SELECT UNIX_TIMESTAMP() ->1634348884
知识点039:UNIX_TIMESTAMP(date) 将时间date以UNIX时间戳的形式返回。
知识点040:FROM_UNIXTIME(timestamp) 将UNIX时间戳的时间转换为普通格式的时间
获取月份、星期、星期数、天数等函数
知识点041:YEAR(date) / MONTH(date) / DAY(date) 返回具体的日期值
知识点042:HOUR(time) / MINUTE(time) /SECOND(time)返回具体的时间值
知识点043:MONTHNAME(date) 返回月份:January,…
知识点044:DAYNAME(date) 返回星期几:MONDAY,TUESDAY…SUNDAY
知识点045:WEEKDAY(date) 返回周几,注意,周1是0,周2是1,。。。周日是6
知识点046:QUARTER(date) 返回日期对应的季度,范围为1~4
知识点047:WEEK(date) , WEEKOFYEAR(date) 返回一年中的第几周
知识点048:DAYOFYEAR(date) 返回日期是一年中的第几天
知识点049:DAYOFMONTH(date) 返回日期位于所在月份的第几天
知识点050:DAYOFWEEK(date) 返回周几,注意:周日是1,周一是2,。。。周六是7
知识点051:EXTRACT(type FROM date) 返回指定日期中特定的部分,type指定返回的值
EXTRACT(type FROM date)函数中type的取值与含义:
时间和秒钟转换的函数
知识点052:TIME_TO_SEC(time) 将 time 转化为秒并返回结果值。转化的公式为:小时3600+分钟60+秒
知识点053:SEC_TO_TIME(seconds) 将 seconds 描述转化为包含小时、分钟和秒的时间
计算日期和时间的函数
知识点054:DATE_ADD(datetime, INTERVAL expr type):返回与给定日期时间相差INTERVAL时间段的日期时间
ADDDATE(date,INTERVAL expr type):返回与给定日期时间相差INTERVAL时间段的日期时间
知识点055:DATE_SUB(date,INTERVAL expr type):返回与date相差INTERVAL时间间隔的日期
SUBDATE(date,INTERVAL expr type):返回与date相差INTERVAL时间间隔的日期
上述函数中type的取值:
知识点056:ADDTIME(time1,time2)返回time1加上time2的时间。当time2为一个数字时,代表的是秒 ,可以为负数
知识点057:SUBTIME(time1,time2)返回time1减去time2后的时间。当time2为一个数字时,代表的是 秒 ,可以为负数
知识点058:DATEDIFF(date1,date2) 返回date1 - date2的日期间隔天数
知识点059:TIMEDIFF(time1, time2) 返回time1 - time2的时间间隔
知识点060:FROM_DAYS(N) 返回从0000年1月1日起,N天以后的日期
知识点061:TO_DAYS(date) 返回日期date距离0000年1月1日的天数
知识点062:LAST_DAY(date) 返回date所在月份的最后一天的日期
知识点063:MAKEDATE(year,n) 针对给定年份与所在年份中的天数返回一个日期
知识点064:MAKETIME(hour,minute,second) 将给定的小时、分钟和秒组合成时间并返回
知识点065:PERIOD_ADD(time,n) 返回time加上n后的时间
日期的格式化与解析
知识点066:DATE_FORMAT(date,fmt) 按照字符串fmt格式化日期date值
知识点067:TIME_FORMAT(time,fmt) 按照字符串fmt格式化时间time值
知识点068:GET_FORMAT(date_type,format_type) 返回日期字符串的显示格式
知识点069:STR_TO_DATE(str, fmt) 按照字符串fmt对str进行解析,解析为一个日期
上述 非GET_FORMAT 函数中fmt参数常用的格式符:
GET_FORMAT函数中date_type和format_type参数取值如下:
流程控制函数
知识点070:流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。
知识点071:IF(value,value1,value2) 如果value的值为TRUE,返回value1,否则返回value2
知识点072:IFNULL(value1, value2) 如果value1不为NULL,返回value1,否则返回value2
知识点073:CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2… [ELSE resultn] END 相当于Java的if…else if…else…
知识点074:CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN值1 … [ELSE 值n] END 相当于Java的switch…case…
知识点075:
知识点076:
知识点077:
知识点078:
知识点079:
知识点080:
知识点081:
知识点082:
知识点083:
知识点084:
知识点085:
知识点086:
知识点087:
知识点088:
知识点089:
知识点090:
知识点091:
知识点092:
知识点093:
知识点094:
知识点095:
知识点096:
知识点097:
知识点098:
知识点099:
知识点100:
不常见知识点:
知识点592:
知识点593:
知识点594:
知识点595:
知识点596:
知识点597:ELT(m,s1,s2,…,sn)返回指定位置的字符串,如果m=1,则返回s1,如果m=2,则返回s2,如果m=n,则返回sn
知识点598:STRCMP(s1,s2) 比较字符串s1,s2的ASCII码值的大小
知识点599:自然连接:NATURAL JOIN 用来表示自然连接。我们可以把
自然连接理解为 SQL92 中的等值连接。它会帮你自动查询两张连接表中 所有相同的字段 ,然后进行 等值
连接 。
知识点600: USING连接
当我们进行连接的时候,SQL99还支持使用 USING 指定数据表里的 同名字段 进行等值连接。但是只能配
合JOIN一起使用。