Java最新一文帮你玩转MySQL表---增,删,查,改(进阶),不同层级的Java开发者的不同行为

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

name varchar(10),

sex varchar(1),

age int

);

1.3 UNIQUE 唯一约束


指定id列为唯一的,不重复:

drop table if exists student;

create table student(

id int UNIQUE, --id为唯一的

name varchar(10),

sex varchar(1),

age int

);

1.4 DEFAULT 默认值约束


指定插入数据时,如果name列为空,则将默认值设为unkown:

drop table if exists student;

create table student(

id int UNIQUE,

name varchar(10) DEFAULT ‘unkown’,

sex varchar(1),

age int

);

1.5 PRIMARY KEY 主键约束


指定id列为主键:

drop table if exists student;

create table student(

id int PRIMARY KEY,

name varchar(10) DEFAULT ‘unkown’,

sex varchar(1),

age int

);

对于整数类型的主键,常搭配自增长auto_increment来使用,插入数据对应字段不给值,使用最大值+1

id int PRIMARY KEY auto_increment,

1.6 FOREIGN KEY 外键约束


外键用于关联其他表的主键或唯一值

语法:

foreign key (字段名) references 主表(列);

示例:

创建班级表:

– 创建班级表

drop table if exists classes;

create table classes(

id int primary key auto_increment,

name varchar(20)

);

创建学生表,一个学生对应一个班级,一个班级对应多个学生,id为主键,classes_id为外键,关联班级表id:

– 创建学生表来关联班级表

drop table if exists student;

create table student(

id int PRIMARY KEY,

name varchar(10) DEFAULT ‘unkown’,

sex varchar(1),

classes_id int,

foreign key (classes_id) references classes(id)

);

1.7 CHECK约束(了解)


MySQL使用时不报错,但忽略该约束:

create table test_user (

id int,

name varchar(10),

sex varchar(1),

check (sex = ‘男’ or sex = ‘女’)

);

2. 表的设计

========

三大范式:

一对一:

一对多:

多对多:

创建课程表:

drop table if exists course;

create table course (

id int primary key auto_increment,

name varchar(20)

);

创建学生课程中间表,考试成绩表:

drop table if exists score;

create table score (

id int primary key auto_increment,

score decimal(3,1),

student_id int,

course_id int,

foreign key (student_id) references student(id),

foreign key (course_id) references course(id)

);

3. 新增

======

插入查询的结果

语法:

INSERT INTO table_name [(column [, column …])] SELECT …

示例:

新建一张user表:

create table user (

id int primary key auto_increment,

name varchar(10),

sex varchar(1),

age int,

email varchar(20)

);

将学生表的数据复制到user表中:

insert into user (name,sex,age) select name,sex,age from student;

4. 查询

======

4.1 聚合查询


4.1.1 聚合函数

常见的统计总数,计算平均值等操作,可以使用聚合查询来实现,常见的聚合函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的数量
SUM([DISTINCT] expr)返回查询到的数据的总和
AVG([DISTINCT] expr)返回查询到的数据的平均值
MAX([DISTINCT] expr)返回查询到的数据的最大值
MIN([DISTINCT] expr)返回查询到的数据的最小值

示例:

· COUNT

– 统计班级有多少个同学

select count(*) from student;

select count(0) from student;

· SUM

– 统计学生的数学总成绩

select sum(math) from student_score;

– 统计不及格学生的数学总成绩

select sum(math) from student_score where math<60;

· AVG

– 统计平均总分

select avg(chinese+math+english) from student_score;

· MAX

– 找出英语的最高成绩

select max(english) from student_score;

· MIN

– 找出语文的最低成绩

select min(chinese) from student_score;

4.1.2 GROUP BY

select中使用group by子句可以对指定列进行分组查询,需要满足:使用group by 进行分组查询时,select指定的字段必须是“分组依据字段”,其他字段要想出现在select中必须包含在聚合函数中

语法:

select column1, sum(column2), … from table group by column1,column3;

案例表:

create table emp (

id int primary key auto_increment,

name varchar(10),

role varchar(10) comment ‘角色’,

salary decimal(10,2) comment ‘薪资’

);

insert into emp (name,role,salary) values

(‘小王’,‘员工’,3000.50),

(‘小贺’,‘老板’,200000.00),

(‘小张’,‘秘书’,15000),

(‘小方’,‘保洁员’,3000),

(‘小乔’,‘员工’,4500.20),

(‘小李’,‘员工’,5000.28);

查询每个角色的最高工资,最低工资和平均工资:

select role,max(salary),min(salary),avg(salary) from emp group by role;

结果:

4.1.3 HAVING

GROUP BY子句进行分组后,如果要对分组后的结果进行条件过滤不能使用WHERE,要使用HAVING语句。

示例:显示平均工资低于4000的角色,和他的平均工资:

select role,avg(salary) from emp group by role having avg(salary)<4000;

结果:

4.2 联合查询


先将后续用到的表和数据给出:班级表,学生表,课程表,分数表

drop table if exists classes;

create table classes (

id int primary key auto_increment,

name varchar(20)

);

insert into classes (name) values

(‘计算机1班’),

(‘自动化2班’),

(‘机械3班’);

drop table if exists student;

create table student (

id int primary key auto_increment,

name varchar(10),

classes_id int,

foreign key (classes_id) references classes(id)

);

insert into student (name,classes_id) values

(‘小花’,2),

(‘小张’,1),

(‘小贺’,1),

(‘小方’,3),

(‘小乔’,3);

drop table if exists course;

create table course (

id int primary key auto_increment,

name varchar(20)

);

insert into course (name) values

(‘java程序设计’),

(‘大学英语’),

(‘高等数学’),

(‘数据结构’),

(‘工程制图’);

drop table if exists score;

create table score (

id int primary key auto_increment,

score decimal(3,1),

student_id int,

course_id int,

foreign key (student_id) references student(id),

foreign key (course_id) references course(id)

);

insert into score (score,student_id,course_id) values

– 小花

(98.5,1,3),(80,1,5),

– 小张

(99,2,1),(95,2,2),(96,2,3),(90,2,4),(93,2,5),

– 小贺

(85,3,1),(86,3,2),(86,3,3),(95,3,4),

– 小方

(70,4,3),(65,4,5),

– 小乔

(65,5,5),(67,5,3),(68,5,2);

实际的开发中,数据来自不同的表,这时候需要多张表联合查询,多表查询是对多张表的数据取笛卡尔积

笛卡尔积:

注意:关联查询可以对关联表使用别名

4.2.1 内连接

语法:

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;

select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

示例:查询“小张”同学的成绩:

select

stu.id,

stu.name,

sco.score

from

student stu

join score sco on stu.id = sco.student_id

and stu.name=‘小张’;

结果:

示例:查询所有同学的总成绩,及同学的个人信息:

select

stu.id,

stu.name,

sum(sco.score)

from

student stu

join score sco on stu.id = sco.student_id

group by

stu.id;

结果:

示例:查询所有同学的成绩,及同学的个人信息:

select

最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

image

除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

join score sco on stu.id = sco.student_id

group by

stu.id;

结果:

示例:查询所有同学的成绩,及同学的个人信息:

select

最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

[外链图片转存中…(img-9nEUpN9k-1715421323087)]

除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
熵 (Entropy) 是信息论中的一个概念,用来衡量随机变量的不确定性。在机器学习中,我们通常使用交叉熵 (Cross-Entropy) 作为损失函数,用来衡量模型预测结果与实际结果之间的差异。 以下是一些关于熵和交叉熵的基本概念和公式。 ## 熵 (Entropy) 熵是一个概率分布的度量,它示随机变量的不确定性。对于一个离散的随机变量 $X$,其熵的数学定义为: $$H(X)=-\sum_{x\in X}p(x)\log_2p(x)$$ 其中,$p(x)$ 示随机变量 $X$ 取值为 $x$ 的概率,$\log_2$ 示以 2 为底的对数。 可以看出,当 $p(x)$ 的分布越均匀(即所有 $x$ 的概率都相等)时,熵的值最大,达到 $H(X)=\log_2|X|$;当 $p(x)$ 的分布越集中在某些特定的取值上时,熵的值越小。 ## 交叉熵 (Cross-Entropy) 交叉熵是用来衡量模型预测结果与实际结果之间的差异的一种损失函数。对于一个离散的随机变量 $Y$,其真实分布为 $p(Y)$,模型预测的分布为 $q(Y)$,则交叉熵的数学定义为: $$H(p,q)=-\sum_{y\in Y}p(y)\log_2q(y)$$ 可以看出,当模型的预测结果与真实结果越接近时,交叉熵的值越小。 ## 交叉熵在机器学习中的应用 在机器学习中,我们通常使用交叉熵作为分类模型的损失函数。对于一个分类问题,我们需要将输入 $x$ 分类到 $k$ 个类别中的一个,并且每个类别都对应一个概率值 $p_i$,示输入 $x$ 属于第 $i$ 个类别的概率。设模型的预测结果为 $q_1,q_2,...,q_k$,示输入 $x$ 属于每个类别的概率预测值,则其交叉熵的数学定义为: $$H(p,q)=-\sum_{i=1}^kp_i\log_2q_i$$ 我们的目标是最小化交叉熵,使得模型的预测结果尽可能接近真实结果,从而提高模型的准确率。 以上就是关于熵和交叉熵的基本概念和公式,希望能对你有所助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值