一.MySQL数据库学习(二)
(一).DQL查询数据
DQL(Data Query Language)是用于从数据库中检索数据的语言。常见的 DQL 语句包括 SELECT、FROM、WHERE、GROUP BY、HAVING 和 ORDER BY 等关键字,用于指定要检索的数据、数据源、过滤条件、分组方式、聚合函数以及排序规则等。
一.基本查询
实例演示:
-- =================== DQL: 基本查询 ======================
-- 1. 查询指定字段 name,entrydate 并返回
select name,entrydate from tb_emp;-- 2. 查询返回所有字段
select * from tb_emp;
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)
select name as 姓名,entrydate as 入职日期 from tb_emp;-- 4. 查询已有的员工关联了哪几种职位(不要重复)
select distinct job from tb_emp;
二.条件查询
实例演示:
-- =================== DQL: 条件查询 ======================
-- 1. 查询 姓名 为 杨逍 的员工
select * from tb_emp where name='杨逍';-- 2. 查询 id小于等于5 的员工信息
select * from tb_emp where id<=5;-- 3. 查询 没有分配职位 的员工信息
select * from tb_emp where job is null;-- 4. 查询 有职位 的员工信息
select * from tb_emp where job is not null;-- 5. 查询 密码不等于 '123456' 的员工信息
select * from tb_emp where password!='123456';
select * from tb_emp where password<>'123456';
-- 6. 查询 入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
select * from tb_emp where entrydate>='2000-01-01'and entrydate<='2010-01-01';
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
-- 7. 查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01'and gender=2;-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from tb_emp where job=2 or job=3 or job=4;
select * from tb_emp where job in(2,3,4);
-- 9. 查询 姓名 为两个字的员工信息
select * from tb_emp where name like '__';-- 10. 查询 姓 '张' 的员工信息(模糊查找)
select * from tb_emp where name like '张%';
三.分组查询
聚合函数
实例演示:
-- =================== DQL: 分组查询 ======================
-- 聚合函数-- 1. 统计该企业员工数量(总数据量) --count
-- A.count(字段)
select count(id) from tb_emp;
-- B.count(常量)
select count(1) from tb_emp;
-- C.count(*)
select count(*) from tb_emp;
-- 2. 统计该企业员工 ID 的平均值 --avg
select avg(id) from tb_emp;-- 3. 统计该企业最早入职的员工 --min
select min(entrydate) from tb_emp;-- 4. 统计该企业最迟入职的员工 --max
select max(entrydate) from tb_emp;-- 5. 统计该企业员工的 ID 之和 --sum
select sum(id) from tb_emp;
四.分组查询
实例演示:
-- 分组
-- 1. 根据性别分组 , 统计男性和女性员工的数量
-- select [分组字段,聚合函数]
select gender,count(*) from tb_emp group by gender;-- 3. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
select job,count(*) from tb_emp where entrydate<='2015-01-01' group by job having count(*)>=2;
五.排序查询
实例演示:
-- =================== 排序查询 ======================
-- 1. 根据入职时间, 对员工进行升序排序
select * from tb_emp order by entrydate asc;-- 2. 根据入职时间, 对员工进行降序排序
select * from tb_emp order by entrydate desc;-- 3. 根据 入职时间 对公司的员工进行 升序排序 , 入职时间相同 , 再按照 更新时间 进行降序排序
select * from tb_emp order by entrydate,update_time desc;
六.分页查询
实例演示:
-- =================== 分页查询 ======================
-- 1. 从起始索引0开始查询员工数据, 每页展示5条记录
select * from tb_emp limit 0,5;-- 2. 查询 第1页 员工数据, 每页展示5条记录
select * from tb_emp limit 0,5;-- 3. 查询 第2页 员工数据, 每页展示5条记录
select * from tb_emp limit 5,5;-- 4. 查询 第3页 员工数据, 每页展示5条记录
select * from tb_emp limit 10,5;-- 起始索引=(页码-1)*每页的记录数
二.java知识复习
一.java接口
概述:接口技术用于描述类具有什么功能,但并不给出具体实现,当某个类要使用接口时,再去实现接口中的这些方法。类需要遵从接口中描述的统一规则进行定义,所以,接口是对外提供的一组规则,标准。
(接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法.)
接口的实现和定义:
①定义接口要用到关键字interface,格式如下 :
interface 接口名 {
}
②类和接口之间不再是继承关系,而是实现关系,用implements关键字表示。如下 :
class 类名 implements 接口名 {
}
1.接口成员变量的特点 :
接口中没有成员变量,只有公有静态常量。
即默认情况下属性前都会有 public static final 这三个关键字修饰。如下 : public static final 数据类型 常量名 = 常量值;
final修饰的属性必须进行初始化,而对于公有静态常量(public static final),初始化的途径只有两条——①定义时显式初始化;②在静态代码块中初始化。但是很遗憾,接口中不允许存在代码块,而且接口没有构造方法。因此,这就要求我们在接口中定义公有静态常量时,必须在定义时就赋初值
2.接口成员方法的特点 :
①在JDK7.0版本及其之前版本中,接口中仅支持公有的抽象方法:
public abstract 返回值类型 方法名();
Δ事实上,接口中的方法默认就是公有抽象方法,因此在接口中定义抽象方法时,可以省略掉abstract关键字。
②从JDK8.0开始,接口中可以由默认方法和静态方法:
默认方法——public default 返回值类型 方法名() {
}
静态方法——public static 返回值类型 方法名() {
}
Δ需要注意的是,想定义默认方法必须在前面添加default关键字,因为接口中的方法如果你什么都不写,默认是公有的抽象的方法。默认方法可以有方法体,且不需要实现类去实现,其实就是我们平时见到的普通的成员方法。但是默认方法是可以被实现类重写的。default关键字只能在接口中使用,就算实现类要重写默认方法,实现类中重写后的方法也不能添加default修饰符,不然IDEA报错。
③JDK9.0以后,接口中可以有私有方法 :
private 返回值类型 方法名() {
}
3.接口构造方法的特点 :
接口存在的目的是为了规范类,因此接口也不可以被实例化。接口中不允许存在代码块,也没有需要初始化的成员,因此接口没有构造方法(构造器)。
4.接口创建对象的特点 :
①接口不能被实例化 :
只能通过多态的方式实例化“子类”对象(这里的“子类”指的是接口的实现类)
②接口的子类(实现类) :
可以是抽象类,也可以是普通类。
对于抽象实现类,可以不用实现接口的所有方法,因为抽象类本身容许存在抽象方法,语法上是通过的。对于普通实现类,要求实现接口的所有抽象方法。
5.接口继承关系的特点 :
①类和接口之间的关系 :
类与接口是实现关系,支持“多实现”,即一个类可实现多个接口。
②接口与接口之间的关系 :
接口与接口是继承关系,java 支持接口的多继承,即一个接口可以同时继承多个接口,格式如下 : 接口 extends 接口1,接口2,接口3...
③继承和实现的区别 :
继承体现的是“is a”的关系,父类中定义共性内容。
实现体现的是“like a”的关系,父接口中定义扩展内容。