数据库常用函数-基础
常见函数
1.统计函数-- count
count 会统计我们表中有多少个行 就会返回我们的行数
SELECT COUNT(*) FROM student;
SELECT COUNT(*) FROM student
WHERE (math>90);
2.sum 函数
sum函数就是简单的求和
多条求和语句使用逗号隔开处理
SELECT SUM(math) FROM student;
SELECT SUM(math),SUM(english),SUM(chinese) FROM student;
SELECT SUM(math+english+chinese) FROM student;
3.avg函数
这个函数就是求平均值的一个函数 这个函数的具体操作就是求出我们规定的某个数据在我们表中的平均值是多少
SELECT AVG(chinese) FROM student;
要是想求不同数据的平均值我们就直接从avg里面进行修改一下就行
SELECT SUM(chinese)/COUNT(*) FROM student;
4.max min函数
这个就是求出整个表中给某个数据的最大或者最小值的操作
SELECT MAX(math+english+chinese),MIN(math+english+chinese)
FROM student;
5.字符串函数
1.几个比较常用的字符串函数(红色的使用频率多,需要掌握)
1.charset()
这个函数返回我们当前选中字段的字符集是什么
SELECT CHARSET(ename) FROM emp;
2.concat()
字符串的拼接,这个也是十分的简单,就是将多个数据进行拼接,和Java里面的字符串拼接很像
SELECT CONCAT(ename,' 的工作是',job) FROM emp;
3.instr
这里这个函数里面进行传递的参数是说 ,第二个字符串在什么位置第一次出现
SELECT INSTR("yt1105","1") FROM DUAL;
这里我们用到了dual这个表,这个表是系统分配给我们的 叫做亚元表 可以作为一个测试表使用
还有就是注意一下 在数据库里面的数组的下标是从1开始的 要注意
4.lcase ucase的转换
也就是大小写的转换操作
SELECT LCASE(ename) FROM emp;
这个可以将我们的数据进行转化小写
5.left
这个函数有两个参数 第一个是你要取的位置,第二个是你要取几个
SELECT LEFT(ename,2) FROM emp;
看图说实话,我们就会取出我们的前两位,也即是从左侧进行取出2位
6.length
SELECT LENGTH(ename) FROM emp;
既然是返回字节数 那么就会和我们的字符集有关,我们的utf8是汉字对应3个字节
7.replace
SELECT ename,REPLACE (job,'MANAGER','经理') FROM emp;
这个函数会把我们想要替换的数据替换成我们自己想的数据
看图就是显而易见的了
8.strcmp
这个就是比较两个字符串是不是相同的 如果是就返回0 否则根据前后大小关系 返回正负数
SELECT STRCMP('hh','hh')FROM DUAL;
9.substring
截取字符串的操作处理
SELECT SUBSTRING(ename,1,2) FROM emp;
这个第一个参数代表我要从哪里进行截取,后面是从第几位截取到第几位
10 ltrim,rtrim ,trim(了解)
这个就是去除左边空格 去除右边空格 和去除左右空格的操作
SELECT LTRIM(' asdsadsda') FROM DUAL;
SELECT RTRIM('sadsads ') FROM DUAL;
SELECT TRIM(' ada adsa ') FROM DUAL;
小练习
显示出员工姓名第一个为转为小写,其余不变
解析
SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),SUBSTRING(ename,2,LENGTH(ename)))FROM emp;
6.数学函数
1.简介
1.abs()绝对值函数
SELECT ABS(-110) FROM DUAL;
2.ceiling
天花板函数的操作
SELECT BIN(10) FROM DUAL;
3.floor 向下取整的操作
SELECT FLOOR(1.2) FROM DUAL;
4.conv
将你的数据从吗某个进制准换到你想要的进制
SELECT CONV(1221,10,2) FROM DUAL;
5.format
这个函数是将我们想要处理的小数部分转换为我们向保留几位
SELECT FORMAT(12111.1212121,2) FROM DUAL;
6.least
SELECT LEAST(1,2,21,21,1,2121,-121) FROM DUAL;
7.mod
SELECT MOD(10,3) FROM DUAL;
8.rand()
SELECT RAND() FROM DUAL;
7.时间相关的函数
1.查看一些时间
SELECT CURRENT_DATE FROM DUAL; 2022-01-28
SELECT CURRENT_TIME FROM DUAL; 17:18:40
SELECT CURRENT_TIMESTAMP FROM DUAL; 2022-01-281 7:18:40
2.date_add和date_sub和NOW函数的使用
可以放置2个参数进去,第一个参数是代表你要进行处理的参数,第二个参数是要加或者减的时间 单位是时分秒年月日都可以
加上关键字interval
now函数的操作是返回当前的时间 包含年月日时分秒的 now会计算出年月日 时分秒 都会计算出来的
CREATE TABLE mes(
id INT ,
content VARCHAR(30),
send_time DATETIME);
INSERT INTO mes VALUES(1,'北京新闻',CURRENT_TIMESTAMP);
INSERT INTO mes VALUES(2,'上海新闻',NOW());
INSERT INTO mes VALUES(3,'广东新闻',NOW());
SELECT * FROM mes;
SELECT id ,content,DATE(send_time) FROM mes;
SELECT * FROM mes
WHERE DATE_ADD(send_time,INTERVAL 10 MINUTE)>=NOW()
SELECT * FROM mes
WHERE DATE_SUB(NOW(),INTERVAL 10 MINUTE)<=send_time;
3.datediff
这个函数是用来计算我们之间的数据相差的天数是多少
SELECT DATEDIFF('2011-11-11','1990-01-01') FROM DUAL;
小案例1,-计算你活了多少天
SELECT DATEDIFF(NOW(),'2003-11-05')/365 FROM DUAL;
小案例2
SELECT DATEDIFF( DATE_ADD('2003-11-05',INTERVAL 80 YEAR),NOW()) FROM DUAL;
4.timediff
这个是进行时间的差值计算 就是时分秒之间的计算
SELECT TIMEDIFF ('10:11:11','2:02:11');
5.强制类型转换
SELECT YEAR (NOW()) FROM DUAL;
SELECT MONTH(NOW())FROM DUAL;
这个语句写出来之后 就是只会显示年 或者是月
6.UNIX_TIMESTAMP
这个是会返回一个从1970 -01-01-00-00-00的秒数
SELECT UNIX_TIMESTAMP FROM DUAL;
7.FROM_UNIXTIME
这个是将秒数加到我们时间戳开始的时间上面 ,然后根据我们用户自行决定我们应该如何进行输出这个格式
SELECT FROM_UNIXTIME(112312313,'%Y-%m-%d %H:%i:%s') FROM DUAL;
8.加密函数和系统函数
1.USER()
这个函数是返回我们的用户名的ip地址
SELECT USER() FROM DUAL;
2.SELECT DATABASE() FROM DUAL;
显示我们当前所处的是哪个数据库
SELECT DATABASE() FROM DUAL;
3.加密函数md5
SELECT MD5('root') FROM DUAL;
通过这个函数进行加密之后不管你的密码是多长都会被加密成为32位的长度
4.mysql自带加密函数PASSWORD
这个和md5也是因加密而生的,就是加密的算法不一样导致结果不一样
知道就行
SELECT PASSWORD('root') FROM DUAL;
9.流程控制函数的使用
1.任务驱动,要求查询emp表,如果column是null,则显示0.0,
2.如果emp表的job是clerk则显示职员,如果是manager则显示经理,其他正常显示
大家看到这里是不是就感觉到了似乎有一种if else语句的感觉,其实就是这样的 的确是有if else的感觉
只不过在这里变成了 when then 而已
1.if
SELECT IF(TRUE,1,2) FROM DUAL;
2.ifnull
SELECT IFNULL(NULL,'hello');
3.when then 操作
SELECT CASE
WHEN TRUE THEN 'jack'
WHEN TRUE THEN 'tom'
ELSE 'marry' END;
实现第二个任务驱动
SELECT ename,(SELECT CASE
WHEN job='CLERK' THEN '职员'
WHEN job='MANAGER' THEN '经理'
WHEN job='SALESMAN' THEN '销售人员'
ELSE job END) AS 'job'
FROM emp;
分组统计
小案例1.
首先引入我们的数据表
浅谈一下 什么是分组统计 ,可以叫做是分组计算,个人理解 就是我们假设在一个部门里面,我们分成了
10 20 30 为编号的3个小组,里面有100多个人 然后这些人隶属于这些小组中 ,也就是说这些人的数量是不同的其实,
我们分配给这三个小组
好啦 我们先看一下我们的任务驱动 来引出我们要学习的知识点
请你显示出 不同小组的最大值和平均值
好,我们先把代码进行展示 然后以代码进行讲解
SELECT AVG(sal),MAX(sal),deptno
FROM emp GROUP BY deptno;
看第一句话我们,这个select语句后面的意思是我要进行显示哪些数据处理,
第二个是我们从哪个表进行查询,然后 group by 这个关键字是比较重要的 ,就是我们原先是有很多人,但是并不是所有都属于一个小组里面,那么我们分组之后 对每个组进行了平均值和最大值的显示 这就是第二句话的意思
小案例2
好 我们再看一个例子
SELECT AVG(sal),MAX(sal),deptno,job
FROM emp GROUP BY deptno,job;
这个说显示显示每个部门的每种岗位的平均工资和最低工资,这个和我们刚刚看到很相似,但是除了多家一个部门,
好 我们想一想,就是 每个部门下面分职工 普通职员,经理,老板,但是所代表的数量又是不同的,普通员工的人数比较高,然后次之,我们要干的事情就是说,每个职位进行平均值和最大值的匹配 就是再这个组 下面再分组,分到适合的位置即可。
上图我们就能清晰的看出分组到部门的情况
小案例3
任务-- 显示某个部门平局工资小于两千的部门
SELECT AVG(sal) AS avg_sal ,deptno
FROM emp GROUP BY deptno
HAVING avg_sal < 2000;
SELECT * FROM emp;
这个经过上两次的训练,大家肯定就是掌握了,但是有了限制,我们的having就腾空出世,这个是对于我们的小组机进行查看,然后有了限制,我们采用having就可以解决。
总结
我们进行一下这个代码的剖析一下,
select 后面跟着的就是 我们要进行显示的
2.from 就是告诉我们的显示是从哪里进行数据操作(告诉我们分组的情况)
3.having 就是对于查询的限制
大值的匹配 就是再这个组 下面再分组,分到适合的位置即可。
[外链图片转存中…(img-woUJp9aU-1643371820322)]
上图我们就能清晰的看出分组到部门的情况
小案例3
任务-- 显示某个部门平局工资小于两千的部门
SELECT AVG(sal) AS avg_sal ,deptno
FROM emp GROUP BY deptno
HAVING avg_sal < 2000;
SELECT * FROM emp;
这个经过上两次的训练,大家肯定就是掌握了,但是有了限制,我们的having就腾空出世,这个是对于我们的小组机进行查看,然后有了限制,我们采用having就可以解决。
总结
我们进行一下这个代码的剖析一下,
select 后面跟着的就是 我们要进行显示的
2.from 就是告诉我们的显示是从哪里进行数据操作(告诉我们分组的情况)
3.having 就是对于查询的限制
|