一、mysql可以进行跨库查询

SELECT * FROM mysql.db;

 

二、[1]MySQL 数值型函数

1 -- [1]MySQL 数值型函数
 2 -- 在 MySQL 中绝对值函数 ABS(x) 返回 x 的绝对值。正数的绝对值是其本身,负数的绝对值为其相反数,0 的绝对值是 0。
 3 SELECT ABS(-119);
 4 -- 在 MySQL 中平方根函数 SQRT(x) 返回非负数 x 的二次方根。负数没有平方根,返回结果为 NULL
 5 SELECT SQRT(4);
 6 -- 在 MySQL 中求余函数 MOD(x,y) 返回 x 被 y 除后的余数,MOD() 对于带有小数部分的数值也起作用,它返回除法运算后的余数。
 7 SELECT MOD(15,5),MOD(120,7),MOD(10.5,2);
 8 -- 在 MySQL 中取整函数 CEIL(x) 和 CEILING(x) 的意义相同,返回不小于 x 的最小整数值,返回值转化为一个 BIGINT。
 9 SELECT CEIL(2.5),CEIL(-2.5),CEILING(2.5);
10 -- MySQL FLOOR(x) 函数返回小于 x 的最大整数值。
11 SELECT FLOOR(5),FLOOR(5.66),FLOOR(-4),FLOOR(-4.66);
12 -- MySQL RAND() 函数被调用时,可以产生一个在 0 和 1 之间的随机数。
13 SELECT RAND(),RAND(),RAND();
14 -- 在 MySQL 中符号函数 SIGN(x) 返回参数的符号,x 的值为负、零和正时返回结果依次为 -1、0 和 1。
15 SELECT SIGN(-90),SIGN(0),SIGN(22);
16 -- MySQL POW(x,y) 函数和 POWER(x,y) 函数用于计算 x 的 y 次方。
17 SELECT POW(2,3),POW(4,-2),POW(100,0),POW(6,-3),POWER(1,2);
18 -- MySQL 中正弦函数 SIN(x) 返回 x 的正弦值,其中 x 为弧度值。
19 SELECT SIN(1),SIN(0.5*PI());
20 -- MySQL 中反正弦函数 ASIN(x) 返回 x 的反正弦值,若 x 不在 -1 到 1 的范围之内,则返回 NULL。
21 SELECT ASIN(1),ASIN(0.8414709848078965),ASIN(2);
22 -- MySQL 中余弦函数 COS(x) 返回 x 的余弦值,x 为弧度值。
23 SELECT COS(1),COS(0),COS(PI());
24 -- MySQL 中反余弦函数 ACOS(x) 。x 值的范围必须在 -1 和 1 之间,否则返回 NULL
25 SELECT ACOS(2),ACOS(1),ACOS(-1);
26 -- MySQL 中正切函数 TAN(x) 返回 x 的正切值,x 为给定的弧度值。
27 SELECT TAN(1),TAN(0);
28 -- MySQL 中反正切 ATAN(x) 返回 x 的反正切值,正切为 x 的值。
29 SELECT ATAN(1.5574077246549023),ATAN(0);
30 -- MySQL 余切函数 COT(x) 返回 x 的余切值,x 是给定的弧度值。
31 SELECT COT(1);

 

三、[2]MySQL 字符串函数

1 -- [2]MySQL 字符串函数
 2 -- MySQL LENGTH(str) 函数的返回值为字符串的字节长度,使用 uft8(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字是 3 个字节,一个数字或字母是一个字节。
 3 SELECT length('name'),length('数据库');
 4 -- MySQL 中的 CONCAT(sl,s2,...) 函数返回结果为连接参数产生的字符串,或许有一个或多个参数。
 5 -- 若有任何一个参数为 NULL,则返回值为 NULL。若所有参数均为非二进制字符串,则结果为非二进制字符串。若自变量中含有任一二进制字符串,则结果为一个二进制字符串。
 6 SELECT CONCAT('mysql','8.0'),CONCAT('mysql',NULL);
 7 -- MySQL 中替换字符串函数 INSERT(s1,x,len,s2) 返回字符串 s1,子字符串起始于 x 位置,并且用 len 个字符长的字符串代替 s2。
 8 -- 若 x 超过字符串长度,则返回值为原始字符串。假如 len 的长度大于其他字符串的长度,则从位置 x 开始替换。若任何一个参数为 NULL,则返回值为 NULL。
 9 SELECT INSERT('Football',2,4,'Play') AS col1,INSERT('Football',-1,4,'Play') AS col2,INSERT('Football',3,20,'Play') AS col3,INSERT('Football',2,5,'Play') col4,INSERT('Football',2,3,'Play') AS col5;
10 -- MySQL 中字母小写转换函数 LOWER(str) 可以将字符串 str 中的字母字符全部转换成小写。
11 SELECT LOWER('BLUE'),LOWER('Blue');
12 -- MySQL 中字母大写转换函数 UPPER(str) 可以将字符串 str 中的字母字符全部转换成大写。
13 SELECT UPPER('green'),UPPER('Green');
14 -- MySQL 中的 LEFT(s,n) 函数返回字符串 s 最左边的 n 个字符。
15 SELECT LEFT('MySQL',2);
16 -- MySQL 中的 RIGHT(s,n) 函数返回字符串 s 最右边的 n 个字符。
17 SELECT RIGHT('MySQL',3);
18 -- MySQL 中删除空格函数 TRIM(s) 删除字符串 s 两侧的空格。
19 SELECT '(  mobile )',CONCAT('[',TRIM('  mobile '),']');
20 -- MySQL 中替换函数 REPLACE(s,s1,s2) 使用字符串 s2 替换字符串 s 中所有的字符串 s1。
21 SELECT REPLACE('aaa.mysql.com','a','w'),REPLACE('aaa.mysql.com','a','wan');
22 -- MySQL 中获取子串函数 SUBSTRING(s,n,len) 带有 len 参数的格式,从字符串 s 返回一个长度同 len 字符相同的子字符串,起始于位置 n。
23 -- 也可能对 n 使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的第 n 个字符,即倒数第 n 个字符,而不是字符串的开头位置
24 SELECT SUBSTRING('computer',3) AS col1,SUBSTRING('computer',3,4) AS col2,SUBSTRING('computer',-3) AS col3,SUBSTRING('computer',-5,3) AS col4;
25 -- MySQL 中字符串逆序函数 REVERSE(s) 可以将字符串 s 反转,返回的字符串的顺序和 s 字符串的顺序相反。
26 SELECT REVERSE('hello');

 

四、[4]MySQL 日期和时间函数

1 -- [3]MySQL 日期和时间函数
 2 -- MySQL 中 CURDATE() 和 CURRENT_DATE() 函数的作用相同,将当前日期按照“YYYY-MM-DD”或“YYYYMMDD”格式的值返回,具体格式根据函数用在字符串或数字语境中而定。
 3 SELECT CURDATE(),CURRENT_DATE(),CURRENT_DATE()+0;
 4 -- MySQL 中 CURTIME() 和 CURRENT_TIME() 函数的作用相同,将当前时间以“HH:MM:SS”或“HHMMSS”格式返回,具体格式根据函数用在字符串或数字语境中而定。
 5 SELECT CURTIME(),CURRENT_TIME(),CURRENT_TIME()+0;
 6 -- MySQL中 NOW() 和 SYSDATE() 函数的作用相同,都是返回当前日期和时间值,格式为“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS”,具体格式根据函数用在字符串或数字语境中而定。
 7 SELECT NOW(),SYSDATE();
 8 -- MySQL UNIX_TIMESTAMP(date) 若无参数调用,返回一个无符号整数类型的 UNIX 时间戳('1970-01-01 00:00:00'GMT之后的秒数)
 9 -- 若用 date 来调用 UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00'GMT后的秒数的形式返回
10 SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),NOW();
11 -- MySQL FROM_UNIXTIME(date) 函数把 UNIX 时间戳转换为普通格式的日期时间值,与 UNIX_TIMESTAMP () 函数互为反函数。
12 SELECT FROM_UNIXTIME(1574000367);
13 -- MySQL 中 MONTH(date) 函数返回指定 date 对应的月份,范围为 1~12。
14 SELECT MONTH(NOW());
15 -- MySQL 中 MONTHNAME(date) 函数返回日期 date 对应月份的英文全名。
16 SELECT MONTHNAME(NOW());
17 -- MySQL DAYNAME(date) 函数返回 date 对应的工作日英文名称,例如 Sunday、Monday 等。
18 SELECT DAYNAME(NOW());
19 SELECT DAY(NOW());
20 -- MySQL 中 DAYOFWEEK(d) 函数返回 d 对应的一周中的索引(位置)。1 表示周日,2 表示周一,……,7 表示周六。这些索引值对应于ODBC标准。
21 SELECT DAYOFWEEK(NOW());
22 -- MySQL WEEK() 函数计算日期 date 是一年中的第几周。WEEK(date,mode) 函数允许指定星期是否起始于周日或周一,以及返回值的范围是否为 0~52 或 1~53
23 -- WEEK函数接受两个参数:date是要获取周数的日期。mode是一个可选参数,用于确定周数计算的逻辑。
24 -- 如果忽略 mode 参数,默认情况下 WEEK 函数将使用 default_week_format 系统变量的值。要获取 default_week_format 变量的当前值,请使用 SHOW VARIABLES 
25 SHOW VARIABLES LIKE 'default_week_format';
26 -- 使用 WEEK(date) 函数查询指定日期是一年中的第几周。
27 SELECT WEEK('2018-10-25',1),WEEK(NOW());
28 -- MySQL 中 DAYOFYEAR(d) 函数返回 d 是一年中的第几天,范围为 1~366。
29 SELECT DAYOFYEAR(NOW()),DAYOFYEAR('2019-11-17');
30 -- MySQL 中 DAYOFMONTH(d) 函数返回 d 是一个月中的第几天,范围为 1~31。
31 SELECT DAYOFMONTH(NOW()),DAYOFMONTH('2019-11-17');
32 -- MySQL YEAR() 函数可以从指定日期值中来获取年份值。
33 -- YEAR() 函数需要接受 date 参数,并返回日期的年份。语法格式如下:YEAR(date);
34 -- YEAR() 函数返回的年份值范围为 1000 到 9999,如果日期为零,YEAR() 函数返回 0
35 SELECT YEAR(NOW()),YEAR('2019-11'),YEAR('2019-11-10');
36 -- MySQL TIME_TO_SEC(time) 函数返回将参数 time 转换为秒数的时间值,转换公式为“小时 ×3600+ 分钟 ×60+ 秒”。
37 SELECT TIME_TO_SEC('22:31:10'),TIME_TO_SEC(NOW());
38 -- MySQL SEC_TO_TIME(seconds) 函数返回将参数 seconds 转换为小时、分钟和秒数的时间值。
39 SELECT SEC_TO_TIME(81088);
40 -- MySQL ADDTIME(time,expr) 函数用于执行时间的加法运算。添加 expr 到 time 并返回结果
41 -- 其中:time 是一个时间或日期时间表达式,expr 是一个时间表达式。
42 SELECT ADDTIME('2019-10-31 23:59:59','0:1:1'),ADDTIME('10:30:59','5:10:37');
43 -- MySQL SUBTIME(time,expr) 函数用于执行时间的减法运算。
44 -- 其中:函数返回 time。expr 表示的值和格式 time 相同。time 是一个时间或日期时间表达式, expr 是一个时间。
45 SELECT SUBTIME('2019-10-31 23:59:59','0:1:1'),SUBTIME('10:30:59','5:12:37');
46 -- MySQL 中 DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数。date1 和 date2 为日期或 date-and-time 表达式。计算时只用到这些值的日期部分。
47 SELECT DATEDIFF('2019-11-30','2019-11-29') AS col1,DATEDIFF('2019-11-30','2017-11-29') AS col2;
48 -- MySQL 中 WEEKDAY(d) 返回 d 对应的工作日索引。0 表示周一,1 表示周二,……,6 表示周日。
49 SELECT WEEKDAY(NOW());
50 -- MySQL DATE_ADD(date,INTERVAL expr type) 和 ADDDATE(date,INTERVAL expr type) 两个函数的作用相同,都是用于执行日期的加运算。
51 -- DATE_ADD() 和 ADDDATE() 函数有两个参数:date 是 DATE 或 DATETIME 的起始值\INTERVAL expr type是要添加到起始日期值的间隔值
52 SELECT DATE_ADD('2019-10-31 23:59:59',INTERVAL 1 SECOND) AS c1,DATE_ADD('2018-10-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND) as c2;
53 SELECT ADDDATE('2019-10-31 23:59:59',INTERVAL 1 SECOND) AS c1,ADDDATE('2018-10-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND) as c2;
54 -- MySQL DATE_SUB(date,INTERVAL expr type) 和 SUBDATE(date,INTERVAL expr type) 两个函数作用相同,都是执行日期的减法运算。
55 -- DATE_SUB() 和 SUBDATE() 函数接受两个参数:date 是 DATE 或 DATETIME 的起始值。\expr 是一个字符串,用于确定从起始日期减去的间隔值。type 是 expr 可解析的间隔单位,例如 DAY,HOUR 等
56 SELECT DATE_SUB('2019-11-01 00:00:00',INTERVAL 1 SECOND) AS c1,DATE_SUB('2019-11-01 00:00:00',INTERVAL '1:1' MINUTE_SECOND) as c2,DATE_SUB('2019-01-02 00:00:00',INTERVAL '1 1:1:1' DAY_SECOND) AS c3;
57 SELECT SUBDATE('2019-11-01 00:00:00',INTERVAL 1 SECOND) AS c1,SUBDATE('2019-11-01 00:00:00',INTERVAL '1:1' MINUTE_SECOND) as c2;
58 -- MySQL 中 DATE_FORMAT(date,format) 函数是根据 format 指定的格式显示 date 值。
59 -- DATE_FORMAT() 函数接受两个参数:date:是要格式化的有效日期值\format:是由预定义的说明符组成的格式字符串,每个说明符前面都有一个百分比字符(%)。
60 SELECT DATE_FORMAT(now(),'%m-%c');

 

五、[4]MySQL 流程控制函数

1 -- MySQL IF 语句允许您根据表达式的某个条件或值结果来执行一组 SQL 语句。
 2 -- 要在 MySQL 中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合。表达式可以返回 TRUE,FALSE 或 NULL,这三个值之一。
 3 -- 结构:IF(expr,v1,v2)
 4 -- 其中:表达式 expr 得到不同的结果,当 expr 为真是返回 v1 的值,否则返回 v2.
 5 SELECT IF(1<2,1,0) c1,IF(1>5,'√','×') c2,IF(STRCMP('abc','ab'),'yes','no') c3;
 6 -- MySQL IFNULL 函数是 MySQL 控制流函数之一,它接受两个参数,如果不是 NULL,则返回第一个参数。 否则,IFNULL 函数返回第二个参数。两个参数可以是文字值或表达式。
 7 -- 结构:IFNULL(v1,v2);
 8 -- 其中:如果 v1 不为 NULL,则 IFNULL 函数返回 v1; 否则返回 v2 的结果。
 9 SELECT IFNULL(5,8),IFNULL(null,'ok'),IFNULL(sqrt(-8),'FALSE'),SQRT(-8);
10 -- 除了 IF 函数,MySQL 还提供了一个替代的条件语句 CASE。 MySQL CASE 语句使代码更加可读和高效。
11 -- CASE 语句有两种形式:简单的和可搜索 CASE 语句。
12 -- 简单的 CASE 语句就是指使用简单 CASE 语句来检查表达式的值与一组唯一值的匹配。
13 -- CASE  <表达式>
14 -- WHEN <值1> THEN <操作>
15 -- WHEN <值2> THEN <操作>
16 -- ...
17 -- ELSE <操作>
18 -- END CASE;
19 SELECT CASE WEEKDAY(now())
20     WHEN 0 THEN '星期一'
21     WHEN 1 THEN '星期二'
22     WHEN 2 THEN '星期三'
23     WHEN 3 THEN '星期四'
24     WHEN 4 THEN '星期五'
25     WHEN 5 THEN '星期六'
26     ELSE    '星期天'
27 END column1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW());
28 -- 可搜索的 CASE 语句
29 -- 简单 CASE 语句仅允许将表达式的值与一组不同的值进行匹配。 为了执行更复杂的匹配,如范围,则可以使用可搜索 CASE 语句。 可搜索 CASE 语句等同于 IF 语句,但是它的构造更加可读
30 -- CASE
31 -- WHEN <条件1> THEN <命令>
32 -- WHEN <条件2> THEN <命令>
33 --  ...
34 --  ELSE commands
35 -- END CASE;
36 SELECT CASE 
37     WHEN WEEKDAY(now())=0 THEN '星期一'
38     WHEN WEEKDAY(now())=1 THEN '星期二'
39     WHEN WEEKDAY(now())=2 THEN '星期三'
40     WHEN WEEKDAY(now())=3 THEN '星期四'
41     WHEN WEEKDAY(now())=4 THEN '星期五'
42     WHEN WEEKDAY(now())=5 THEN '星期六'
43     WHEN WEEKDAY(now())=6 THEN '星期天' 
44 END AS column1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW());