本章主要讲解基本的增删查改的基础与细节
这里的增删查改都是在表上进行操作.
insert into 表名(表信息) values(值,值,值......),(值,值,值......);
第一种方式:直接插入(单行数据+多列插入)
这里由于没有指定表的信息,所以必须插入一份这个表的所有元素的对应值
例如:为学生表插入一个学生信息
//创建一个表
create table student(
id int,
name varchar(20),
age int
);
insert into student values(1,"李白",18);
第二种方式:多组插入(多行数据+多列插入)
插入多份这个表的所有元素的对应值
insert into student values(2,"白居易",18),(3,"李商隐",19),(4,"杜浦",16);
第三种方式:指定插入(单行数据+指定列插入)
指定表的元素进行插入
insert into student(id) values(5);
对于其他没有被插入的数据,会有一个默认值.
第四种方式:指定插入(多行数据+指定列插入)
insert into student(id) values(5),(6),(7);
第一种方式: 简单查询
select * from 表名;
例如:查询上述学生表的全部数据:
select * from student;
select id from student;
select 10 from student;
在这里意义不大,只对特定场景有意义
select age+10 from student;
注意:
这里的age+10并不会改变数据在硬盘中的存储,只是把age+10以后的数据以临时表的方式呈现出来
利用as关键字为所要查询的内容起一个别名
select id+age as total from student;
select distinct (去重列) from (表名);
查询去除名字相同的表:
select distinct name from student;
同样的,这里也不会改变表的值,还是以临时表的形式呈现
查询的过程中,对查询到的结果进行排序(依然只是以临时表的形式呈现,不会改变磁盘中的数据)
select 列名 from 表名 order by 列名 asc/desc;
asc以升序排序 默认不写也是以asc
desc以降序排序
select * from student order by age desc;
select * from student order by age;
也可以使用别名进行查询:
select id+age as total from student order by total;
也可以使用多个列进行排序,先以第一个列为标准,如果第一列不分上下的时候,就以第二列作为标准.依次类推
select * from student order by id desc,age;
我们可以自定义按照我们的想法查询到我们想要的数据.只需要给足足够的条件即可,
可以理解为对查询结果进行遍历,如果满足条件则显示,不满足条件则不显示
语法为:
select * from 表名 where 条件;
查询年龄小于18的学生:
select * from student where age<18;
想要真正学会条件查询,需要理解sql中的运算符.
即我们查询的结果不需要十分准确,只要满足一部分特征即可.
模糊查询需要使用到通配符:
%: 可以表示任意个任意字符
_: 可以表示一个任意字符
使用like关键字:
select * from 表名 where 列 like 模糊条件
查找姓李的同学:
select * from student where name like "李%";
当我们在实际工作中接触的表十分大时,分页查询可以使得我们不需要长久地等待机器显示出所有的数据,可以只显示其中的几行.
我们需要明确的是,select 查询本来就是一个比较危险的操作,在一份超级大表数据面前,即使加上where 条件依然可能把数据库弄挂,所以在查询数据建议多使用分页查询,防止意外情况导致的数据库崩溃.
语法为
查询n条数据,从m行开始查询
select * from 表名 limit N offset M;
查询从学生表第二行开始的三行数据:
select * from 表名 limit 3 offset 2;
当然select 不止以上操作,还有更加复杂的操作.上面是最基础基本的查询操作.
/ > < <= >=
基础的大于小于,大于等于,小于等于.
=
等于, 对null不安全,无法比较一个值到底是不是null,null = null 的结果不是true,而是null.
<=>
等于,对null 安全,可以比较出一个值是否为null, null = null 的结果是true
!= <>
不等于
between a1 and a2
范围匹配,表示在[a1,a2],注意为闭区间,若a1<=value<=a2,则返回true
in (option)
数值匹配,如果数字在option集合中的任意一个,则返回true
is null
判断是否为null,是则返回true,不是则返回flase
is not null
判断是否为null,是则返回flase,不是则返回true
like
模糊匹配
and
多个条件必须都为true,最终返回结果才为true
or
多个条件中只要有一个为true,最终结果就为true
not
条件为true,结果为flase
语法:
update 表名 set 列名 = 值,列名 = 值.......where 字句
例如: 创建学生成绩表并插入学生成绩信息:
create table exam_result (
id int ,
name varchar(20),
chinese decimal (3 , 1),
math decimal (3 , 1),
english decimal (3 , 1)
);
insert into exam_result (id,name, chinese, math, english) VALUES
(1 , '李一' , 67 , 98 , 56),
(2 , '李二' , 87.5 , 78 , 77),
(3 , '李三' , 88 , 98.5 , 90),
(4 , '李四' , 82 , 84 , 67),
( 5 ,'李五' , 55.5 , 85 , 45),
(6 , '李六' , 70 , 73 , 78.5),
(7 , '李七' , 75 , 65 , 30);
例子1:将李一的数学成绩改为80;
update exam_result set math = 80 where name = "李一";
例子2:将李二的数学成绩改为80,语文成绩改为90;
update exam_result set math = 80,chinese = 90 where name = "李二";
例子3:将总成绩的前三名同学的数学成绩减30分 (limit作为限制条件)
update exam_result set math = math - 30 order by chinese + math + english limit 3;
修改操作也是十分危险的操作,一旦修改,数据将无法回复,只能通过备份重置数据
语法
delete from 表名 where 字句
例如 : 删除名字为李四的成绩
delete from exam_result where name = "李四";
一样十分危险,一旦删除数据无法恢复,只能通过备份了.
mysql基础的增删查改是十分重要的,mysql的学习不能停留在表面,而要通过不断地练习sql语句去熟系,并学会灵活运用.