目录
表数据的CURD
1.新增数据
1) 单行插入
2) 单行全列插入
3) 多行某几列插入
4) 多行全列插入
2. 查询数据
全列全行查找
1) 查找指定列
2) 查询字段为表达式
3) 给查询结果起别名
4) 去重查询得到去重处理后的结果distinct
5) 按照结果集排序 order by 可以使用别名
6) 分页查询 limit
7) ****条件查询****where语句(重点)
7.1) 查询所有总成绩>200的同学姓名和他们的总成绩
7.2) where分支中不支持别名
7.3) MySQL的null不包含在 < <= 的条件中,null = null也不支持
7.4) 区间查询: between...and...
7.5) 包含查询in
7.6) 模糊查询 like
3. 修改表数据
1) 修改一行—列
2) 修改一行多列
3) 修改多行数据
4) 若update语句不带where条件,则该属性的所有行都受影响
4. 删除表数据
1) 删除名字叫空的这一条学生记录
2) 若此时不加where条件,则全表删除
全表删除
CURD(Create Update Retrieve Delete)
对于表中数据的增删改查在每—行上进行操作~
insert into tb_name(属性名称...) values(属性值...);
1) 单行插入
2) 单行全列插入
在插入时表名之后没有指定列名,默认为需要单行全列插入
注意:若列有三列,values括号中只有两个数据,此时全列插入会报错。
全列插入数据个数必须严格等于列的个数,否则报错,不会使用null占位。
正确写法
3) 多行某几列插入
4) 多行全列插入
ExamResult根据名称映射
MySQL中表、数据库、属性名称,统一使用全小写+下划线分隔,不要使用驼峰名称。
全列全行查找
select * from tb_name;
1) 查找指定列
select 列名称 from tb_name;
select得到的数据,以二维表格的形式展示数据。这个表格是一张临时表,不会存储到具体的硬盘中。
2) 查询字段为表达式
a. 查询所有(学生姓名,语文成绩+10)的结果,此时不会真的给数据+10,只在当前展示有效。
b. 查询学生姓名以及总成绩
3) 给查询结果起别名
刚才结果直接以表达式展示的,不美观,意义不明确,可以给查询结果起别名~
select 列名 as 新名词 from tb_name;
4) 去重查询得到去重处理后的结果distinct
select distinct 列名称 from tb_name;
若要查询多列结果,包含distinct关键字的话,去重查询必须放在第一列,且后面属性默认也会进行去重处理。
select dinstinct 列名称1,列名称2 from tb_name; // 组合属性去重
5) 按照结果集排序 order by 可以使用别名
select 列名称 from tb_name;
order by 列名称[asc|desc];
默认为升序排序,asc不写的话默认升序。
a. 查询所有学生的姓名和他们的总成绩,按照总成绩升序排序。b. 按照总成绩降序排序。
c. 若此时结果集中包含null值,这个值null认为是最小值
d. 针对多个列进行的排序?
查询所有学生的姓名,语文成绩,数学成绩,其中按照语文成绩升序,数学成绩降序排序。
按照书写顺序优先级排序
优先按照语文成绩升序排序,只有两个语文成绩相同的数据才按照数学降序排序。
6) 分页查询 limit
select 属性名称 from tb_name limit n; //查询结果按照前n行输出
查询总成绩前三名同学的姓名以及总成绩多少
select 属性名称 from tb_name limit n offset s; // 查询结果按照前n行输出
从第s+1行开始查询。(s...s + n]
总成绩在4-5行的同学姓名和他们的总成绩
若 limit n >所有行数,则全部展示。
当前表只有5行(最高索引为4),令其offset 5,从索引为5开始展示,输出为Empty set(结果为空)。当前数据表就不存在从第6行开始之后的三行数据。
7.1) 查询所有总成绩>200的同学姓名和他们的总成绩
7.2) where分支中不支持别名
为什么order by支持别名而where不支持?
order by的执行顺序,是在已经把结果查出来后,只是给查出来的结果排序。(select查询出来的结果对于order by已经可见了)。
where执行顺序是在查询之前,叫条件过滤。select是先要满足where分支的条件基础上的查询!select的别名这个时候还没执行。
7.3) MySQL的null不包含在 < <= 的条件中,null = null也不支持
null不要使用 < <= = 去比较,我们有专门的运算符过滤 null值
现在的表为
结果不包含null
b. 过滤所有成绩非空的同学和他们的总成绩is not null
c. Null +任何数据都是Null
练习:查询语文成绩优于英语成绩的同学姓名
7.4) 区间查询: between...and...
查询语文成绩在[85...100]之间的同学姓名和他们的语文成绩
单独使用and也可以实现
7.5) 包含查询in
查询数学成绩是20或60或99分的同学姓名和他们的数学成绩
7.6) 模糊查询 like
%元素[0...n]
a. 查询所有名字中带号的学生姓名_严格匹配一个字符
现在的表
update 表名 set 属性名 where 受影响的行
update表名set列名=(表达式-根据这个表达式确定修改的行)
1) 修改一行一列
成绩表中一号同学的数学成绩+10分
update exam_result set math = math + 10 where name = '1号';
2) 修改一行多列
成绩表中2号同学的数学和英语成绩+5分
update exam_result set math = math + 5,english = english + 5 where name = '2号';
3) 修改多行数据
where过滤出来的结果是多行
成绩表中所有名字中带号的同学数学成绩-10分。
update exam_result set math = math - 10 where name like '%号%';符合条件的有7行,修改的行数 6,null不能进行数学运算
4) 若update语句不带where条件,则该属性的所有行都受影响
重置学生表,将所有同学的数学成绩都还原为0
update exam_result set math = 0;
delete from 表名 where 过滤条件;
1) 删除名字叫空的这一条学生记录
delete from exam_result where name = '空';
2) 若此时不加where条件,则全表删除
delete from exam_result;
删除之后会告诉你删除的行数。一行行执行delete操作。
全表删除
truncate table 表名
truncate table exam_ret;相当于在os上直接把数据文件的大小变成0。将所有表中数据清除,不显示受影响的行数。
turncate删除快,数据不可恢复,不能加条件。注意:以上表的删除只是将表中数据删除,而drop表相当于直接把操作系统上这个文件删了,表都没了。