高阶函数

select ROW_NUMBER() over(partition by t3.customerId order by t3.uid) as rownum

select rank() over(partition by t3.customerId order by t3.uid) as rownum

PIVOT行转列,

UNPIVOT列转行

查找相关

COALESCE函数

COALESCE()函数返回列表中的第一个非空值。

语法:COALESCE(val1, val2, …, val_n)

查询示例

W3Schools.com

SELECT COALESCE(NULL, NULL, NULL, ‘W3Schools.com’, NULL, ‘Example.com’);

1

SELECT COALESCE(NULL, 1, 2, ‘W3Schools.com’);

Top

进制相关

BIN函数

BIN()函数返回数字的二进制表示形式,作为字符串值。

语法:BIN(number)

查询示例:

SELECT BIN(8);

SELECT BIN(15);

SELECT BIN(111);

BINARY函数

BINARY函数将值转换为二进制字符串。

此功能相当于使用CAST(值AS BINARY)。

语法:

1 在这里,MySQL执行“HELLO”和“hello”的逐字符比较并返回1(因为在逐个字符的基础上,它们是等效的):

SELECT “HELLO” = “hello”;

0 这里MySQL执行“HELLO”和“hello”的逐字节比较并返回0(因为在逐个字节的基础上,它们不等效):

SELECT BINARY “HELLO” = “hello”;

CONV函数

CONV()函数将一个数字从一个数字基系统转换为另一个,并将结果作为字符串值返回。

注意:如果任何参数为NULL,则此函数返回NULL。

语法:CONV(number, from_base, to_base)

转换示例

从2进制转为10进制

SELECT CONV(1111, 2, 10);

从10进制转为16进制

SELECT CONV(88, 10, 16);

Top

转换相关

CAST函数

CAST()函数将(任何类型的)值转换为指定的数据类型。

语法:CAST(value AS datatype)

查询示例

YYYY-MM-DD 日期

SELECT CAST(“2017-08-29” AS DATE);

YYYY-MM-DD HH:MM:SS 日期时间型

SELECT CAST(“2017-08-29 08:20:33” AS DATETIME);

HH:MM:SS 时间

SELECT CAST(“08:20:33” AS TIME);

字符型

SELECT CAST(150 AS CHAR);

整数

SELECT CAST(5-10 AS SIGNED);

无符号整数

SELECT CAST(12 AS UNSIGNED);

浮点数

SELECT CAST(12.1 AS DECIMAL);

二进制

SELECT CAST(“12” AS BINARY);

CONVERT函数

CONVERT()函数将值转换为指定的数据类型或字符集。

语法:

CONVERT(value, type)

OR:

CONVERT(value USING charset)

转换类型示例

YYYY-MM-DD 日期

SELECT CONVERT(“2017-08-29” , DATE);

YYYY-MM-DD HH:MM:SS 日期时间型

SELECT CONVERT(“2017-08-29 08:20:33” , DATETIME);

HH:MM:SS 时间

SELECT CONVERT(“08:20:33” , TIME);

字符型

SELECT CONVERT(150 , CHAR);

整数

SELECT CONVERT(5-10 , SIGNED);

无符号整数

SELECT CONVERT(12 , UNSIGNED);

浮点数

SELECT CONVERT(12.1 , DECIMAL);

二进制

SELECT CONVERT(“12” , BINARY );

转换字符集示例

SELECT CONVERT(“W3Schools.com” USING utf8);

SELECT CONVERT(“W3Schools.com” USING utf8mb4);

SELECT CONVERT(“W3Schools.com” USING latin1);

Top

判断相关

CASE函数

语法:

CASE

WHEN condition1 THEN result1

WHEN condition2 THEN result2

WHEN conditionN THEN resultN

ELSE result

END;

查询示例:

CASE语句通过条件并在满足第一个条件时返回一个值(如IF-THEN-ELSE语句)。 因此,一旦条件成立,它将停止读取并返回结果。

SELECT

CASE

WHEN 5 > 2 THEN “case 1”

WHEN 2 = 5 THEN “case 2”

ELSE “case else”

END

如果条件不满足,则它将返回ELSE子句中的值。

SELECT

CASE

WHEN 2 = 5 THEN “case 2”

ELSE “case else”

END

如果没有ELSE部分且没有条件为真,则返回NULL。

SELECT

CASE

WHEN 2 = 5 THEN “case 2”

END

在排序中使用

SELECT CustomerName, City, Country

FROM Customers

ORDER BY

(CASE

WHEN City IS NULL THEN Country

ELSE City

END);

IF函数

IF()函数在条件为TRUE时返回一个值,如果条件为FALSE则返回另一个值。

语法:IF(condition, value_if_true, value_if_false)

查询示例:

YES

SELECT IF(500<1000, “YES”, “NO”);

NO

SELECT IF(500>1000, “YES”, “NO”);

NO 注:STRCMP(str1, str2)比较两个字符串,如果这两个字符串相等返回0

SELECT IF(STRCMP(“hello”,“bye”) = 0, “YES”, “NO”);

IFNULL函数

如果表达式为NULL,则IFNULL()函数返回指定的值。如果表达式为NOT NULL,则此函数返回表达式。

语法:IFNULL(expression, alt_value)

使用示例:

W3Schools.com

SELECT IFNULL(NULL, “W3Schools.com”);

Hello

SELECT IFNULL(“Hello”, “W3Schools.com”);

ISNULL函数

ISNULL()函数返回1或0,具体取决于表达式是否为NULL。如果expression为NULL,则此函数返回1.否则,返回0。

语法:ISNULL(expression)

使用示例:

1

SELECT ISNULL(NULL);

0

SELECT ISNULL("");

0

SELECT ISNULL(350);

0

SELECT ISNULL(“Hello world!”);

NULLIF函数

NULLIF()函数比较两个表达式,如果它们相等则返回NULL。 否则,返回第一个表达式。

语法:NULLIF(expr1, expr2)

使用示例:

25

SELECT NULLIF(25, “Hello”);

Hello

SELECT NULLIF(“Hello”, “world”);

NULL

SELECT NULLIF(“2017-08-25”, “2017-08-25”);

Top

服务器相关

CONNECTION_ID函数

CONNECTION_ID()函数返回当前连接的唯一连接ID。

语法:CONNECTION_ID()

SELECT CONNECTION_ID();

CURRENT_USER函数

CURRENT_USER()函数返回服务器用于验证当前客户端的MySQL帐户的用户名和主机名。

结果作为UTF8字符集中的字符串返回。

语法:CURRENT_USER()

SELECT CURRENT_USER();

DATABASE函数

DATABASE()函数返回当前数据库的名称。

如果没有当前数据库,则此函数返回NULL或“”。

语法:DATABASE()

SELECT DATABASE();

Top

杂项

LAST_INSERT_ID函数

LAST_INSERT_ID()函数返回已在表中插入或更新的最后一行的AUTO_INCREMENT标识。

语法:LAST_INSERT_ID(expression)

SELECT LAST_INSERT_ID();

分节点部署

子查询排序

添加limit或者group by,对查询结果进行聚合操作