MySQL组合查询
简介所谓组合查询,就是执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回
使用组合查询的两种情况:
在单个查询中从不同的表返回类似结构的数据
对单个表执行多个查询,按单个查询返回数据
多个SELECT语句之间使用UNION关键字连接,返回的是多条SELECT语句返回结果的并集(即去掉重复的结果,这是默认的),如果不想去掉重复的结果,就在UNION关键字后加上ALL
实例单个SELECT语句查询姓名中包含“赵”字的学生
1SELECT * FROM t_student WHERE student_name LIKE '%赵%';
查询年龄大于10岁的学生
1SELECT * FROM t_student WHERE age>10;
使用UNION返回两条SELECT语句结果的并集,去掉了重复的结果
1SELECT * FROM t_student WHERE student_name LIKE '%赵%' UNION SELECT * FROM t_student WHERE age>10;
使用UNION ...
MySQL使用联结
简介使用联结可以用一条SELECT语句检索出多个表的数据,使用联结的前提是表之间存在关联(一个表的除主键外的某一列,即:外键,是另一个表的主键),例如下图:(t_student的class_id是外键,表示班级和学生是一对多的关系,即一个班级有0个或多个学生)
实例使用where查询学生的班号、姓名、年龄
其中班号在表t_class、姓名和年龄在表t_student
表t_student的class_Id字段是外键
1SELECT class_num,student_name,age FROM t_class,t_student WHERE t_class.`id`=t_student.`class_id`;
使用inner join下面的SQL语句的作用和上一条语句的作用是一样的
1SELECT class_num,student_name,age FROM t_class INNER JOIN t_student ON t_class.`id`=t_student.`class_id`;
联结多个表
使用where
查询学生的班号、姓名、语文成绩、数学成绩、英语成绩
其中班号 ...
MySQL使用子查询
简介介绍所谓子查询,就是嵌套在其他查询中的查询
版本要求要使用子查询,必须使用MySQL 4.1或更高级的版本
作用
过滤数据
作为计算字段使用
实例过滤数据查询 t_class 班级表的id小于3的班级的所有学生
1SELECT * FROM t_student WHERE class_id IN (SELECT id FROM t_class WHERE id<3);
作为计算字段使用查询各个班号下的学生人数
1SELECT class_num,(SELECT COUNT(*) FROM t_student WHERE t_student.`class_id`=t_class.`id`) AS student_num FROM t_class;
MySQL分组数据
GROUP BY简介数据分组使用GROUP BY子句,并且会根据分组的字段进行ASC排序
实例将学生按照年龄进行分组,并且统计每个年龄的学生人数,结果的排序为:年龄的升序
1SELECT age,COUNT(*) AS age_count FROM t_student GROUP BY age;
HAVING简介分组的数据可以使用HAVING子句进行过滤,在GROUP BY后使用,HAVING后接一个条件,然后就可以筛选出满足条件的数据
实例将学生按照年龄进行分组且学生年龄大于11岁,并且统计每个年龄的学生人数,结果的排序为:年龄的升序
1SELECT age,COUNT(*) AS age_count FROM t_student GROUP BY age HAVING age>11;
排序简介一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法,千万不要仅依赖GROUP BY排序数据
实例将学生按照年龄进行分组且学生年龄大于11岁,并且统计每个年龄的学生人数,结果的排序为:该年龄人数的升序
1SELECT age,COUNT(* ...
MySQL汇总数据
聚集函数
函数
说明
AVG()
返回某列的平均值
COUNT()
返回某列的行数
MAX()
返回某列的最大值
MIN()
返回某列的最小值
SUM()
返回某列值之和
AVG()获取全部学生的平均年龄
1SELECT AVG(age) AS avg_age FROM t_student;
COUNT()获取学生总数量
1SELECT COUNT(*) AS student_count FROM t_student;
MAX()获取学生年龄的最大值
1SELECT MAX(age) AS max_age FROM t_student;
MIN()获取学生年龄的最小值
1SELECT MIN(age) AS min_age FROM t_student;
SUM()获取学生年龄的总和
1SELECT SUM(age) AS sum_age FROM t_student;
聚集不同值使用DISTINCT参数,只包含不同的值;DISTINCT参数的反义是ALL参数,包含所有的值,ALL参数是默认的
查询所有不同的学生年龄的值
1SELECT DIST ...
MySQL数据处理函数
文本处理函数常用函数
函数
说明
Left()
返回串左边的字符
Length()
返回串的长度
Locate()
找出串的一个子串
Lower()
将串转换为小写
LTrim()
去掉串左边的空格
Right()
返回串右边的字符
RTrim()
去掉串右边的空格
Soundex()
返回串的SOUNDEX值
SubString()
返回子串的字符
Upper()
将串转换为大写
实例Left()从左边开始,截取前两位字符
1SELECT LEFT("123456",2);
Right()从右边开始,截取后两位字符
1SELECT RIGHT("123456",2);
Length()返回字符串”1234”的长度,长度为4
1SELECT LENGTH("1234");
Locate()查看子串”12”在字符串”33312345612”中第一次出现的位置,结果为4
1SELECT LOCATE("12","33312345612" ...
Spring Boot整合Shiro实现认证和授权
数据库新建数据库数据库命名为 db_shiro,可以直接导入我的数据库文件,那么就不需要查看下面的数据库操作了,sql文件地址为:a6678696/ShiroDemo: Spring Boot整合Shiro实现认证和授权 (github.com)
新建五张表
t_user用户表
t_user_role用户角色表
t_role为角色表
t_role_permission用户权限表
t_permission权限表
插入数据
t_user用户表
1insert into `t_user`(`id`,`userName`,`password`,`nickName`,`salt`) values (1,'ledao','8b8d72a8743e5102087b7d3e0423a729','乐道','gQKQEpNUeNhRDiGsd3RYqA=='),(2,'admin','838f8ca3ba499ede3585cddcb4d72f05', ...
Shiro加密
Java代码1234567891011121314151617181920212223242526package com.ledao;import org.apache.shiro.crypto.SecureRandomNumberGenerator;import org.apache.shiro.crypto.hash.SimpleHash;/** * @author LeDao * @company * @create 2021-09-14 11:10 */public class Test { public static void main(String[] args) { //原始密码 String password = "123456"; //随机盐值 String salt = new SecureRandomNumberGenerator().nextBytes().toString(); //加密次数 int times = 2; ...
Shiro自定义Realm实现认证和授权
自定义Realm新建一个MyRealm类,继承Shiro框架的AuthorizingRealm类,并实现默认的两个方法:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113package com.ledao.realm;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.S ...
Shiro授权
授权过程
代码实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package com.ledao;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.authz.AuthorizationException;import org.apache.shiro.mgt.DefaultSecurityManager;import org.apache.shiro.realm.SimpleAccountRealm;import org.apache.shiro.subject.Subject;/** * @author LeDao * @company * @create 2021 ...