1、泛型
1.1泛型概述
1.2 泛型类
泛型类的定义格式:
- 格式:修饰符 class 类名<类型>{ }
- 范例:public class Generic{ }
此处的T可以随便写,常见的T,E,K,V等形式的参数常用于表示泛型
public class Generator<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public class ObjectDemo1 {
public static void main(String[] args) {
Generator<String> g = new Generator<>();
g.setT("hws");
System.out.println(g.getT());
System.out.println("============");
Generator<Integer> h = new Generator<>();
h.setT(20);
System.out.println(h.getT());
}
}
1.3 泛型方法
泛型方法的定义格式:
- 格式:修饰符<类型> 返回值类型 方法名(类型 变量名){ }
- 范例:Public void testAdd(T t){ }
public class Generator {
public <T> void show(T t){
System.out.println(t);
}
}
public class ObjectDemo1 {
public static void main(String[] args) {
Generator g = new Generator();
g.show("hws");
g.show(123);
}
}
1.4 泛型接口
泛型接口的定义格式
public interface Generic{ }
public class GeneratorTestImpl<T> implements GeneratorTest<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
public interface GeneratorTest<T> {
void show(T t);
}
1.5 类型通配符
1.6 可变参数
可变参数又称为参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
- 格式:修饰符 返回值类型 方法名(数据类型… 变量名){ }
- 范例:public static int sum(int… a){ }
1.7 可变参数的使用
2、MySQL中的DQL
2.1 DQL:查询语句
2.1.1 排序查询
- 语法: select * from 表名 字段名 order by 字串 (有多个条件的话,条件之间加逗号",")
select * from user order by math ASC, english ASC; - 排序方式:
ASC:升序(默认)
DESC:降序 - 注意:
如果有多个排序条件,则当前边的条件一样时,才会判断第二条件
2.1.2 聚合函数
将一列数据作为一个整体,进行纵向的计算
- 1、count : 计算个数
(1)一般选择非空的列:主键
(2)count(*) - 2、sum : 计算和
- 3、avg : 计算平均
- 4、max : 计算最大值
- 5、min : 计算最小值
select count(pwd) from user_info;
select max(pwd) from user_info;
注意: 会排除计算空的值
解决方法: 如果是null的话,替换为0
select count(ifnull(pwd,0)) from user_info;
2.1.3 分组查询
语法: group by 分组字段
注意:
1、分组之后查询的字段:分组字段、聚合函数
2、where 和 having的区别(面试中)
- where在分组之前进行限定,如果不满足条件,则不参与分组;having在分组之后进行限定,如果不满足结果,则不会被查询出来
- where后不可以跟聚合函数,having可以进行聚合函数的判断
Ⅰ、按照性别分组,分别查询男、女同学的数学平均分
select sex , avg(math) from user group by sex;
Ⅱ、按照性别分组,分别查询男、女同学的数学平均分,人数
select sex , avg(math) , count(id) from user group by sex;
Ⅲ、按照性别分组,分别查询男、女同学的数学平均分,人数 要求:数学分数低于90分的不参与分组
select sex , avg(math) from user where math>90 group by sex;
Ⅳ、按照性别分组,分别查询男、女同学的数学平均分,人数 要求:数学分数低于90分的不参与分组,分组之后,人数要大于1人
select sex , avg(math),count(id) from user where math > 90 GROUP BY sex HAVING count(id) > 1;
五、按照性别分组,分别查询男、女同学的数学平均分,人数 要求:数学分数低于90分的不参与分组,分组之后,人数要大于1人 (可以在聚合函数后面加一个别名)
select sex , avg(math) ,count(id) 人数 from user where math > 90 having 人数 > 1;
2.1.4 分页查询
- 1、语法:limit 开始的索引,煤业查询的条数
select * from user LIMIT 0,3; --第一页
select * from user LIMIT 3,3; --第二页
- 2、公示:开始的索引 = (当前的页码 - 1)* 每页显示的条数
- 3、分页操作是一个“方言”,limit在Oracle和sqlsever中不能使用,只在MySQL中用到
2.2 DQL:查询表中的记录
- 1、语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件限定
order by
排序
limit
分页限定 - 2、基础查询:
(1)、多个字段查询:
select 字段名1,字段名2… from 表名;
注意: 如果查询多个字段的话,可以用*来代替字段列表(公司可能不推荐)
SELECT
name, --姓名
age --年龄
FROM
student3; --学生表
(2)、去除重复的结果集
使用DISTINCT 关键字去除重复的值,只有结果完全相同才会去除
SELECT
DISTINCT address
FROM
student3; --学生表
(3)、计算列
一般用四则运算来计算一些列的值
- 使用IFNULL去除计算时候是NULL的值
- IFNULL(表达式1,表达式2):
- 表达式1:哪个字段需要判断是否为null
- 表达式2:该字段为NULL的时候要替换的值
select math,english,math+IFNULL(english,0) from student;
(4)、起别名
使用as ,当然也可以省略
select math,english,math+IFNULL(english,0) 总分 from student;
- 3、条件查询:
(1)、where后面跟条件
(2)、运算符- <、>、<=、>=、=、<>
- BETWEEN…AND
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
SELECT * FROM student WHERE age >= 20 AND age <=30;
* IN(集合)
--查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age IN(22,18,25);
SELECT * FROM student WHERE age = 22 or age = 18 or age = 25;
- LIKE ‘张%’
_:表示单个任意字符
%:表示多个任意字符
--查询姓马的人
SELECT * FROM student WHERE name like "马%";
--查询第二个字是化的人
SELECT * FROM student WHERE name like "_化%";
--查询姓名中有马的人
SELECT * FROM student WHERE name like "%马%";
- IS NULL
NULL值不能使用 = (!=)判断,要用is 判断
SELECT * FROM student WHERE english IS NULL;
SELECT * FROM student WHERE english IS NOT NULL;
- and 或 &&
- or 或 ||
- not 或 !
3、MySQL中的约束
3.1 约束的概念
概念:对表中的数据进行限定,保证数据的正确性、有效性、完整性。
分类:
(1)、主键约束: primary key
(2)、非空约束: not null
(3)、唯一约束: unique
(4)、外键约束: foreign key
3.2 非空约束
1、创建表时添加非空约束
-- 创建一张表
create table stu(
id int,
name varchar(20) not null
);
2、创建完表之后添加非空约束
--添加约束
alter table stu MODIFY name VARCHAR(20) not null;
3、删除非空约束
alter table stu MODIFY name VARCHAR(20);
3.3 唯一约束
(1)、唯一约束: unique,值不能重复
create TABLE stu(
id int,
phone_number VARCHAR(20) UNIQUE
);
注意: mysql中,唯一约束限定的列的值可以有多个NULL
(2)、删除唯一约束:
--不能使用这个语句删除 ALTER table stu MODIFY phone_number VARCHAR(20);
--正确的删除唯一约束的SQL
ALTER table stu drop index phone_number;
(3)、在创建表之后唯一约束:
ALTER table stu MODIFY phone_number VARCHAR(20) UNIQUE;
3.4 主键约束
(1)、注意:
1、含义:非空且唯一
2、一张表只能有一个字段为主键
3、主键就是表中记录的唯一标识
(2)、在创建表时,添加主键约束
CREATE TABLE stu(
id int PRIMARY KEY,
name VARCHAR(20)
);
(3)、删除主键约束
ALTER TABLE stu DROP PRIMARY KEY ;
(4)、创建完表之后,添加主键
ALTER TABLE stu MODIFY id int PRIMARY KEY;
(5)、自动增长
概念: 如果某一列是数值类型的,使用auto_increment 可以来完成值得自动增长,要跟上primary key
--创建自动增长,要和主键一起使用
CREATE table stu(
id int PRIMARY KEY auto_increment,
name VARCHAR(32)
);
--删除自动增长
ALTER TABLE stu MODIFY id INT;
--添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
3.5 外键约束
(1)、在创建表时,可以添加外键
* 语法:
create table 表名(
.....
外键列(最后一列)
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
create table employee(
id int primary key auto_increment,
name varchar(30),
age int,
dep_id int, --外键对应主表的主键
constant emp_dept_pk foregin key (dep_id) references department(id)
);
(2)删除外键
alter table employee drop foreign key emp_depet_pk;
alter table 表名 drop foreign key 外键名称;
(3)创建表之后,添加外键
alter table employee add constants emp_dept_fk foreign key (dep_id) references department(id)
alter table 表名 add constant 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称)
3.6、级联操作
3.6.1 级联更新
添加外键,设置级联更新
on update cascade
* 语法:
create table 表名(
.....
外键列(最后一列)
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
on update cascade;
);
3.6.2 级联删除
on delete cascade
create table 表名(
.....
外键列(最后一列)
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
on delete cascade;
);