《遇见狂神说》MySQL从入门到删库(一)

– 插入数据(添加)

insert into 表名([字段名1,字段2,字段3]) values(‘值1’),(‘值2’),(‘值3’);

注意

  • 字段或值之间用英文逗号隔开

  • 可同时插入多条数据,values 后用英文逗号隔开

  • 由于主键自增我们可以省略(如果不写表的字段,它就会一一匹配)

  • 一般写插入语句,我们一定要数据和字段一一对应!

  • 字段是可以省略的,但是后面的值必须要一一对应

– 向grade表中的gradename字段插入

insert into grade(gradename) values(‘大四’);

– 插入多个字段

insert into grade(gradename)

values(‘大二’),(‘大一’);

– 数据和字段一一对应!

insert into student(name,pwd,sex) values(‘张三’,‘aaaa’,‘男’);

2.4 修改


update

语法

update 表名 set colnum_name = value,[…] where [条件]

注意事项

  1. colnum_name 是数据库的列,尽量带上``

  2. 条件,筛选的条件,如果没有指定,则会修改所有的列

  3. value ,是一个具体的值,也可以是一个变量

  4. 多个设置的属性之间,使用英文逗号隔开

update student set name=‘狂神’ where id = 1;

– 不指定条件的情况下,会改动所有表!

update student set name=‘长江7号’;

– 修改多个属性

update student set name=‘狂神’,email=‘12123@qq.com’ where id between 2 and 5;

– 通过多个条件定位数据

update student set name=‘长江7号’ where name=‘狂神’ and sex=‘男’;

| 操作符 | 含义 | 范围 | 结果 |

| — | — | — | — |

| = | 等于 | 5=6 | false |

| <>或 != | 不等于 | 5<>6 | true |

| > | 大于 | | |

| < | 小于 | | |

| <= | 小于等于 | | |

| >= | 大于等于 | | |

| between…and… | 在某个范围内 | [2,5] | |

| and | && | 5>1 and 1>2 | false |

| or | || | 5>1or 1>2 | true |

2.5 删除


delete 命令

语法: delete from 表名 [where 条件]

– 删除数据,如不指定条件则删除该表的所有列数据

delete from student;

– 删除指定数据

delete from student where id = 1;

truncate 命令

作用: 完全清空一个数据库表,表的结构和索引约束不会变

– 清空student 表

truncate student;

delete 和 truncate 区别

  • 相同点: 都能删除数据,都不会删除表结构,但truncate速度更快

  • 不同点

  • truncate 重新设置 自增列,计数器会归零

  • truncate 不会影响事务

3. DQL 查询数据(最重点)

===================================================================================

3.1DQL


(Date Query Language): 数据查询语言

  • 所有的查询操作都用它 ,select

  • 简单 和 复杂的查询都能做

  • 数据库中最核心的语言,最重要的语句

3.2Select语句


基本语法select 字段 from 表

– 查询全部学生

select * from student;

– 查询指定字段

select StudentNo,StudentName from student;

AS子句作为别名

作用:

  • 可给数据列取一个新别名

  • 可给表取一个新别名

  • 也可以给查询结果取一个新别名

– 别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名(AS关键词可以省略)

select StudentNo As 学号,StudentName AS 学生姓名 from student AS S

– 函数 拼接字符串Concat(a,b)

select concat(‘姓名’,StudentName) AS 新名字 from student

语法: SELECT 字段1,字段2,..... FROM 表

3.3去重distinct


作用:去掉 select 查询返回的记录结果中重复的记录(返回所有列的值都相同),只返回一条

– 查询一下有哪些同学参加了考试,成绩

select * from result; – 查询全部的考试成绩

select StudentNo from result; – 查询有哪些同学参加了考试

select distinct StudentNo from result; – 发现重复数据,去重

数据库的列(表达式)

  • select 表达式 from 表

  • 数据库中的表达式: 文本值 ,列 , Null ,函数 , 计算表达式 , 系统变量

select version() – 查询系统版本(函数)

select 100*3-1 AS 计算结果 – 用来计算(表达式)

select @@auto_increment_increment – 查询自增的步长(变量)

– 学员考试成绩 + 1 查看

select StudentNo,StudentResult + 1 AS ‘提分后’ from result;

3.4where条件子句


作用: 检索数据中符合条件的值

搜索的条件由一个或者多个表达式组成,结果为布尔值!

逻辑运算符

| 运算符 | 语法 | 描述 |

| — | — | — |

| and && | a and b a&&b | 逻辑与,两个都为真,结果为真 |

| or || | a or b a || b | 逻辑或,其中一个为真,则结果为真 |

| Not ! | not a !a | 逻辑非,真为假,假为真 |

尽量使用英文字母

– 查询考试成绩在 95 ~ 100分之间的

select studentNo,StudentResult

from result

where StudentResult>=95 and StudentResult<=100

3.5模糊查询


模糊查询:比较运算符

| 运算符 | 语法 | 描述 |

| — | — | — |

| is null | a is null | 如果操作符为null,结果为真 |

| is not null | a is not null | 如果操作符不为null,结果为真 |

| between | a between and c | 若a在b和c之间,则结果为真 |

| like | a like b | SQL匹配,如果a匹配b,则结果为真 |

| in | a in(a1,a2,a3…) | 假设a在a1或者a2…,则结果为真 |

– 除了1000号同学,要其他同学的成绩

SELECT studentno,studentresult

FROM result

WHERE studentno!=1000;

– 使用NOT

SELECT studentno,studentresult

FROM result

WHERE NOT studentno=1000;

– 查询 1001,1002,1003号学员

select Sno,Sname

from student

where Sno in (1001,1002,1003);

– 查询在北京的学生

select Sno,Sname

from student

where Address in (‘安徽’,‘河南洛阳’);

– 查询姓刘的同学的学号及姓名

– like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘刘%’;

– 查询姓刘的同学,后面只有两个字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘刘__’;

– 查询姓名中含有 嘉 字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘%嘉%’;

– 查询出生日期没有填写的同学

– 不能直接写=NULL , 这是代表错误的 , 用 is null

SELECT studentname FROM student

WHERE BornDate IS NULL;

– 查询出生日期填写的同学

SELECT studentname FROM student

WHERE BornDate IS NOT NULL;

– 查询没有写家庭住址的同学(空字符串不等于null)

SELECT studentname FROM student

WHERE Address=‘’ OR Address IS NULL;

  • 注意: % _只能在like里面使用

  • in 里面是确切的集合

3.6连接查询


  • 内连接inner join :查询两个表中的结果集中的交集

  • 左外连接left join:以左表为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充

  • 右外连接right join:以右表为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充

数据库的搭建如下:

  • 创建一个school数据库

  • 创建学生表student

  • 创建年级表grade

  • 创建科目表subject

  • 创建成绩表result

– 创建一个school数据库

CREATE DATABASE IF NOT EXISTS school;

– 创建学生表

CREATE TABLE IF NOT EXISTS student(

studentno INT(4) NOT NULL COMMENT ‘学号’,

loginpwd VARCHAR(20) DEFAULT NULL,

studentname VARCHAR(20) DEFAULT NULL COMMENT ‘学生姓名’,

sex TINYINT(1) DEFAULT NULL COMMENT ‘性别,0或1’,

gradeid INT(11) DEFAULT NULL COMMENT ‘年级编号’,

phone VARCHAR(50) NOT NULL COMMENT ‘联系电话,允许为空’,

address VARCHAR(255) NOT NULL COMMENT ‘地址,允许为空’,

borndate DATETIME DEFAULT NULL COMMENT ‘出生时间’,

email VARCHAR (50) NOT NULL COMMENT ‘邮箱账号允许为空’,

identitycard VARCHAR(18) DEFAULT NULL COMMENT ‘身份证号’,

PRIMARY KEY (studentno),

UNIQUE KEY identitycard(identitycard),

KEY email (email)

)ENGINE=MYISAM DEFAULT CHARSET=utf8;

– 创建年级表

CREATE TABLE IF NOT EXISTS grade(

gradeid INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘年级编号’,

gradename VARCHAR(50) NOT NULL COMMENT ‘年级名称’,

PRIMARY KEY (gradeid)

) ENGINE=INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;

– 创建科目表

CREATE TABLE IF NOT EXISTS subject(

subjectnoINT(11) NOT NULL AUTO_INCREMENT COMMENT ‘课程编号’,

subjectname VARCHAR(50) DEFAULT NULL COMMENT ‘课程名称’,

classhour INT(4) DEFAULT NULL COMMENT ‘学时’,

gradeid INT(4) DEFAULT NULL COMMENT ‘年级编号’,

PRIMARY KEY (subjectno)

)ENGINE = INNODB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8;

– 创建成绩表

CREATE TABLE IF NOT EXISTS result(

studentno INT(4) NOT NULL COMMENT ‘学号’,

subjectno INT(4) NOT NULL COMMENT ‘课程编号’,

examdate DATETIME NOT NULL COMMENT ‘考试日期’,

studentresult INT (4) NOT NULL COMMENT ‘考试成绩’,

KEY subjectno (subjectno)

)ENGINE = INNODB DEFAULT CHARSET = utf8;

JOIN 对比

在这里插入图片描述

inner join

  • 分析查询的字段来自哪些表 (来自两个表就用连接查询)

  • 确定交叉点(这两个表中哪个数据是相同的)

  • 判断条件: 学生表中的 studentNo = 成绩表中的 studentNo

在这里插入图片描述

查询参加了考试的同学的学号,姓名,科目编号,分数

  1. 学号,姓名 studentNo,studentName 在student表中

  2. 科目编号,分数 SubjectNo,StudentResult 在result表中

  3. 两个表中 studentNo 是相同的

select t1.studentNo,studentName,SubjectNo,StudentResult

from student as t1

inner join result as t2

– 既在student表里查,student表连接result,

– 两个表连起来,都有studentNo,所以要指向一个表的studentNo查

on t1.studentNo = t2.studentNo;

right join

select t1.studentNo,studentName,SubjectNo,StudentResult

from student t1

right join result t2

on t1.studentNo = t2.studentNo;

left join

select t1.studentNo,studentName,SubjectNo,StudentResult

from student t1

left join result t2

on t1.studentNo = t2.studentNo;

  • 左表是 student,先从 student里面查学生学号,学生姓名

  • 即使右表result表中没有和学生学号,学生姓名匹配的科目编号,分数

  • 也会返回所有的值,只是科目编号、分数为null

| studentNo | studentName | SubjectNo | StudentResult |

| — | — | — | — |

| 1001 | 孙大圣 | null | null |

3.7总结与区别


| 操作 | 描述 | |

| — | — | — |

| inner join | 如果表中至少有一个匹配,就返回行 | |

| left join | 会从左表中返回所有的值,即使右表中没有匹配 | |

| right join | 会从右表中返回所有的值,即使左表中没有匹配 | |

– 查询缺考的同学

select t1.studentNo,studentName,SubjectNo,StudentResult

from student t1

left join result t2

on t1.studentNo = t2.studentNo

where StudentResult = null;

– 查询了参加考试的同学信息: 学号,学生姓名,科目名,考试成绩

– 1.学号,学生姓名 student表

– 2.科目名 subject表

– 3.分数 result表

– 具体实现

select t1.studentNo,studentName,SubjectName,StudentResult

from student t1

right join result t2

on t1.studentNo = t2.studentNo

– 查询考试的信息,要以考试那张表去连,左连就是以左边的表为基准

– 再在上面所查询的结果中连接第三张表

inner join subject t3

on t2.SubjectNo = t3.SubjectNo;

语法

  • join(连接的表) on(判断条件) 连接查询

  • where 等值查询

3.8自连接(了解)


数据库建立:

  • 创建分类表

  • 在分类表中插入数据

– 创建分类表

CREATE TABLE IF NOT EXISTS category (

categoryid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘主题ID’,

pid INT(10) NOT NULL COMMENT ‘父ID’,

categoryName VARCHAR(50) NOT NULL COMMENT ‘主题名字’,

PRIMARY KEY(categoryid)

) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET = utf8;

– 在分类表中插入

INSERT INTO category(categoryid,pid,categoryName)

VALUES

(2,1,‘信息技术’),

(3,1,‘软件开发’),

(4,3,‘数据库’),

(5,1,‘美术设计’),

(6,3,‘web开发’),

(7,5,‘PS技术’),

(8,2,‘办公信息’);

在这里插入图片描述


  • 自己的表和自己的表连接,一张表拆为两张一样的表即可

父类

| categoryid | categoryName |

| — | — |

| 2 | 信息技术 |

| 3 | 软件开发 |

| 5 | 美术设计 |

子类

| pid | categoryid | categoryName |

| — | — | — |

| 3 | 4 | 数据库 |

| 2 | 8 | 办公信息 |

| 3 | 6 | web开发 |

| 5 | 7 | ps技术 |

解释:数据库的pid是3,说明数据库在软件开发下,数据库自己的分类idcategoryid是4

操作:查询父类对应的子类关系

| 父类 | 子类 |

| — | — |

| 信息技术 | 办公信息 |

| 软件开发 | 数据库 |

| 软件开发 | web开发 |

| 美术设计 | ps技术 |

查询父类对应的子类关系

select a.categoryName AS ‘父栏目’,b.categoryName AS ‘子栏目’

from category AS a,category AS b

where a.categoryid = b.pid;

在这里插入图片描述

3.9分页和排序


  • 分页 limit

  • 排序 order by

  • 升序:ASC

  • 降序:DESC


排序语法: order by 通过哪个字段排序 怎么排

– 通过科目成绩升序排列

order by StudentResult ASC;


分页语法

  • 完整语法:limit 起始下标,页面的大小

  • 缺省语法:limit 5 这是取前5

  • 注意:mysql当中limitorder by之后执行!!

  • 第一页 ,显示5条数据

limit 0,5;

  • 第二页 ,显示5条数据

limit 5,5;

  • 第三页

limit 10,5;

  • 第n页

limit(n-1) * pageSize,pageSize

  • pageSize:页面大小

  • (n-1) * pageSize: 起始值

  • 数据总数/页面大小 = 总页数

例题:

查询JAVA第一学年课程成绩排名前十的学生,并且分数要大于80的学生信息(学号,姓名,课程名称,考试成绩)

  • 学号,姓名 ➡ 在student表

  • 课程名称 ➡ 在subject表

  • 考试成绩 ➡ 在result表

select t1.studentNo,StudentName,SubjectName,StudentResult

from student t1

inner join result t2

on t1.StudentNo = t2.StudentNo

inner join subject t3

on t3.SubjectNo = t2.SubjectNo

where SubjectName = ‘JAVA第一学年’ and StudentResult >= 80;

order by studentResult DESC

limit 0,10;

4.MySQL函数

===========================================================================

4.1常用函数(了解)


  1. 数学运算

– 数学运算

select ABS(-8); – 绝对值8

select celiling(9.4) – 向上取整 10

select floor(9.4) – 向下取整 9

select rand() – 返回一个 0~1 之间的随机数

select sing(10) – 判断一个数的符号 0返回0 负数返回-1,正数返回1

  1. 字符串函数

– 字符串函数

select char_length(‘即使再小的帆也能远航’) – 字符串长度 10

select concat(‘我’,‘要’,‘加油’) – 拼接字符串

select lower(‘KUANG’) – 转小写

select upper(‘kuang’) – 转大写

select instr(‘kuangshen’,‘h’) – 返回第一次出现的子串的索引

select replace(‘坚持就能成功’,‘坚持’,‘努力’) – 替换出现的指定字符串

select substr(‘坚持就能成功’,2,3) – 返回指定的字符串(源字符串,截取的位置,截取的长度)

select reverse(‘Hello’) – 反转字符串

  1. 时间和日期函数(记住)

– 时间和日期函数(记住)

select current_data() – 获取当前日期

select curdate() – 获取当前日期

select now() – 获取当前的时间

select localtime() – 本地时间

select sysdate() – 系统时间

select year(now()) – 年

select month(now()) – 月

select day(nowue()) – 日

4.2聚合函数


| 函数名称 | 描述 |

| — | — |

| COUNT() | 返回满足Select条件的记录总和数 |

| SUM() | 返回数字字段或表达式列作统计,返回一列的总和 |

| AVG() | 通常为数值字段或表达列作统计,返回一列的平均值 |

| MAX() | 可以为数值字段,字符字段或表达式列作统计,返回最大的值 |

| MIN() | 可以为数值字段,字符字段或表达式列作统计,返回最小的值 |

– count(指定列/字段)

select count(Studentname) from student;

– count(*)

select count(*) from student;

– count(1) 推荐

select count(1) from student;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
回数字字段或表达式列作统计,返回一列的总和 |

| AVG() | 通常为数值字段或表达列作统计,返回一列的平均值 |

| MAX() | 可以为数值字段,字符字段或表达式列作统计,返回最大的值 |

| MIN() | 可以为数值字段,字符字段或表达式列作统计,返回最小的值 |

– count(指定列/字段)

select count(Studentname) from student;

– count(*)

select count(*) from student;

– count(1) 推荐

select count(1) from student;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-AfXOPSWW-1712230301938)]

[外链图片转存中…(img-gkf0KTf3-1712230301939)]

[外链图片转存中…(img-uvrSA68s-1712230301939)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

[外链图片转存中…(img-BfMAAcBp-1712230301939)]

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值