MySQL中的内置函数

内置函数

为提高用户对数据库和数据的管理和操作效率,MySQL提供了大量的内置函数供开发者使用。内置函数也可以称为系统函数,无须开发者定义,直接调用即可。这些内置函数从功能方面划分,可分为数学函数、字符串函数、日期和时间函数、条件判断函数、加密函数等。由于MySQL内置函数数量较多,因此不可能进行一一讲解,接下来对其中一些常用的函数进行说明,具体如下。

数学函数

ABS(x)

返回x的绝对值

SQRT(x)

返回x的非负2次方根

MOD(x,y)

返回x被y除后的余数

CEILING(x)

返回不小于x的最小整数

FLOOR(x)

返回不大于x的最大整数

ROUND(x,y)

对x进行四舍五入操作,小数点后保留y位

TRUNCATE(x,y)

舍去×中小数点y位后面的数

SIGN(x)

返回x的符号,x的值为负数、零和正数时依次返回-1、0和1

字符串函数

LENGTH(str)

返回字符串 str 的长度

CONCAT(s1,s2,…)

返回一个或多个字符串连接产生的新字符串

TRIM(str)

删除字符串两侧的空格

REPLACE(str,s1,s2)

使用字符串s2替换字符串str中所有的字符串s1

SUBSTRING(str,n,len)

返回字符串str的子串,起始位置为n,长度为len

REVERSE(str)

返回字符串反转后的结果

LOCATE(s1,str)

返回子串 s1在字符串 str中的起始位置

日期和时间函数

CURDATE()

获取系统当前日期

CURTIME()

获取系统当前时间

SYSDATE()

获取当前系统日期和时间

TIME_TO_SEC()

返回将时间转换成秒的结果

ADDDATE()

执行日期的加运算

SUBDATE()

执行日期的减运算

DATE_FORMAT()

格式化输出日期和时间值

条件判断函数

IF(expr,v1,v2)

如果expr表达式为true返回v1,否则返回v2

IFNULL(vl,v2)

如果v1不为NULL返回v1,否则返回v2

CASE expression WHEN cl THEN result1 WHEN c2 THEN result2 ... WHEN CN THEN resultN ELSE result END

CASE表示函数开始,END表示函数结束。如果cl成立,则返回result1;如果c2成立,则返回result2;当全部不成立,则返回result。在执行过程中,当有一个条件成立后,后面的就不执行。

加密函数

MD5(str)

对字符串str进行MD5加密

ENCODE(str,pwd_str)

使用pwd_str作为密码加密字符串str

DECODE(str,pwd_str)

使用pwd_str作为密码解密字符串str

这五个表格中的内容对MySQL中常见函数的用法作了介绍,由于篇幅关系,下面以函数CONCAT(s1,s2,...)和IF(expr,v1,v2)为例进行演示。

1.CONCAT()函数

执行CONCAT()函数会返回函数参数链接之后的字符串。例如执行CONCAT('a','_','b'),会返回'a_b'。

例如,我们想要使用SQL语句查询员工信息时,将员工为销售的职业、编号、姓名信息在一列中展示,各个字段值之间使用下划线进行链接。此时就可以使用CONCAT()函数进行实现,具体SQL语句及执行结果如下:

mysql> SELECT CONCAT(empno,'_',job,'_',ename) FROM emp WHERE job='销售';
+---------------------------------+
| CONCAT(empno,'_',job,'_',ename) |
+---------------------------------+
| 9775_销售_王五                  |
| 9880_销售_张三                  |
| 9888_销售_郑十                  |
| 9900_销售_孙七                  |
+---------------------------------+
4 rows in set (0.00 sec)

从执行结果来看,通过调用CONCAT()函数将员工编号、职位、员工姓名的值使用下划线链接起来了。

需要注意的是,CONCAT(str1,,str2,..)的返回结果为所有参数连接后组成的字符串。如果CONCAT函数有任何一个参数为NULL,则返回值为NULL。例如,我们想要使用SQL语句查询员工信息时,将员工职位为销售的员工姓名、员工奖金及员工部门编号的信息在一列中显示,各个字段值之间使用下画线“_”进行连接,具体SQL语句及执行结果如下。

mysql> select*from emp;
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9770 | 吴九   | 保洁   | 2500 | NULL |
|  9775 | 王五   | 销售   | 3500 |  500 |
|  9880 | 张三   | 销售   | 3000 |  200 |
|  9885 | 李四   | 保洁   | 2500 |  100 |
|  9888 | 郑十   | 销售   | 3500 | NULL |
|  9900 | 孙七   | 销售   | 2500 |  200 |
|  9990 | 周八   | 经理   | 7000 | 1000 |
+-------+--------+--------+------+------+
7 rows in set (0.00 sec)

先看一下表的具体结构,发现郑十这位员工的奖金为空,那么其链接的数据结果是否为空呢?

mysql> SELECT CONCAT(empno,'_',bon,'_',ename) FROM emp WHERE job='销售';
+---------------------------------+
| CONCAT(empno,'_',bon,'_',ename) |
+---------------------------------+
| 9775_500_王五                   |
| 9880_200_张三                   |
| NULL                            |
| 9900_200_孙七                   |
+---------------------------------+
4 rows in set (0.00 sec)

在上述SELECT语句中,使用WHERE子句筛选出职位为销售的记录,再使用CONCAT函数将这些记录的多个字段的值通过下画线进行连接并返回。由执行结果可以看到,有1条记录显示NULL,因为职位为销售的的员工中有1个员工的奖金为NULL。

2. IF函数

IF函数有3个参数,具体格式为IF(expr,v1,v2)。如果表达式expr成立,返回结果v1;否则返回结果v2。例如,我们想要使用SQL语句查询员工表中部门保洁的员工姓名、员工奖金及员工部门编号的信息;如果奖金为NULL,则返回"无奖金"。查询时可以使用IF()函数对奖金进行判断,具体SQL语句及执行结果如下:

mysql> SELECT empno,IF(ISNULL(bon),'无奖金',bon),ename,job FROM emp WHERE job='保洁';
+-------+---------------------------------+--------+--------+
| empno | IF(ISNULL(bon),'无奖金',bon)    | ename  | job    |
+-------+---------------------------------+--------+--------+
|  9770 | 无奖金                          | 吴九   | 保洁   |
|  9885 | 100                             | 李四   | 保洁   |
+-------+---------------------------------+--------+--------+
2 rows in set (0.00 sec)

在上述SELECT语句中,先使用WHERE语句筛选出职位为保洁的员工记录,并且使用IF()函数判断奖金是否为空,如果为空,则返回无奖金,不为空则返回正常奖金。由执行结果来看保洁部门有一个员工没有奖金。

设置别名

在查询数据时,可以为数据表和字段取别名,可使用这个别名代替原来的数据表名和字段名。

为数据表设置别名

在进行查询操作时,如果数据表名很长或者需要执行一些特殊查询,为方便操作,可以为数据表取一个别名,用这个别名代替数据表的名称。MySQL中为数据表起别名的基本语法格式如下。

SELECT*FROM 数据表名 [AS] 别名;

在上面的语法格式中,AS为可选项,用于指定数据表的别名。下面通过一个案例演示在SELECT语句中为数据表设置别名。

例如,我们想要使用SQL语句查询员工信息时,为emp数据表起一个别名。并且使用别名e查询职位为经理的员工信息,具体SQL语句及执行结果如下。

mysql> SELECT * FROM emp e WHERE e.job='经理';
+-------+--------+--------+------+------+
| empno | ename  | job    | sal  | bon  |
+-------+--------+--------+------+------+
|  9990 | 周八   | 经理   | 7000 | 1000 |
+-------+--------+--------+------+------+
1 row in set (0.00 sec)

在上述SELECT语句中,emp e表示为emp数据表定义别名为e,此时在语句中使用别名e和数据表名emp有相同的效果;e..job='经理'表示筛选emp数据表中job字段的值为经理的记录。

为字段设置别名

在前面的查询操作中,每条记录中的列名都是定义表时的字段名,有时为了将查询结果更加直观地显示,可以为查询的字段取一个别名。SELECT语句中为字段起别名的基本语法格式如下。

SELECT 字段名 [AS] 别名 [,字段名[AS]别名,...] FROM 数据表名;

在上面的语法格式中,AS为可选项,用于指定字段的别名。下面通过一个案例演示在SELECT语句中为字段设置别名。

例如,我们想要使用SQL语句查询员工表中职位为销售的员工姓名、员工奖金及员工部门编号的信息,查询结果返回时将字段ename的名称设置别名“姓名”,字段bon的名称设置别名“奖金”,字段empno的名称设置别名“部门编号”,具体SQL语句及执行结果如下。

mysql> SELECT empno '部门编号',ename '姓名',bon '奖金' FROM emp WHERE job='销售';
+--------------+--------+--------+
| 部门编号     | 姓名   | 奖金   |
+--------------+--------+--------+
|         9775 | 王五   |    500 |
|         9880 | 张三   |    200 |
|         9888 | 郑十   |   NULL |
|         9900 | 孙七   |    200 |
+--------------+--------+--------+
4 rows in set (0.00 sec)

AS可写可不写,想简写的可以不写,但是写上的话别人更容易看懂,我是懒得写。

下篇文章是多表操作,以及如何使用这些多表操作。

点个关注不迷路。

你可能感兴趣的:(MySQL,mysql,数据库)