全列单行插入
insert into 表名 values(值,值……);
也可以全列且多行插入
insert into 表名 values (值,值……),(值,值……)……;
insert into 表名 (列名,列名……)values (值,值……);单行
insert into 表名 (列名,列名……)values (值,值……),(值,值……);多行
其中,同行未插入的那些列显示为null
时间日期一般是有固定格式,一般使用如下:
birthday datetime:'2000-01-01 12:00:00'
select * from 表名;
select 列名,列名…… from 表名;
select 表达式 from 表名;
我们先创建一个表示成绩的表
查询每个学生的总成绩,如下:
最好标注上名字,所以如下查询:
当参与运算的有空值时,计算出来也是空
为查询结果中的列指定别名,如下:
select 列名/表达式1,列名/表达式2 as 别名……from 表名;别名跟在哪一列,哪一列就用别名。
as可以省略,但不建议。
select distinct 列名,列名……from 表名;
但要是加上姓名,就不同了:
所以只有distinct后面的所有列都相同才可算作重复
select 列名/表达式,…… from 表名 order by 列名/表达式 asc/desc;
asc表示升序,可以省略不写,desc表示降序
1.修改成别名后,不能直接拿别名排序:
因为当客户端把查询时排序的请求发给服务器后,服务器首先进行数据查询,然后把查询到的数据进行排序,最后再组织成响应数据返回给客户端,而改名操作,一定是在排序之后
所以只能如下修改:
2.排序可以依据多个列/表达式
如果第一列相同就根据第二列……,每一列都要制定升序还是降序,如果没指定,就默认是升序:
3.排序的依据不一定非得是select后面的那些列。
select 列名…… from 表名 where 条件;
1.条件查询可以搭配表达式:
2.如果某表达式中有null值,会出现如下效果
最后一行为78.5和null,假设条件为总成绩小于235,因为任何数与null相加都是null,null<235的结果也是null,null表示false,所以就是查不出来,所以查询结果中没有最后一个学生的
1.比较运算符
> , < ,>= , <=
= 等于,不太安全,例如null=null的结果是null
<=> 等于,安全,null=null的结果是true
2.and,or
and表示且,or表示或
3.范围查询
between……and……,表示的是闭区间
4.in(option……)
如果是option中的任意一个,就返回true
5.模糊查询:like
这里会用到%以及_
%表示匹配任意多个字符,_表示匹配任意一个字符
比如:where name like 孙%;会匹配到所有姓孙的人
where name like 孙_;会匹配到所有姓孙的且只有俩个字的人
where name like %孙;会匹配到所有最后一个字是孙的人
where name like %孙%;会匹配到所有中间有一个字是孙的人
……
6.null查询
用到 is null 或is not null
selet 列名 from 表名 (where/orderby)limit n;从0开始筛选n条结果
selet 列名 from 表名 (where/orderby)limit s,n;从s开始筛选n条结果
selet 列名 from 表名 (where/orderby)limit n offset s;从s开始筛选n条结果
如果想从第一条记录开始,那么偏移量就是0,注意不是1.
update 表名 set 列名=…,列名=…,……(where /order by /limit);
例如:
这是未修改之前的表
这是进行了修改的表
如下例子:
还是上面的成绩单,将总成绩为倒数前三的同学的英语成绩多加20分:
第一种修改方法:
第二种修改方法:
我一开始以为加不加offset0的报错结果都一样,但为什么不一样呢?我实在是想不清,但当我查了总分倒数前三的我才明了了
总成绩倒数前三的是第5,6,7个学生
对于第二种修改方式,报错为:第三行超出范围了,它说的第三行指的是小兰,超出范围是因为78.5+30=108.5,而我们规定的decimal(3,1)表示小数长度为3,小数位数为1,108.5的小数长度是4,与规定不符了,所以修改不成功
delete from 表名 (where/order by/limit)
例如:
1.删除某同学的成绩
2.删除整张表的数据
注意,删除整张表和删除数据库不一样,删除整张表后,表还在,只是表是空的