Java 学习(2022-07-14)

115 阅读5分钟

Java 学习(2022-07-14)

1. MySQL 数据库

1.1 select 语句

  • distinct 去重
select distinct name from user 
  • as 列取别名
select name as userName from users
  • 统计多列和
select name, (stu_id + id) as total_sum from users

1.2 where 子句

1.2.1 比较运算符

  • BETWEEN ... AND... 显示在某一区间的值
  • IN(set) 显示在 in 列表中的值,例如:in(100, 200)
  • LIKE 模糊查询
  • NOT LIKE
  • IS NULL 判断是否为空

1.2.2 逻辑运算符

  • and
  • or
  • not 不成立,例:where not (salary > 100)

1.3 order by 子句

  • asc 升序
  • desc 降序
  • order by 应位于语句结尾

1.4 函数

1.4.1 count函数

  • count(列):统计满足条件的某列有多少个,会排除null
  • count(*):返回满足条件的记录条数
// 统计表中记录条数
select count(*) from student
// 统计数学大于90分人数
select count(*) from where math > 90
// 统计语文列,不包含null值
select count(math) from student

1.4.2 sum 合计函数(一般用于数值列)

// 统计一个班数学总成绩
select sum(math) from student
// 统计班级语文和数学总成绩
select sum(math), sum(chiness) as 语文总成绩 from student

1.4.3 avg 平均函数

// 统计一个班数学平均分
select avg(math) from student

1.4.4 max 求最高函数

// 求出班级英语最高分
select max(english) from student

1.4.5 min 求最低函数

// 求出班级语文最低分
select min(chiness) from student

1.4.6 字符串相关函数

  • CHARSET(str) 返回字符串字符集
  • CONCAT(str1, str2)连接字符串
  • INSTR(string, substring) 返回substring在string中出现位置,没有返回 0
  • UCASE(string) 转换成大写
  • LCASE(string) 转换成小写
  • LEFT(string, length) 从string中的左边起取length个字符
  • LENGTH(string) string长度
  • REPLACE(str, search, replace) 在 str 中用 replace 替换 search
  • STRCMP(string1, string2) 比较两串大小
  • SUBSTRING(str, position, length) 从 str 的position开始,取length个字符
  • LIRIM(string) RIRIM(string2) trim 去掉前端空格或后端空格
-- select * from emp
-- - `CHARSET(str)` 返回字符串字符集
-- select CHARSET(ename) from emp
-- - `CONCAT(str1, str2)`连接字符串
-- select concat(ename, job) from emp;
-- - `INSTR(string, substring)` 返回substring在string中出现位置,没有返回 `0`
-- select instr("liyongqi", "q")
-- - `UCASE(string)` 转换成大写
-- select ucase("li")
-- - `LCASE(string)` 转换成小写
-- select lcase("SSSSSZZZZ")
-- - `LEFT(string, length)` 从string中的左边起取length个字符
-- select left("liyongqi", 2);
-- - `LENGTH(string)` string长度
-- select length("liyongqi")
-- - `REPLACE(str, search, replace)` 在 str 中用 replace 替换 search
-- select replace("liyongqi", "qi", "nb")
-- - `STRCMP(string1, string2)` 比较两串大小
-- select strcmp("2", "zz");
-- - `SUBSTRING(str, position, length)` 从 str 的position开始,取length个字符
-- select substring("liyongqi", 2, 3)
-- - `LIRIM(string) RIRIM(string2) trim` 去掉前端空格或后端空格

1.4.7 数学相关函数

  • ABS(num)绝对值
  • BIN(decimal_number )十进制转二进制
  • CEILING (number2 )向上取整,得到比num2大的最小整数
  • CONV(number2,from_base,to_bas进制转换e)
  • FLOOR (number2 )向下取整,得到比num2小的最大整数
  • FORMAT (number,decimal_places )保留小数位数
  • HEX (DecimalNumber )转十六进制
  • LEAST (number , number2 )求最小值
  • MOD (numerator ,denominator )求余
  • RAND([seed])
  • RAND([seed])其范围为0svS1.0

1.4.8 时间相关函数

  • CURRENT_DATE( ) 当前日期
  • CURRENT_TIME( ) 当前时间
  • CURRENT_TIMESTAMP ( ) 当前时间戳
  • DATE(datetime ) 返回datetime的日期部分
  • DATE_ADD (date2 ,INTERVAL d_value 在date2中加上日期或时间d_type )
  • DATE_SUB (date2 ,INTERVAL d_value 在date2上减去一个时间 d_type )
  • DATEDIFF (datei ,date2 )两个日期差(结果是天)
  • TIMEDIFF(date1,date2)两个时间差(多少小时多少分钟多少秒)
  • Now( ) 当前时间
  • YEAR Month |DATE (datetime ) FROM_UNIXTIME() 年月日
 // CURRENT_DATE( ) 当前日期
 select CURRENT_DATE 2022-07-14
 // CURRENT_TIME( ) 当前时间
 select CURRENT_TIME 11:25:08
 // CURRENT_TIMESTAMP ( ) 当前时间戳
 select CURRENT_TIMESTAMP  2022-07-14 11:24:19
 // DATE(datetime ) // 返回datetime的日期部分
 select now() // 返回 2022-07-14 11:24:19
 // DATE_ADD (date2 ,INTERVAL d_value 在date2中加上日期或时间d_type )
 // DATE_SUB (date2 ,INTERVAL d_value 在date2上减去一个时间 d_type )
 // DATEDIFF (datei ,date2 )`两个日期差(结果是天)
 //TIMEDIFF(date1,date2)`两个时间差(多少小时多少分钟多少秒)
 Now( ) 当前时间 
 // YEAR Month |DATE (datetime ) FROM_UNIXTIME() 年月日
 select TIMEDIFF("2011-11-11", "1990-01-01") from dual
 select year(now()) // 2022
 select month(now()) // 7
 select FROM_UNIXTIME(1287472012, '%Y-%m-%d %H:%i:%s') // 2010-10-19 15:06:52

1.4.9 加密函数和系统函数

  • USER() 查询用户
  • DATABASE() 数据库名称
  • MD5(str) 使用md5对str进行加密
  • password(str) 对已经用md5加密的字符串进行解密

1.5 group 子句 对列进行分组

// 根据 deptno 分组,分别查询各个部门的平均工资和最高工资
select avg(sal), max(sal), deptno 
			 from emp 
			 GROUP BY deptno

1.6 having 子句 对分组后的结果进行过滤

// 根据分组查询出来的结果,进行过滤

select avg(sal), deptno from emp 
			 GROUP BY deptno
			 having avg(sal) < 900

1.7 mysql 外连接

1.7.1 外连接

  • 左外连接(如果左侧的表完全显示,就称为左外连接)
select name, stu.id,grade 
	from exam LEFT JOIN stu
	on exam.id = stu.id	
  • 右外连接(如果右侧的表完全显示,就称为右外连接)
select name, stu.id,grade 
	from exam RIGHT JOIN stu
	on exam.id = stu.id	

1.8 mysql 约束

  • primary key 主键
  • foreign key 外键
  • check
  • not null 非空
  • unique(唯一) 该列值不能重复

1.9 mysql 索引 (空间换时间)

// 表示在 emp 表的 empno 列创建索引
create index empno_index on emp (empon)
  • 当没有索引时,数据库会进行全表扫描,依次对比
  • 有索引时,借用二叉树的底层原理,所以速度快
  • 创建索引的代价是,磁盘占用以及影响(delete,update,insert)语句的效率

1.9.1 mysql 索引类型

  • 主键索引,主键自动为主索引
  • 唯一索引(unique)
  • 普通索引(index)
  • 全文索引(fulltext)【适用于MyISAM】 开发中考虑使用:全文搜索 Solr 和 ElasticSearch
-- 添加唯一索引
create unique index id_index on t25 (id)
-- 添加普通索引方式 1
create index id_index on t25 (id);
-- 添加普通索引方式 2
alter table t25 add index id_index (id)
-- 删除索引
drop index id_index on t25
-- 删除主键索引
alter table t26 drop primary key
-- 查询索引
-- 1. 方式
show index from t25
-- 2. 方式
show indexes from t25
-- 3. 方式
show keys from t25

1.10 mysql 事务

1.10.1 什么是事务

用于保证数据的一致性,它由一组相关的dml语句组成,要么该组dml语句全成功,要么全失败。如:转账。

1.10.2 事务和锁

当执行事务操作时(dml语句),mysql 会在表上加锁,防止其他用户改表的数据

  1. start transaction -- 开始一个事务
  2. savepoint 保存点名 -- 设置保存点
  3. rollback to 保存点名 -- 回退事务
  4. rollback -- 回退全部事务
  5. commit -- 提交事务,所有操作生效,不能回退

1.10.3 事务操作示意图(类似游戏存档)

image.png