首页Mysql查询中使用函数
Created At : 2021-11-13
Last Updated: 2022-02-06

Mysql查询中使用函数

MySQL中的函数包括数值型函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等其他函数。

完整的函数列表请参看: MYSQL函数大全,MYSQL常用函数合集

数值型函数

数值型函数主要用来处理数值数据,主要有绝对值函数、三角函数(包括正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。

在有错误产生时,数值型函数将会返回空值NULL。

⚡ 主要数值型函数操作演示如下:


-- 1.绝对值函数ABS(x)
select abs(2),abs(-2),abs(-3.3) 
-- 输出
abs(2)|abs(-2)|abs(-3.3)|
------+-------+---------+
     2|      2|      3.3|
   
-- 2.圆周率的函数PI()
select pi()
-- 输出,默认的显示小数位数是6位。
pi()    |
--------+
3.141593|


-- 3. 获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x)
-- CEIL(x) 是 CEILING(x)的简写
select ceil(1.222),floor(1.222) 
-- 输出,返回BigInt
ceil(1.222)|floor(1.222)|
-----------+------------+
          2|           1|
          
-- 4. 获取随机数的函数RAND()和RAND(x)
-- RAND(x)返回一个随机浮点值v,范围在0到1之间(0 ≤ v ≤ 1.0)。
-- 若已指定一个整数参数x,则它被用作种子值,用来产生重复序列。
select rand(),rand() ,rand() 
-- 输出,0-1之间,不相同
rand()            |rand()            |rand()            |
------------------+------------------+------------------+
0.7935338782086353|0.8069899862697255|0.6543483274563666|

select rand(10),rand(10) ,rand(11) 
-- 输出,参数相同,随机数相同
rand(10)          |rand(10)          |rand(11)         |
------------------+------------------+-----------------+
0.6570515219653505|0.6570515219653505|0.907234631392392|

-- 5. ROUND(x)返回最接近于参数x的整数,对x值进行四舍五入。
select round(1.22),round(1.66),round(-1.66)   
-- 输出
round(1.22)|round(1.66)|round(-1.66)|
-----------+-----------+------------+
          1|          2|          -2|

-- 6. ROUND(x,y)返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位。
-- y值为负数时,保留的小数点左边的相应位数直接保存为0,不进行四舍五入。
select round(1.222,2),round(1.666,2),round(11.666,-2), round(11.666,-1) 
-- 输出
round(1.222,2)|round(1.666,2)|round(11.666,-2)|round(11.666,-1)|
--------------+--------------+----------------+----------------+
          1.22|          1.67|               0|              10|

-- 7. TRUNCATE(x,y)返回被舍去至小数点后y位的数字x。
-- 若y的值为0,则结果不带有小数点或不带有小数部分。
-- 若y设为负数,则截去(归零)x小数点左起第y位开始后面所有低位的值。       
select truncate(1.222,2),truncate(1.666,2),truncate(11.666,-2), truncate(11.666,-1) 
-- 输出
truncate(1.222,2)|truncate(1.666,2)|truncate(11.666,-2)|truncate(11.666,-1)|
-----------------+-----------------+-------------------+-------------------+
             1.22|             1.66|                  0|                 10|
                     

🚀 ROUND(x,y)函数在截取值的时候会四舍五入,而TRUNCATE (x,y)直接截取值,并不进行四舍五入。

字符串函数

字符串函数主要用来处理数据库中的字符串数据。

MySQL中的字符串函数有计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数、查找指定字符串位置函数等。

⚡ 主要字符串函数操作演示如下:

-- 1.CHAR_LENGTH(str)返回值为字符串str所包含的字符个数。一个多字节字符算作一个单字符。
select char_length("hello"),char_length("你好")  
-- output
char_length("hello")|char_length("你好")|
--------------------+-----------------+
                   5|                2|
                   
                   
-- 2. LENGTH(str)返回值为字符串的字节长度,使用utf8,一个汉字三个字节,一个数字或字母一个字节。
select length("hello"),length("你好")
-- output
length("hello")|length("你好")
---------------+------------+
              5|           6|
              
              
-- 3. 合并字符串函数CONCAT(s1,s2,…)
-- CONCAT(s1,s2,…)返回结果为连接参数产生的字符串,或许有一个或多个参数。如有任何一个参数为NULL,则返回值为NULL。
select concat("hello", "mysql"),concat("hello",null,"mysql")  
-- output
concat("hello", "mysql")|concat("hello",null,"mysql")|
------------------------+----------------------------+
hellomysql              |                            |


-- 4.合并字符串函数CONCAT_WS(x,s1,s2,…),_WS代表 With Separator
-- 第一个参数x是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间。
-- 分隔符可以是一个字符串,也可以是其他参数。如果分隔符为NULL,则结果为NULL。
-- 函数会忽略任何分隔符参数后的NULL值。
select concat_ws("_","hello", "mysql"),concat_ws("_","hello",null,"mysql") 
-- output,null 会忽略
concat_ws("_","hello", "mysql")|concat_ws("_","hello",null,"mysql")|
-------------------------------+-----------------------------------+
hello_mysql                    |hello_mysql                        |


-- 5.替换字符串的函数INSERT(s1,start,len,s2)
-- 如果x超过字符串长度,则返回值为原始字符串。假如len的长度大于其他字符串的长度,则从位置x开始替换。
-- 若任何一个参数为NULL,则返回值为NULL。
select INSERT('HiWorld', 3, 5, 'Mysql') as insert_coll
-- output
insert_coll|
-----------+
HiMysql    |


-- 6. 字母大小写转换函数
-- LOWER (str)或者LCASE (str)可以将字符串str中的字母字符全部转换成小写字母。
-- UPPER(str)或者UCASE(str)可以将字符串str中的字母字符全部转换成大写字母。
select lcase("Hello Mysql"),ucase("Hello Mysql") 
-- output
lcase("Hello Mysql")|ucase("Hello Mysql")|
--------------------+--------------------+
hello mysql         |HELLO MYSQL         |


-- 7. 获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)
-- LEFT(s,n)返回字符串s开始的最左边n个字符。
-- RIGHT(s,n)返回字符串str最右边的n个字符。
select left("Hello Mysql",7),right("Hello Mysql",7) 
-- output,注意包含了空格
left("Hello Mysql",7)|right("Hello Mysql",7)|
---------------------+----------------------+
Hello M              |o Mysql               |


-- 8. 填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2)
-- LPAD(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符长度。
-- 假如s1的长度大于len,则返回值被缩短至len字符。
select LPad("Hello",4,"??"),LPad("Hello",10,"??")
-- output,可以简单认为:len即是输出字符串的长度
LPad("Hello",4,"??")|LPad("Hello",10,"??")|
--------------------+---------------------+
Hell                |?????Hello           |

select rpad("Hello",4,"??"),rpad("Hello",10,"??") 
-- output
rpad("Hello",4,"??")|rpad("Hello",10,"??")|
--------------------+---------------------+
Hell                |Hello?????           |


-- 9.删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s)
select ltrim(" Hello"),rtrim("Hello "),trim(" hello ") 
--output
ltrim(" Hello")|rtrim("Hello ")|trim(" hello ")|
---------------+---------------+---------------+
Hello          |Hello          |hello          |


-- 10. 除指定字符串的函数TRIM(s1 FROM s)
-- TRIM(s1 FROM s)删除字符串s中两端所有的子字符串s1。s1为可选项,在未指定情况下,删除空格。
select trim("xy" from " hello xy") , trim("xy" from "xy hello ") 
-- ouput
trim("xy" from " hello xy")|trim("xy" from "xy hello ")|
---------------------------+---------------------------+
 hello                     | hello                     |



-- 11. 重复生成字符串的函数REPEAT(s,n)
-- 返回一个由重复的字符串s组成的字符串,字符串s的数目等于n。
-- 若n<=0,则返回一个空字符串。若s或n为NULL,则返回NULL。
select repeat("mysql ",3),repeat("mysql",0),repeat("mysql",null)
-- output
repeat("mysql ",3)|repeat("mysql",0)|repeat("mysql",null)|
------------------+-----------------+--------------------+
mysql mysql mysql |                 |                    |




-- 12.空格函数SPACE(n),返回一个由n个空格组成的字符串。
select char_length(space(5))
-- ouput
char_length( space(5))|
----------------------+
                     5|
                     

-- 13. 替换函数REPLACE(s,s1,s2)
-- REPLACE(s,s1,s2)使用字符串s2替代字符串s中所有的字符串s1。
select replace("hello mysql","hello","hi")
-- output
replace("hello mysql","hello","hi")|
-----------------------------------+
hi mysql                           |



-- 14. 比较字符串大小的函数STRCMP(s1,s2)
-- STRCMP(s1,s2):若所有的字符串均相同,则返回0;若根据当前分类次序,第一个参数小于第二个,则返回-1;其他情况返回1。
select strcmp("str","str"),strcmp("str1 ","str"),strcmp("str ","str2")
-- output
strcmp("str","str")|strcmp("str1 ","str")|strcmp("str ","str2")|
-------------------+---------------------+---------------------+
                  0|                    1|                   -1|
                  
                  
-- 15. 获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)
-- SUBSTRING(s,n,len)带有len参数的格式,从字符串s返回一个长度与len字符相同的子字符串,起始于位置n。
-- 也可能对n使用一个负值,即倒数
-- 使用MID() 与 使用MID()函数获取指定位置处的子字符串
select substring("hello mysql",7,5),substring("hello mysql",-5,5) 
-- output
substring("hello mysql",7,5)|substring("hello mysql",-5,5)|
----------------------------+-----------------------------+
mysql                       |mysql                        |



-- 16. 匹配子串开始位置的函数
-- LOCATE(str1,str)、POSITION(str1 IN str)和INSTR(str, str1)3个函数的作用相同,返回子字符串str1在字符串str中的开始位置。
select locate("mysql","hello mysql"),position("mysql" in "hello mysql"),instr("hello mysql","mysql") 
-- output
locate("mysql","hello mysql")|position("mysql" in "hello mysql")|instr("hello mysql","mysql")|
-----------------------------+----------------------------------+----------------------------+
                            7|                                 7|                           7|
                            
                            
-- 17. 字符串逆序的函数REVERSE(s)
select reverse("hello") 
-- output
reverse("hello")|
----------------+
olleh           |

🚀1.char_length与length这两个函数的区别是:

  • a)length(): 单位是字节,utf8编码下,一个汉字三个字节,一个数字或字母一个字节。gbk编码下,一个汉字两个字节,一个数字或字母一个字节。
  • b)char_length():单位为字符,不管汉字还是数字或者是字母都算是一个字符。

🚀 ​2. CONCAT(s1,s2,…) 注意事项

返回结果为连接参数产生的字符串,或许有一个或多个参数。

如有任何一个参数为NULL,则返回值为NULL。

如果所有参数均为非二进制字符串,则结果为非二进制字符串。

如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。

常用日期和时间函数

日期和时间函数主要用来处理日期和时间值。

一般的日期函数除了使用DATE类型的参数外,也可以使用DATETIME或者TIMESTAMP类型的参数,但会忽略这些值的时间部分。

相同的,以TIME类型值为参数的函数,可以接受TIMESTAMP类型的参数,但会忽略日期部分。

许多日期函数可以同时接受数字和字符串类型的两种参数

⚡ 主要日期时间函数操作演示如下:

-- 1. 获取当前日期的函数和获取当前时间的函数
-- CURDATE()和CURRENT_DATE()函数的作用相同,将当前日期按照‘YYYY-MM-DD’或YYYYMMDD格式的值返回
select curdate(),current_date(),curdate() + 0 
select curtime(),current_time(),curtime() + 0 
select current_timestamp(),current_timestamp(),current_timestamp() + 0 

-- output, curdate() + 0 将日期转为数值型
curdate() |current_date()|curdate() + 0|
----------+--------------+-------------+
2022-02-03|    2022-02-03|     20220203|

curtime()|current_time()|curtime() + 0|
---------+--------------+-------------+
 22:34:24|      22:34:24|       223424|
 
current_timestamp()|current_timestamp()|current_timestamp() + 0|
-------------------+-------------------+-----------------------+
2022-02-03 22:35:35|2022-02-03 22:35:35|         20220203223535|


-- 2. UNIX时间戳函数
-- UNIX_TIMESTAMP(date)若无参数调用,则返回一个UNIX时间戳(‘1970-01-0100:00:00’GMT之后的秒数)作为无符号整数。
-- 其中,GMT(Green wich meantime)为格林尼治标准时间。
-- FROM_UNIXTIME(date)函数把UNIX时间戳转换为普通格式的时间,与UNIX_TIMESTAMP (date)函数互为反函数。
select unix_timestamp(),unix_timestamp(now()),from_unixtime(1643899246) 

-- output
unix_timestamp()|unix_timestamp(now())|from_unixtime(1643899246)|
----------------+---------------------+-------------------------+
      1643899263|           1643899263|      2022-02-03 22:40:46|

-- 3. 返回UTC日期的函数和返回UTC时间的函数
-- UTC_DATE()函数返回当前UTC(世界标准时间)日期值,其格式为‘YYYY-MM-DD’或YYYYMMDD,具体格式取决于函数是否用在字符串或数字语境中。
select utc_date(),utc_date + 0
select utc_time(),utc_time + 0
select utc_timestamp(),utc_timestamp + 0

-- output,与GMT时间,相差8个小时
utc_timestamp()    |utc_timestamp + 0|
-------------------+-----------------+
2022-02-03 14:43:55|   20220203144355|


-- 4.获取年份、季度、小时、分钟和秒钟,以及日期,星期的函数
select year(curdate()),month(curdate()),day(curdate()),dayname(curdate()) ,week(curdate()) 

-- output,注意:WEEK(d)计算日期d是一年中的第几周
year(curdate())|month(curdate())|day(curdate())|dayname(curdate())|week(curdate())|
---------------+----------------+--------------+------------------+---------------+
           2022|               2|             3|Thursday          |              5|



-- 5.计算日期和时间的函数
-- 期和时间的函数有DATE_ADD()、ADDDATE()、DATE_SUB()、SUBDATE()、ADDTIME()、SUBTIME()和DATE_DIFF()
-- 详见函数大全


-- 6. 日期时间格式化函数


CURRENT_TIMESTAMP()、LOCALTIME()、NOW()和SYSDATE() 4个函数的作用相同,均返回当前日期和时间值

格式为YYYY-MM-DD HH:MM:SSYYYYMMDDHHMMSS

条件判断函数

条件判断函数也称为控制流程函数,根据满足的不同条件,执行相应的流程。MySQL中进行条件判断的函数有IF、IFNULL和CASE。

-- 1.IF(expr, v1, v2)
-- 如果表达式expr是TRUE(expr <> 0 and expr <> NULL),则返回值为v1;否则返回值为v2。
-- F()的返回值为数字值或字符串值
select if(1>2,"yes","no")

-- output
if(1>2,"yes","no")|
------------------+
no                |

-- 2. IFNULL(v1,v2)函数 
-- IFNULL(v1,v2):假如v1不为NULL,则IFNULL()的返回值为v1;否则其返回值为v2。
-- IFNULL()的返回值是数字或者字符串
select ifnull("not null","null")
select ifnull(null,"null") 

-- output 
ifnull("not null","null")|
-------------------------+
not null   
|
ifnull(null,"null")|
-------------------+
null               |

-- 3. CASE函数
-- CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2]…[ELSE rn+1] END:如果expr值等于某个vn,则返回对应位置THEN后面的结果;
-- 如果与所有值都不相等,则返回ELSE后面的rn+1。
-- ------------------------------------------------------------------------------------------------------
-- CASE WHEN v1 THEN r1 [WHEN v2 THEN r2]… ELSE rn+1] END:某个vn值为TRUE时,返回对应位置THEN后面的结果;
--如果所有值都不为TRUE,则返回ELSE后的rn+1。

select case "a" when "a" then "hello a" when "b" then "hello b" else "hello c" end as case_value_when
-- output 
case_value_when|
---------------+
hello a        |

select case "b" when "a" then "hello a" when "b" then "hello b" else "hello c" end as case_value_when
-- output
case_value_when|
---------------+
hello b        |


select case when true then "hello yes" else "hello no" end as case_when_then
-- output 
case_when_then|
--------------+
hello yes     |

select case when false then "hello yes" else "hello no" end as case_when_then

-- output 
case_when_then|
--------------+
hello no      |

系统信息函数

MySQL中的系统信息有数据库的版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID值等

-- 1. 获取MySQL版本号、连接数和数据库名的函数
select version(),connection_id(),database(),schema()

-- output 
version()|connection_id()|database()|schema() |
---------+---------------+----------+---------+
8.0.27   |             14|json_test |json_test|

-- 如果需要查询具体连接数的线程信息,可以使用 `show processlist` 命令


-- 2. 获取用户名的函数
-- USER()、CURRENT_USER()、SYSTEM_USER()和SESSION_USER()这几个函数返回当前被MySQL服务器验证的用户名和主机名组合。
select user(),current_user(),system_user(),session_user()

-- output 
user()        |current_user()|system_user() |session_user()|
--------------+--------------+--------------+--------------+
root@localhost|root@localhost|root@localhost|root@localhost|


-- 3. 获取字符串的字符集和排序方式的函数
-- CHARSET(str)返回字符串str自变量的字符集
-- COLLATION(str)返回字符串str的字符排列方式
select charset("hello"),collation("hello")

-- output 
charset("hello")|collation("hello")|
----------------+------------------+
utf8mb4         |utf8mb4_0900_ai_ci|

-- 4. 获取最后一个自动生成的ID值的函数
-- LAST_INSERT_ID()函数返回最后生成的AUTO_INCREMENT值
use world
select * from city where id = 1
insert into city (name,CountryCode,District,Population) values ("testName","AFG","test District",1780001)
select last_insert_id() 

-- output 
last_insert_id()|
----------------+
            4082|


LAST_INSERT_ID是与数据表无关的,如果向表a插入数据后再向表b插入数据,那么LAST_INSERT_ID返回表b中的Id值。

IP地址与数字相互转换的函数

INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。

地址可以是4或8bit地址。

INET_NTOA(expr)给定一个数字网络地址(4或8bit),返回作为字符串的该地址的点地址表示。

select inet_aton("192.168.0.1"), inet_ntoa(3232235521)

-- output 
inet_aton("192.168.0.1")|inet_ntoa(3232235521)|
------------------------+---------------------+
              3232235521|192.168.0.1          |

🌹 aton: address to number

🌹 ntoa: number to address

MySQL 8新增加密函数和窗口函数

加密函数主要用来对数据进行加密和界面处理,以保证某些重要数据不被别人获取。这些函数在保证数据库安全时非常有用。

加密函数MD5(str)

MD5(str)为字符串算出一个MD5 128比特校验和。该值以32位十六进制数字的二进制字符串形式返回,若参数为NULL,则会返回NULL。、

select md5(123456)
-- output
md5(123456)                     |
--------------------------------+
e10adc3949ba59abbe56e057f20f883e|

加密函数SHA(str)

SHA(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。SHA加密算法比MD5更加安全。

select sha(123456)
-- output
sha(123456)                             |
----------------------------------------+
7c4a8d09ca3762af61e59520943dc26494f8941b|

加密函数SHA2(str, hash_length)

SHA2(str, hash_length)使用hash_length作为长度,加密str。hash_length支持的值为224、256、384、512和0。其中,0等同于256。

select sha2(123456,0),sha2(123456,512)
-- output
sha2(123456,0)                                                  |
----------------------------------------------------------------+
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92|

窗口函数

在MySQL 8.0版本中,新增了一个窗口函数,用它可以实现很多新的查询方式。

窗口函数类似于SUM()、COUNT()那样的集合函数,但它并不会将多行查询结果合并为一行,而是将结果放回多行当中。

也就是说,窗口函数是不需要GROUP BY的。

示例待补充

聚合函数 Aggregate Function

有时候并不需要返回实际表中的数据,而只是对数据进行总结。

MySQL中聚合函数通常和group by子句一起使用。

常用的聚合函数如下表

NameDescription
AVG()Return the average value of the argument
BIT_AND()Return bitwise AND
BIT_OR()Return bitwise OR
BIT_XOR()Return bitwise XOR
COUNT()Return a count of the number of rows returned
COUNT(DISTINCT)Return the count of a number of different values
GROUP_CONCAT()Return a concatenated string
JSON_ARRAYAGG()Return result set as a single JSON array
JSON_OBJECTAGG()Return result set as a single JSON object
MAX()Return the maximum value
MIN()Return the minimum value
STD()Return the population standard deviation
STDDEV()Return the population standard deviation
STDDEV_POP()Return the population standard deviation
STDDEV_SAMP()Return the sample standard deviation
SUM()Return the sum
VAR_POP()Return the population standard variance
VAR_SAMP()Return the sample variance
VARIANCE()Return the population standard variance

本次重点介绍一下几个聚合函数的具体用法:

COUNT()函数

COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。

其使用方法有两种:

● COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值

● COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行

-- mysql8 示例数据库 world
select count(indepYear) from country
-- output:239
select count(*) from country
select count(1) from country
--  output:192

count(*) 与 count(1)

执行效果上:

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
  • count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

执行效率上:

  • 列名为主键,count(1)会比count(列名)快
  • 列名不为主键,count(1)会比count(列名)快
  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
  • 如果有主键,则 select count(主键)的执行效率是最优的
  • 如果表只有一个字段,则 select count(*) 最优。

COUNT() 与 group by

-- 按地区Region分组,然后查询每个地区的记录总数
select Region, count(*) from country group by Region
-- output, 省略部分结果
Region                   |count(*)|
-------------------------+--------+
Caribbean                |      24|
Southern and Central Asia|      14|
Central Africa           |       9|
Southern Europe          |      15|
Middle East              |      18|

SUM()函数

SUM()是一个求总和的函数,返回指定列值的总和。和group by 一起使用时,先分组,然后计算分组中列的总和。

SUM()函数在计算时,忽略列值为NULL的行。

mysql> SELECT SUM(profit) AS total_profit
       FROM sales;
+--------------+
| total_profit |
+--------------+
|         7535 |
+--------------+
mysql> SELECT country, SUM(profit) AS country_profit
       FROM sales
       GROUP BY country
       ORDER BY country;
+---------+----------------+
| country | country_profit |
+---------+----------------+
| Finland |           1610 |
| India   |           1350 |
| USA     |           4575 |
+---------+----------------+

AVG()函数

AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

mysql> SELECT student_name, AVG(test_score)
       FROM student
       GROUP BY student_name;

MAX()函数

MAX()返回指定列中的最大值。

MAX()也可以和GROUP BY关键字一起使用,求每个分组中的最大值。

MAX()函数不仅适用于查找数值类型,也可应用于字符类型。

TIP

MAX()函数除了用来找出最大的列值或日期值之外,还可以返回任意列中的最大值,包括返回字符类型的最大值。

在对字符类型数据进行比较时,按照字符的ASCII码值大小进行比较,从a~z,a的ASCII码最小,z的最大。

在比较时,先比较第一个字母,如果相等,继续比较下一个字符,一直到两个字符不相等或者字符结束为止。

例如,‘b’与‘t’比较时,‘t’为最大值;“bcd”与“bca”比较时,“bcd”为最大值。

MIN()函数

MIN()返回查询列中的最小值。

MIN()也可以和GROUP BY关键字一起使用,求出每个分组中的最小值。

MIN()函数与MAX()函数类似,不仅适用于查找数值类型,也可应用于字符类型。