MYSQL内置函数

order by

如何使用MySQL的ORDER BY函数对结果进行排序

导语:
在处理数据库中的数据时,经常会遇到需要对结果进行排序的情况。MySQL提供了ORDER BY函数,可以轻松实现对查询结果按照指定的规则进行排序。本文将介绍如何使用MySQL的ORDER BY函数,并给出代码示例。

一、ORDER BY函数的基本语法
ORDER BY语句用于对查询结果进行排序,默认情况下按照升序进行排序。ORDER BY语句的基本语法如下:

SELECT column_name1, column_name2, ...
FROM table_name
ORDER BY column_name1 [ASC|DESC], column_name2 [ASC|DESC], ...

说明:

  1. column_name1, column_name2, ...:要查询的列名,可以是一个或多个。
  2. table_name:数据表名。
  3. column_name1, column_name2, ...:要按照排序的列名,可以是一个或多个。
  4. ASC|DESC:可选参数,用于指定排序方式,默认为升序(ASC),若需要降序排序,则使用DESC关键字。

union

MySQL中的UNION操作是一种数据合并的方法,可以将两个或多个SELECT语句的结果集合并成一个结果集。在本篇文章中,我们将介绍如何使用UNION操作。

UNION操作的语法

UNION操作是通过使用UNION关键字来实现的。要使用UNION操作,必须满足以下条件:

SELECT语句必须具有相同的列数。

列的顺序必须相同。

列的数据类型必须兼容,即必须是相同的数据类型或可以隐式转换为相同的数据类型。

UNION操作会自动去重,如果不想去重,可以使用UNION ALL操作。

UNION操作的语法如下:

SELECT column1, column2,... FROM table1

UNION

SELECT column1, column2,... FROM table2;

UNION操作的示例

下面是一个使用UNION操作的示例。假设我们有两个表students1和students2,它们的结构相同,都包含id、name和score三个字段。

在students1表中插入以下数据:

INSERT INTO students1(id, name, score) VALUES

(1,'Alice',80),

(2,'Bob',90),

(3,'Charlie',70);

在students2表中插入以下数据:

INSERT INTO students2(id, name, score) VALUES

(4,'David',85),

(5,'Eva',95),

(6,'Frank',75);

现在,我们想要将这两个表中的数据合并成一个结果集,可以使用以下SELECT语句:

SELECT id, name, score FROM students1

UNION

SELECT id, name, score FROM students2;

执行以上SELECT语句后,我们将得到如下结果:

+----+---------+-------+

id name score

+----+---------+-------+

1 Alice 80

2 Bob 90

3 Charlie 70

4 David 85

5 Eva 95

6 Frank 75

+----+---------+-------+

可以看到,这个结果集包含了students1和students2表中的所有数据,并自动去重了。

如果我们不想去重,可以使用UNION ALL操作:

SELECT id, name, score FROM students1

UNION ALL

SELECT id, name, score FROM students2;

执行以上SELECT语句后,我们将得到如下结果:

+----+---------+-------+

id name score

+----+---------+-------+

1 Alice 80

2 Bob 90

3 Charlie 70

4 David 85

5 Eva 95

6 Frank 75

+----+---------+-------+

1 Alice 80

2 Bob 90

3 Charlie 70

4 David 85

5 Eva 95

6 Frank 75

+----+---------+-------+

可以看到,这个结果集包含了students1和students2表中的所有数据,并没有去重。

UNION操作的注意事项

在使用UNION操作时,需要注意以下事项:

UNION操作会自动去重,如果不想去重,可以使用UNION ALL操作。

SELECT语句必须具有相同的列数,列的顺序必须相同,列的数据类型必须兼容。

UNION操作会对结果集进行排序,如果需要指定排序方式,可以使用ORDER BY子句。

UNION操作会对结果集进行分页,如果需要指定分页方式,可以使用LIMIT子句。

UNION操作会对结果集进行筛选,如果需要指定筛选条件,可以使用WHERE子句。

总结

UNION操作是MySQL中一种常用的数据合并方法,可以将两个或多个SELECT语句的结果集合并成一个结果集,并自动去重。在使用UNION操作时,需要满足一定的条件,例如SELECT语句必须具有相同的列数、列的顺序必须相同、列的数据类型必须兼容等。同时,还需要注意UNION操作会对结果集进行排序、分页和筛选等操作。

concat

很多时候,我们需要将不同地方获得的字符串拼接在一起,此时就需要使用CONCATCONCAT_WS函数

要连接两个或多个引用的字符串值,请将字符串放在一起,如下所示:

1

2

3

4

5

6

7

mysql> SELECT 'MySQL ' 'String ' 'Concatenation';

+----------------------------+

| MySQL                      |

+----------------------------+

| MySQL String Concatenation |

+----------------------------+

1 row in set

除了使用空格进行字符串连接之外,mysql还提供了两个连接字符串值的函数CONCATCONCAT_WS

Mysql Concat函数

Mysql Concat函数需要一个或多个字符串参数,并将他们连接成一个字符串。CONCAT() 函数需要至少一个参数,否则会引起报错。

1

CONCAT(string1,string2, ... );

CONCAT()函数在连接之前将所有参数转换为字符串类型。如果任何参数为NULL,则CONCAT()函数返回NULL值。

1

2

3

4

5

6

7

mysql> SELECT CONCAT('MySQL','CONCAT');

+--------------------------+

| CONCAT('MySQL','CONCAT') |

+--------------------------+

| MySQLCONCAT              |

+--------------------------+

1 row in set

如果是添加NULL值,则CONCAT函数将会返回一个NULL值;

1

2

3

4

5

6

7

mysql> SELECT CONCAT('MySQL',NULL,'CONCAT');

+-------------------------------+

| CONCAT('MySQL',NULL,'CONCAT') |

+-------------------------------+

| NULL                          |

+-------------------------------+

1 row in set

Mysql Concat_Ws函数

MySQL提供了一种特殊形式的CONCAT()函数:CONCAT_WS()函数。CONCAT_WS()函数将两个或多个字符串值与预定义的分隔符相连接。

下面说明了CONCAT_WS()函数的语法:

1

CONCAT_WS(seperator,string1,string2, ... );

第一个参数是其他参数:string1string2...的分隔符。

CONCAT_WS函数在字符串参数之间添加分隔符,并返回单个字符串,并在字符串参数之间插入分隔符。

以下语句连接两个字符串值:MaxSu,并用逗号分隔这两个字符串:

1

2

SELECT CONCAT_WS(',','Max','Su');

SQL

执行上面查询语句,得到以下结果 -

1

2

3

4

5

6

7

8

mysql> SELECT CONCAT_WS(',','Max','Su');

+---------------------------+

| CONCAT_WS(',','Max','Su') |

+---------------------------+

| Max,Su                    |

+---------------------------+

1 row in set

Shell

当且仅当作为分隔符的第一个参数为NULL时,CONCAT_WS函数才返回NULL

1

2

3

4

5

6

7

mysql> SELECT CONCAT_WS(NULL ,'Jonathan', 'Minsu');

+--------------------------------------+

| CONCAT_WS(NULL ,'Jonathan', 'Minsu') |

+--------------------------------------+

| NULL                                 |

+--------------------------------------+

1 row in set

CONCAT函数不同,CONCAT_WS函数在分隔符参数之后跳过NULL值。 换句话说,它忽略NULL

1

2

3

4

5

6

7

mysql> SELECT CONCAT_WS(',','Jonathan', 'Minsu',NULL);

+-----------------------------------------+

| CONCAT_WS(',','Jonathan', 'Minsu',NULL) |

+-----------------------------------------+

| Jonathan,Minsu                          |

+-----------------------------------------+

1 row in set

 group_concat()

mysql GROUP_CONCAT函数详解_mysql中group_concat函数_李小码哥的博客-CSDN博客

group by

mysql中group by用法是什么-mysql教程-PHP中文网

substr()

【MySQL】字符串截取函数 SUBSTR() 详解_mysql substr_小雨青年的博客-CSDN博客

ascii函数

MySQL数据库从入门到精通—常用函数— 字符串函数 - 知乎


 

Length函数

Length函数是MySQL中的字符串函数之一,用于返回指定字符串的长度(以字节为单位)。该函数语法如下:

    LENGTH(str)

其中,str表示要计算长度的字符串。该函数返回一个整数,表示字符串的长度。

 使用方法:

1. 计算字符串的长度

我们可以使用Length函数来计算一个字符串的长度。例如,我们要计算字符串"Hello World"的长度,可以使用以下代码:

    SELECT LENGTH('Hello World');

运行以上语句后,会返回字符串"Hello World"的长度,即11。

2. 计算字段值的长度

除了可以计算字符串的长度外,Length函数还可以计算数据库表中某个字段的长度。例如,我们已经有一个表名为"students",其中包含一个名为"name"的字段,我们可以使用以下代码来计算该字段值的长度:

    SELECT LENGTH(name) FROM students;

运行以上语句后,会返回该表中所有"name"字段对应字符串的长度。

3. 计算中文字符串长度

MySQL默认使用UTF-8编码,一个中文字符通常使用3个字节来表示。因此,如果想要正确计算中文字符串的长度,需要使用Length函数的另一种语法:

    SELECT LENGTHB(str);

其中,str表示要计算长度的中文字符串。该函数返回的是字符串的字节数,需要除以3才能得到中文字符的个数。例如,我们要计算字符串"你好,世界!"的长度,可以使用以下代码:

    SELECT LENGTHB('你好,世界!')/3;

运行以上语句后,会返回字符串"你好,世界!"的中文字符个数,即4。

limit函数

1.limit函数的语法和用法

(1)常用且简单的语法和用法

①语法:limit n 即limit <参数>

具体语法:select <字段1>,...,<字段n> from <表名> (where <条件> order by <字段1>...<字段n> asc|desc) limit n   

说明:括号内的语句可省略

参数说明:

n:为阿拉伯数字,表示前n行。

②用法:用于获取前n行数据。

(2)另一种(两个参数)语法和用法

①语法:limit m,n  即 limit <参数1>,<参数2>

具体语法:select <字段1>,...,<字段n> from <表名> (where <条件> order by <字段1>...<字段n> asc|desc) limit m,n   

说明:括号内的语句可省略

参数说明:

m:为阿拉伯数字,表示跳过第m行,从m+1行开始。

n:为阿拉伯数字,表示前n行。

②用法:跳过m行,从m+1行开始获取前n行数据。

sleep函数

sleep函数是MySQL中的一个内置函数,它的作用是让当前的线程休眠(暂停执行),时间单位为秒。

if函数

1. 表达式

IF(expr1,expr2,expr3)

如果expr1是TRUE (expr1 <> 0和expr1 <> NULL),则IF() 返回expr2。否则,它返回expr3。

2.返回类型

默认返回类型IF() (在存储到临时表时可能很重要)计算如下:

  • 如果expr2或 expr3生成一个字符串,结果是一个字符串。
  • 如果expr2和 expr3都是字符串,则如果任一字符串区分大小写,则结果区分大小写。
  • 如果expr2或 expr3生成浮点值,则结果为浮点值。
  • 如果expr2或 expr3生成整数,则结果为整数。

3.if()函数的使用

mysql> SELECT IF(1>2,2,3);-> 3
mysql> SELECT IF(1<2,'yes','no');-> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');-> 'no'

extractvalue()

extractvalue() :对XML文档进行查询的函数

语法:extractvalue(目标xml文档,xml路径)

第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错

select username from security.users where id=1 and (extractvalue('anything','/x/xx'));

使用concat()拼接 ‘  /  ‘ 效果相同,下面语句是在’anything’中查询 位置是 /database()的内容

select username from security.users where id=1 and (extractvalue('anything',concat('/',(select database()))));

但这里也没有语法错误,不会报错,下面故意写入语法错误:

select username from security.users where id=1 and (extractvalue('anything',concat('~',(select database()))));

可以看出,以~开头的内容不是xml格式的语法,报错,但是会显示无法识别的内容是什么,这样就达到了目的。

有一点需要注意,extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取,一次查看32位
————————————————
原文链接:https://blog.csdn.net/weixin_34378978/article/details/113591119

floor

FLOOR() 语法

这里是 MySQL FLOOR() 函数的语法:

FLOOR(number)

参数

number

必需的。 一个数字。

返回值

MySQL FLOOR() 函数返回小于或等于指定数字的最大整数值。

如果参数 number 为 NULLFLOOR() 函数将会返回 NULL

updatexm

updatexml(xml_documat,xpath_string,new_value) :更新xml文档的函数,返回替换的xml片段。
1.xml_documat:string,为xml文档对象的名称
2.xpath_string:xpath格式的字符串
3.new_value:string替换查找到符合条件的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值