mysql3 表的增删查改
增
创建数据表
create table [表名]([列1] [数据类型1], [列2] [数据类型2], ...);
单行插入
insert into [表名] values(数据1, 数据2, ...);
多行插入
insert into [表名] values(第一行数据1, 第一行数据2, ...),(第二行数据1, 第二行数据2, ...);
指定列插入
insert into [表名](列1, 列2, ...) values(列1数据, 列2数据, ...);
替换
replace into [表名] values(数据1, 数据2, ...);
replace into [表名](列1, 列2, ...) values(列1数据, 列2数据, ...);
替换的时候需要注意:
一定要在替换的数据当中,能够唯一标识是哪一行数据(否则就重新插入了)
替换的步骤:先将原先的数据删除,再重新插入
查
select列
为全表查询,会输出全表中查询列的所有数据
全列查询
select * from [表名];
数据量小时可以使用,数据量多时不建议使用
指定列查询
select [列1],[列2],... from [表名];
注意:在指定列查询时,如果指定列不在表中,则默认输出行的数值为指定列的数值
所有的查询都不改变原表数据
表达式中可以包含一个字段
select [列1想要进行的操作],[列2想进行的操作],... from [表名];
例如:在stu表中想查询序号姓名分数时给分数(grade)加10
select id,name,grade+10 from stu;
给输出的结果重命名
select [列1想要进行的操作] [想要输出时更改的名称],[列2想进行的操作] [想要输出时更改的名称],... from [表名];
或
select [列1想要进行的操作] as [想要输出时更改的名称],[列2想进行的操作] as [想要输出时更改的名称],... from [表名];
去除重复结果
select distinct [列1],[列2],... from [表名];
where条件
select [列1],[列2],... from [表名] where [约束条件];
例如:
select id,name,grade from stu where name='张三';
比较运算符
>,>=,<,<= 大于,大于等于,小于,小于等于
可以查询一个列大于另一个列,例如语文(yuwen)大于英语(yingyu) -> where yuwen > yingyu
= 等于,NULL不安全,例如NULL=NULL的结果为NULL
<=> 等于,NULL安全,例如NULL=NULL的结果为TRUE(1)
!=,<> 不等于
BETWEEN a0 AND a1 范围匹配,[a0, a1],如果a0 <= value <= a1,返回TRUE(1)
IN(option, ...) 如果是option中的任意一个,返回TRUE(1)
IS NULL 是NULL
IS NOT NULL 不是NULL
LIKE 模糊匹配 ,% 表示任意多个(包括0个)任意字符,_ 表示任意一个字符
例如:查找姓孙的同学 where name like '孙%'
查找姓孙且名字为一个字的同学 where name like '孙_'
查找不姓孙的同学 where name not like '孙%'
假设有英语(yingyu)语文(yuwen)数学(shuxue)三项成绩,想查询总分200以下的:
逻辑运算符
AND 多个条件必须都为TRUE(1),结果才是TRUE(1)
OR 任意一个条件为TRUE(1),结果就是TRUE(1)
NOT 条件为TRUE(1),结果为FALSE(0)
order by排序
select ... from [表名] [where ...] [order by ...];
NULL视为比任何数都小
默认为ASC(升序),如果需要降序则在后面加上DESC
例如数学语文英语,需要数学降序,语文英语升序
或是总分降序排列
添加几个数据,查询姓赵的同学的数学成绩并降序排列
筛选分页结果
从0开始,筛选n条结果
select ... from [表名] [where ...] [order by ...] limit n;
从s开始,筛选n条结果
select ... from [表名] [where ...] [order by ...] limit s,n;
select ... from [表名] [where ...] [order by ...] limit n offest s;
改
update [表名] set [列名1] = [想要修改的值], [列2] = [想要修改的值], ... [where ...] [order by ...] [limit ...];
注意:如果仅使用 update [表名] set [列名1] = [想要修改的值];会将这一列所有的值都变成想要修改的值
所以一般需要加一个约束条件,用来框定需要更新哪些具体的行
例如想把赵铁柱的数学改成80分:
想让总分排名倒数三的人的数学成绩加上30分
首先先查哪些是倒数三的人
随后使用in约束条件来给他们加上30分
好家伙都给铁柱改成80了咋分还是倒数呢,这就是木桶效应吗
删
删除数据
delee
1、delete只删除表数据,不会修改表结构
2、删除数据要慎用(物理删除)
delete from [表名] [where ...];
可以用约束条件来框定删除范围
例如删除铁柱的成绩
心疼铁柱三秒
截断表
重置表结构(表结构当中有些自增选项)
表数据也被清空,需慎用
truncate [表名];
聚合函数
COUNT(列名或*) 返回查询到的数据的数量
SUM(列名或*) 返回查询到的数据的总和,不是数字没有意义
AVG(列名或*) 返回查询到的数据的平均值,不是数字没有意义
MAX(列名或*) 返回查询到的数据的最大值,不是数字没有意义
MIN(列名或*) 返回查询到的数据的最小值,不是数字没有意义
group by子句使用
可以对指定列进行分组查询
select [列1],[列2],... from [表名] group by [按照某一列进行分组];
例如想求两个班级分别的平均分:可以先分组,对分组的结果进行聚合
同时可以在后边加上having进行约束
select [列1],[列2],... from [表名] group by [按照某一列进行分组] [having ...];