MySQL-数据操作语言(DML)详解

CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

🌕博客x主页:不止于梦想 🌕!
🌎文章说明:MySql入门🌎
✅系列专栏:数据库
🌴本篇内容:navicat的使用和MySQL的DML(对所需知识点进行选择阅读呀~)🌴
☕️每日一语:你坚持下来了,而别人坚持不下来,这就是你的资本。 ☕️
🕤作者详情:作者是一名双非大三在校生,喜欢Java,欢迎大家探讨学习,喜欢的话请给博主一个三连鼓励。

概述

  • 本篇文章将开始介绍navicat数据库集成开发工具的使用,注意是使用!!!
  • 本次在SQL语言上,将继续上次的进度,从DQL(数据查询语言)和DML(数据操作语言)开始出发,至于DCL(数据控制语言),暂且不说
  • 总的来说有:DML、DQL、MySQL高级部分的:约束、数据库设计、多表查询和事物。
  • 并完成大量练习,还是那句话,自己多动手,要多复习,每次复习都会有收获的。
  • 上一节链接:MySQL基础之二 | 详解(SQL-DDL)
  • 梦的开始:mysql学习之路一 | 数据库的基本概念和MySQL的安装
  • 请大家成体系的学习。

navicat的使用

概述
  • 这里默认我们都已经安装好了navicat,如果没有安装好,点击上一节链接,博主也是一步一步来的,那也是我的一个小笔记吧,忘了再看看。
使用navicat—建立和MySQL数据库的连接
  • 第一步:点击连接、选择MySQL。你不会找不到吧?找不到就直说吗?我给你标出来嘛

    在这里插入图片描述

  • 第二步:填写连接数据库必要的信息:
    有的人要问填什么了?你想想,你要链接数据库,你填什么呢?
    你要链接哪个数据库你要不要填呢?链接数据库的账户要不要填?要不要填上密码?
    你全都要!!!

    在这里插入图片描述

navicat的基本操作
  • 在这里首先说明一点,虽然我们使用了navicat集成开发工具,但我们并不用它直接创建数据库和表,或者说是在navicat上继续使用SQL语句创建相关的数据库和表,希望我自己和各位朋友一起,大家自己动手,把SQL学会,弄懂。
  • 第一步,我们打开navicat,并且连接上了数据库。那么在哪里创建数据库和表呢?
    • 点击上面命令行的有一个叫工具的东西,别说找不到,学会自己学习。
      在这里插入图片描述
  • 选择打开命令行界面,或者直接F6,也可以打开命令行界面,在这里可以直接写SQL语句的。
  • 例如:创建数据库tbl_student学生表:create database tbl_student;

    在这里插入图片描述

DML(数据操作语言)

概述
  • 为了便于理解,先介绍一下查询语句,查询所有数据的语法是:select * from 表名;不过不推荐在使用查询语句的时候使用 *号,查询效率很低。
  • 用来对数据库中表的数据进行增删改。
  • DML简单理解就对表中数据进行增删改。

在概述内容里,首先我们先设计一个表,然后才能对表中的数据进行增删改,本课程学习黑马视频。如有侵权,联系博主删除。
设计一个学生表student,学生表里的学生有姓名、id、年龄、性别、还有成绩,成绩还分为数学成绩和语文成绩。不用说,年龄是字符串,选择varchar、id选择int、年龄也选择int、性别也是int,1表示男生、0表示女生。成绩当然是选择double了,而且double的整数位有3位,小数位有一位,没谁见过98.55分的吧?或者135.55?

分析完成以后,我们来创建这个表
create table tbl_student(
id int,
name varchar(8),
age int(3),
sex int(1),
math double(4,1),
english double(4,1)
);
在这里插入图片描述

增加数据(insert)
给指定列添加数据
  • INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);表名和字段之前,或者字段和values之前可以没有空格。

    在这里插入图片描述
    在这里插入图片描述

给全部列列添加数据
  • INSERT INTO 表名 VALUES(值1,值2,…);这里要注意,这省略了字段名,所以加值时,要把对应字段全部加上,并且数值类型和字段的数值类型相同,不然就像:

    在这里插入图片描述
    Column count doesn’t match value count at row 1:列计数与第1行的值计数不匹配

给表批量的添加数据
  • INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…; 给指定列批量的添加数据。
  • INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;给全部列批量的添加数据。
    分别做这两个练习,博主写博客的时候也是当作练习的,不是复制粘贴,还是那句话,多多自己动手。
    指定字段:
    在这里插入图片描述
    全部字段:
    在这里插入图片描述

结果:
在这里插入图片描述

修改表数据
  • 使用语句:update(修改) …set …
  • 语法:UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;
  • 注意:

1.修改语句中如果不加条件,则将所有数据都修改!
2. 像上面的语句中的中括号,表示在写sql语句中可以省略这部分。

例如不加调价,还是使用我们上面的数据,把码运改为嘛晕,大家自己练习,我也自己练。
代码:update tbl_student set name=‘嘛晕’;
在这里插入图片描述

修改表数据
  • 语法为:DELETE FROM 表名 [WHERE 条件] ;
  • 例如刚才表里已经权力嘛晕了,表里面全是重复数据,就选择一个age=100的嘛晕吧,记住条件要是独有的。
  • 语句为delete from tbl_student where age=100;可以看到已经删除成功了。
    在这里插入图片描述

DML(数据查询语言)

概述
  • DML是数据查询语言,查询语言又分为基础查询、条件查询、排序查询、分组查询、分页查询、多表联查,在中间还要学习一个聚合函数。
  • 首先是这个DML即数据查询语言十分重要,在以后的工作中,百分之九十左右都是进行各种查询操作。所以大家包括我自己,都要认真对待这个模块。
基础查询
  • 语法:SELECT 字段列表 FROM 表名;

  • 查询所有字段:SELECT * FROM 表名;不过不建议使用 号,要查所有字段,就把所有字段打上。在以后工作中,有的公司是严令禁止使用号的。

  • 这里演示一个两种方法,即*号和自己写所有字段名。

  • 不知道有什么字段的可以使用desc查询表结构。

    在这里插入图片描述
    这里是查询全部字段、也可以查询单个或者多个字段。

  • 查询多个或者单个字段

    上面的例子看到了各个name都是嘛晕,查询单个、多个字段肯定条件不能选择name了;我们看到age字段有不同的,选择查一下age=null,age=2的人。
    在这里插入图片描述
    注意到查询当age=null时候,显示为空,但是我们明明看到了有一个为null的,怎么回事呢?
    查看资料大概是这样:在其它的语言中,逻辑表达式只有两种,要么是true,要么就是false。而sql中却存在第三个逻辑表达式UnKnown,这个是sql中特有的。从字面意思上我们可以解理该值的意思是:什么都不知道,就是什么都不是。一般情况下我们将任何值(包括NULL本身)与NULL做比较的时候,都会返回UnKnown。而在查询表达式中(比如where与having中),UnKnown会视为false。所以我们就明白了为什么select * from 表 where 字段=null查不到正确的结果的原因了。

条件查询
  • 其实我们上面已经用过了,就是使用where作为条件判断。
  • 语法为:SELECT 字段列表 FROM 表名 WHERE 条件列表;
  • 值得注意的是条件查询,查询的条件要具有识别性,像上面那张学生表,name字段全是嘛晕,查一个就出来全部,这样的查询是没有意义的。我们选择age=2作为条件查询。

    在这里插入图片描述

模糊查询
  • 使用关键词:like
  • 语法为:select * from new_student where name like ‘运’;
  • 可以使用通配符进行占位:

(1)_ : 代表单个任意字符

(2)% : 代表任意个数字符

  • 为了便于理解和我自己的练习,我新建一张表new_student,表中字段有学号、姓名、年龄、性别和英语成绩。
  • create table new_student(
  • id int(8),
  • name varchar(8),
  • age int(3),
  • sex int(1),
  • english double(4,1)
  • );

使用上面学过的知识,依次添加多个元数据(多个字段)。
insert into new_student values (1,‘嘛化疼’,3,1,50.5),(2,‘码运’,4,1,45.5),(3,‘铠甲勇士’,3,0,50.5);

在这里插入图片描述
在这里插入图片描述

  • 为了锻炼自己,我们在把嘛化疼,改为码化疼。

  • update new_student set name=‘码化疼’ where name=‘嘛化疼’;

    在这里插入图片描述

  • 接下来进行模糊插叙,使用通配符_

    • (1)_ : 代表单个任意字符,什么意思呢?就是说在select * from new_student where name like '马%'中的 ‘运’可以加通配符,加在运前面,即’_运’就表示运前面查询运且前面有一位数字的name,至于运后面有什么不用管。如select * from new_student where name like ‘_运’;

      在这里插入图片描述

  • % : 代表任意个数字符,相信大家也都可以理解这个了,简单解释一下就是‘%运’就是以运结尾,前面有什么数字不管,’%运%'表示只要包含了运即可,前后有什么不用管,什么只有运也行,'运%'表示以运开头就行,后面有什么也不用管。

排序查询
  • 使用命令order by

  • 语法:SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;

  • 上述语句中的排序方式有两种,分别是:

  • ASC : 升序排列 (默认值)

  • DESC : 降序排列

举例:我们按照英语成绩给以上几位同学排序,默认是升序,那我们就整一个降序,叛逆期!!!!
select id,name,age,sex,english from new_student order by english desc;
在这里插入图片描述
可以看到已经排好了,但是码化疼同学的成绩跟铠甲勇士同学明明一样,为什么铠甲勇士在下面,铠甲勇士很不服。那怎么办,加个数学成绩呗,铠甲勇士同学数学好,次次90多,化疼不学好,次次不及格。给60
这里我自己练过了,大家自己动手操作,说明一下:大家也都看到了上面的排序查询是可以跟多个字段的,意思就是当第一个字段值相同时,又对两个相同的进行第二个字段方式的排序。

聚合函数
  • 聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据。

  • 常用的聚合函数:

    count(col): 表示求指定列的总行数
    max(col): 表示求指定列的最大值
    min(col): 表示求指定列的最小值
    sum(col): 表示求指定列的和
    avg(col): 表示求指定列的平均值
    在这里插入图片描述
    语法:SELECT 聚合函数名(列名) FROM 表;
    注意:注意:null 值不参与所有聚合函数运算

  • 练习:
    1、统计上面学生表中一共有多少个学生?
    select count(id) from new_student;
    在这里插入图片描述
    当然了,也可以使用其他字段,比如name,但是要注意的是使用的字段不能有null的,null不参与运算,统计不了总人数。

    2、查询学生中英语最高分?
    select max(english) from new_student;
    在这里插入图片描述

  • 相应的就根据语法格式进行练习,主要是学会方法。

分组查询
  • 使用group by分组;
  • 语法:SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
  • 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。举个例子就是:select name, sex, avg(english) from new_student group by sex; – 这里查询name字段就没有任何意义!!!
  • 这里我新建了一个stu表。进行练习。

    在这里插入图片描述

1、查询男同学和女同学各自的数学平均分。
select sex,avg(math) from stu group by sex;
在这里插入图片描述
2、查询男同学和女同学各自的数学平均分,以及各自人数。
select sex,avg(math),count(sex) from stu group by sex;
在这里插入图片描述
3、查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组。
select sex,avg(math),count(sex) from stu where math>70 group by sex ;
在这里插入图片描述
4、查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的。显然这里没有人数大于2的,查询结果应该为空。
select sex,avg(math),count(sex) from stu where math>70 group by sex having count(*)>2;
在这里插入图片描述
couont(*)表示查询字段的总数。
where 和 having 区别:

  • 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。

  • 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。

分页查询
  • 相信分页在现实生活中用的很多,不信?打开百度看看。
  • 命令:limit
  • 语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
  • 注意:起始索引是从0开始的

练习:
1、从0开始查询,查询3条数据
select * from stu limit 0,3;
在这里插入图片描述
2、每页显示3条数据,查询第2页数据
select * from stu limit 3,3;
在这里插入图片描述
从上面的练习推导出起始索引计算公式:
起始索引 = (当前页码 - 1) * 每页显示的条数

总结

带颜色的是重点,标记出来了。多动手多实践。

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_63992577

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

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

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

打赏作者

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

抵扣说明:

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

余额充值