Java回顾(八)泛型和DQL中的查询语句、MySQL的约束

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;
	);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐形的稻草人HWS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值