文章目录
- mysql函数
- 字符串函数
- 字符串函数列表概览
- 用户环境准备
- 字符串连接函数
- 字符串大小写处理函数
- 移除空格函数
- 子串函数
- 数值函数
- 数值函数列表
- 常用数值函数练习
- 日期函数
- 日期函数列表
- 常用日期函数的练习
- sql练习
- 查询练习
mysql函数
MySQL中的函数都是针对指定的列进行操作的
字符串函数
字符串函数列表概览
函数 | 用法 |
---|---|
CONCAT(S1,S2,…,Sn) | 连接S1,S2,…,Sn为一个字符串 |
CONCAT_WS(separator, S1,S2,…,Sn) | 连接S1一直到Sn,并且中间以separator作为分隔符 |
UPPER(s) 或 UCASE(s) | 将字符串s的所有字母转成大写字母 |
LOWER(s) 或LCASE(s) | 将字符串s的所有字母转成小写字母 |
TRIM(s) | 去掉字符串s开始与结尾的空格 |
SUBSTRING(s,index,len) | 返回从字符串s的index位置其len个字符 |
用户环境准备
CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,uname varchar(40) DEFAULT NULL,age int(11) DEFAULT NULL,sex int(11) DEFAULT NULL,PRIMARY KEY (id)
);
insert into t_user values (null,'zs',18,1);
insert into t_user values (null,'ls',20,0);
insert into t_user values (null,'ww',23,1);
insert into t_user values (null,'zl',24,1);
insert into t_user values (null,'lq',15,0);
insert into t_user values (null,'hh',12,0);
insert into t_user values (null,'wzx',60,null);
insert into t_user values (null,'lb',null,null);
字符串连接函数
字符串连接函数主要有两个:
函数或操作符 | 描述 |
---|---|
concat(str1, str2, …) | 字符串连接函数,可以将多个字符串进行连接 |
concat_ws(separator, str1, str2, …) | 可以指定间隔符将多个字符串进行连接; |
练习:使用concat函数显示出 你好 uname的结果
SELECT CONCAT('hello','world');
##指定间隔符将多个字符串进行连接
SELECT CONCAT_WS('-','hello','world');
SELECT CONCAT('你好',uname) uname FROM t_user;
SELECT CONCAT_WS('-','你好',uname) uname FROM t_user;
字符串大小写处理函数
字符串大小写处理函数主要有两个
函数或操作符 | 描述 |
---|---|
upper(str) | 得到str的大写形式 |
lower(str) | 得到str的小写形式 |
练习,将字符串hello装换为大写显示
将hello转成大写
查询t_user,uname变成大写
SELECT UPPER('hello');
SELECT UPPER(uname) from t_user;
将HELLO转成小写
查询t_user,uname变成小写、
SELECT LOWER('hello');
SELECT lower(uname) from t_user;
移除空格函数
可以对字符串进行按长度填充满、也可以移出空格字符
函数或操作符 | 描述 |
---|---|
trim(str) | 将str两边的空白符移除 |
练习:将用户id为9的用户的姓名的两边空白符移除
SELECT TRIM(uname),age,sex FROM t_user WHERE id = 9 ;
子串函数
字符串也可以按条件进行截取,主要有以下可以截取字串的函数
函数或操作符 | 描述 |
---|---|
substr()、substring() | 获取子串: 1:substr(str, pos) 、substring(str, pos); 2:substr(str, pos, len)、substring(str, pos, len) |
功能一样:
substr(str, pos)
substring(str, pos)
str 要截取的字符串
pos 从第几个字符开始截取
功能一样:
substr(str, pos,len)
substring(str, pos,len)
str 要截取的字符串
pos 从第几个字符开始截取
len 截多少个
SELECT SUBSTR('abcdefg',3);
SELECT SUBSTR('abcdefg',3,2);
练习
#获取hello,world从第二个字符开始的完整字串
SELECT SUBSTR('hello,world',7);
SELECT SUBSTR('hello,world',7,4);
数值函数
数值函数列表
函数 | 用法 |
---|---|
ABS(x) | 返回x的绝对值 |
CEIL(x) | 返回大于x的最小整数值 |
FLOOR(x) | 返回小于x的最大整数值 |
RAND() | 返回0~1的随机值 |
POW(x,y) | 返回x的y次方 |
常用数值函数练习
#获取绝对值
SELECT ABS(-12);
#将-11.2向上取整
SELECT CEIL(-11.2);
#将1.6向下取整
SELECT FLOOR(1.6);
#获得2的两次幂的值
SELECT POW(2,2);
#获得0-110之间的随机数
SELECT RAND()*100;
日期函数
日期函数列表
函数 | 用法 |
---|---|
CURDATE() 或 CURRENT_DATE() | 返回当前日期 年月日 |
CURTIME() 或 CURRENT_TIME() | 返回当前时间 时分秒 |
NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP() | 返回当前系统日期时间 |
DATEDIFF(date1,date2) / TIMEDIFF(time1, time2) | 返回date1 - date2的日期间隔 / 返回time1 - time2的时间间隔 |
常用日期函数的练习
#获取当前日期
SELECT CURDATE();
#获取当前时间 仅仅需要时分秒
SELECT CURTIME();
#获取当前时间,包括年月日时分秒
SELECT NOW();
#获取到11月11日还有多少天
SELECT DATEDIFF('2024-11-11',NOW());
sql练习
一下是相关需求,大家可以根据这个,自行练习
1.创建数据库mytest01,并使用数据库
2.创建部门表dept,部门表中包含 部门id (自增) 部门名称
3.向部门表中插入三条数据 分别是 开发部,市场部,财务部
4.创建员工表包含以下字段
员工id 为主键,自增
姓名,
性别,
工资,
入职日期,
部门编号,
关联部门表id,作为外键
5.向部门表插入数据,
(‘小龙’,‘男’,100000,‘1921-01-01’,1);
(‘小芹’,‘女’,10000,‘1940-01-01’,1);
(‘大勇’,‘男’,20000,‘1942-01-01’,1);
(‘大伟’,‘男’,50000,‘1921-01-01’,2);
(‘小捷’,‘男’,70000,‘1921-01-01’,2);
(‘楚岚’,‘男’,60000,‘1921-01-01’,3);
(‘冯宝’,‘男’,30000,‘1921-01-01’,3);
(‘张之维’,‘男’,50000,‘1921-01-01’,3);
(‘小云’,‘女’,40000,‘1921-01-01’,1);
查询练习
1.查询员工和部门的名字
2.查询大勇的信息,显示员工id,姓名,性别,工资和所在的部门名称(使用显式内连接)
3.将上面查到的内容 表头使用别名的形式展示 比如显示id为员工id name为姓名 等
4.在部门表中增加一个销售部
5.查询所有的部门信息关联查询出该部门中的所有员工信息
6.查询所有的部门信息关联查询出该部门中的所有员工的名字 部门 以及 工资
7.统计出 每个部门的员工人数 查询显示 部门名称 人数
8.统计出 每个部门员工 平均薪资 按照 薪资排序 查询显示 部门名称 平均薪资
9.统计出,每个部门的平均薪资 按照薪资排序 并且筛选出平均薪资>7000的部门
10.查询最高工资是多少
11.根据最高工资到员工表查询到对应的员工信息
12.查询工资小于平均工资的员工有哪些
13.查询工资大于5000的员工,来自于哪些部门的名字
14.查询开发部与财务部所有的员工信息
15.查询出1922年以后入职的员工信息,包括部门名称