官网:https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html

5.1常用函数

数学运算

--  数学运算
SELECT ABS(-8)  -- 绝对值
SELECT CEILING (9.4)  -- 向上取整
SELECT FLOOR(9.4)  -- 向下取整
SELECT RAND()  -- 生成0-1之间的随机数
SELECT SIGN(-5) -- 判断一个数的符号,整数返回1,负数返回-1.0返回0

字符串函数

-- 字符串函数
SELECT CHAR_LENGTH('即使再小的帆也能远航') -- 返回字符串长度
SELECT CONCAT('我','爱','你们') -- 拼接字符串
SELECT INSERT('我爱编程HelloWorld',1,2,'超级热爱')  -- 从某个位置开始替换某个长度
-- 超级热爱编程HelloWorld   相当于把从第一个位置开始的2个字符替换成新的字符串
SELECT INSERT('我爱编程HelloWorld',1,2,'超级11111')  -- 超级11111编程HelloWorld
SELECT INSERT('我爱编程HelloWorld',1,4,'超级11111') -- 超级11111HelloWorld
SELECT LOWER('ABDGcscdsDAS') -- 全部变成小写字母
SELECT UPPER('ABDGcscdsDAS') -- 全部变成大写字母
SELECT INSTR('abdhsghfhjs','sg')  -- 返回字符串第一次出现的索引,感觉mysql是从1开始计数的
SELECT REPLACE('世上无难事,只要肯攀登','攀登','放弃')  -- 替换指定字符串
SELECT SUBSTR('世上无难事,只要肯攀登',1,5) -- 从第一个字符开始,截取5个字符
SELECT REVERSE('世上无难事,只要肯攀登') -- 反转字符串   登攀肯要只,事难无上世
-- 把所有姓刘的同学改成姓牛
SELECT REPLACE(`studentname`,'刘','牛')FROM  `student` WHERE `studentname` LIKE '刘%'

java 中使用select for update_获取当前时间

时间和日期函数(记住)

-- 时间和日期函数(记住)
SELECT CURRENT_DATE() -- 获取当前日期 2021-03-23
SELECT CURDATE()   -- 获取当前日期 2021-03-23 
SELECT NOW()  -- 获取当前时间 2021-03-23 15:51:25 
SELECT LOCALTIME()  -- 获取当前时间 2021-03-23 15:52:09
SELECT SYSDATE()  -- 获取系统时间 2021-03-23 15:53:29
SELECT YEAR(NOW()) -- 返回当前年 2021
SELECT MONTH(NOW()) -- 返回当前y月3
SELECT DAY(NOW()) -- 返回当前日 23
SELECT HOUR(NOW()) -- 返回当前时  15
SELECT MINUTE(NOW()) -- 返回当前分 56
SELECT SECOND(NOW()) -- 返回当前秒 32

系统

-- 系统
SELECT SYSTEM_USER() -- root@localhost
SELECT USER()-- root@localhost
SELECT VERSION() -- 5.5.40

5.2聚合函数(常用)

计算平均值,最大值,最小值

java 中使用select for update_获取当前时间_02

-- count() 查询表中有多少个记录
SELECT COUNT( `studentname`) FROM `student`  --  查询有多少个学生  返回10 COUNT( 字段)
SELECT COUNT( *) FROM `student` --  COUNT( *)  返回10
SELECT COUNT(1) FROM `student` --  COUNT(1)  返回10

-- 区别 COUNT( 字段)会忽略所有的null值 COUNT( *)和COUNT( 1)不会忽略null值
-- 求学生总分和
SELECT SUM(`studentresult`)AS 总和 FROM `result`

java 中使用select for update_获取当前时间_03

-- 求平均分
SELECT AVG(`studentresult`) AS 平均分 FROM `result`

java 中使用select for update_获取当前时间_04

-- 求最高分
SELECT MAX(`studentresult`) AS 最高分 FROM `result`

java 中使用select for update_字段_05

-- 求最低分
SELECT MIN(`studentresult`) AS 最高分 FROM `result`

java 中使用select for update_字符串_06

查询不同课程的平均分,最高分,最低分

核心:根据不同的课程分组

SELECT `subjectname` AS 课程名称 ,AVG(`studentresult`)AS 平均分 ,MAX(`studentresult`)AS 最高分 ,MIN(`studentresult`)AS 最低分 -- as 课程编号, 平均分,最高分,最低分
FROM `result` r
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`  -- 不分组只能查出来一条记录是因为最高最低只有一个

java 中使用select for update_获取当前时间_07

分组过滤

SELECT `subjectname` AS 课程名称 ,AVG(`studentresult`)AS 平均分 ,MAX(`studentresult`)AS 最高分 ,MIN(`studentresult`)AS 最低分 -- as 课程编号, 平均分,最高分,最低分
FROM `result` r
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`  -- 不分组只能查出来一条记录是因为最高最低只有一个
GROUP BY  r.`subjectno`  -- 通过某一字段分组

java 中使用select for update_字段_08

挑选平均分大于80分的数据

我的第一想法

WHERE AVG(`studentresult`)>80
SELECT `subjectname` AS 课程名称 ,AVG(`studentresult`)AS 平均分 ,MAX(`studentresult`)AS 最高分 ,MIN(`studentresult`)AS 最低分 -- as 课程编号, 平均分,最高分,最低分
FROM `result` r
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`  -- 不分组只能查出来一条记录是因为最高最低只有一个
WHERE AVG(`studentresult`)>80
GROUP BY  r.`subjectno`  -- 通过某一字段分组

java 中使用select for update_字段_09


having —过滤分组的记录必须满足的次要条件

而且having在group by 的下面

对函数进行过滤用having ,where不能和group by 连用

where是判断每一条记录,having二次过滤可以判断组

java 中使用select for update_字段_10

SELECT `subjectname` AS 课程名称 ,AVG(`studentresult`)AS 平均分 ,MAX(`studentresult`)AS 最高分 ,MIN(`studentresult`)AS 最低分 -- as 课程编号, 平均分,最高分,最低分
FROM `result` r
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`  -- 不分组只能查出来一条记录是因为最高最低只有一个
GROUP BY  r.`subjectno`  -- 通过某一字段分组
HAVING AVG(`studentresult`)>80

java 中使用select for update_字符串_11

5.3 数据库级别的MD5加密(扩展)

什么是MD5?
主要增强算法复杂度和不可逆性。
MD5不可逆

MD5破解网站的原理,背后有一个字典,MD5加密后的值﹐加密的慎

测试MD5加密

-- 测试MD5加密

CREATE TABLE `testnd5`(
`id` INT(4) NOT NULL,
`name` VARCHAR(20) NOT NULL,
`pwd` VARCHAR(50) NOT NULL,
PRIMARY KEY(`id`)

)ENGINE = INNODB DEFAULT CHARSET=utf8

-- 明文
INSERT INTO `testnd5` VALUES(1,'此生辽阔','123456')
INSERT INTO `testnd5` VALUES(2,'满天星火','55221'),(3,'七步成诗','62158')

java 中使用select for update_获取当前时间_12

加密

-- 加密
 UPDATE `testnd5` SET `pwd`=MD5(`pwd`)

java 中使用select for update_字段_13

指定加密

UPDATE `testnd5` SET `pwd`=MD5(`pwd`) WHERE `id`=1

插入的时候加密

INSERT INTO `testnd5` VALUES(4,'天方夜谭',MD5('9991314'))

校验

-- 如何校验  将用户传进来的密码进行MD5加密 然后比对加密后的值

SELECT * FROM `testnd5` WHERE `name`='此生辽阔' AND `pwd`=MD5('123456')

java 中使用select for update_字段_14