新增数据
基本语法
insert into 表名 [(字段列表)] values (值列表);
主键冲突
更新和替换
主键冲突:更新操作
insert into 表名[(字段列表:包含主键)] values(值列表) on duplicate key update 字段 = 新值;
主键冲突:替换
repalce into 表名[(字段列表:包含主键)] values(值列表) ;
蠕虫复制
从已有的数据去获取数据,然后将数据又进行新增操作,数据成倍增长。
表创建的高级操作:从已有表创建新表。
Create table 表名 like 数据库表名;
蠕虫复制:先查出数据,然后将查出的数据新增一遍
insert into 表名[(字段列表)] select 字段列表/* from 数据表名;
蠕虫复制的意义:
1. 从已有表拷贝数据到新表中
2. 可以迅速的让表中的数据膨胀到一定的数量级,测试表的压力以及效率
更新数据
基本语法
update 表名 set 字段 = 值 [where 条件];
高级新增语法
update 表名 set 字段 = 值 [where 条件] [limit 更新数量];
删除数据
与更新类似。
delete from 表名 [where ] [limit ];
删除:如果表中存在自增长,那么删除之后,自增长不会还原。
思路:数据的删除是不会改变表结构,只能删除表后重建表。
truncate 表名; – 先删除改变,后新增改变
查询数据
基本语法
select 字段列表/* from 表名 [where ];
完整语法
select [选项] 字段列表[字段别名] / * from 数据源 [where ] [group by ] [having ] [order by ] [limit ];
select 选项
select对查出来的结果的处理方式
All 默认的,保留所有的结果
Distinct:去重
字段别名
当数据进行查询出来的时候,有时候名字并不一定满足需求,需要对字段重命名。
语法:字段名 as 别名
数据源
本质上只要保证数据类似二维表,最终都可以作为数据源
数据源分为多种:单表数据源,多表数据源,查询语句
单表数据源:select * from 表名;
多表数据源:select * from 表1,,表2… ;(笛卡尔积没什么用,尽量避免)
子查询:select * from ( select 语句) as 别名;
where 子句
where 子句返回结果: 0 或者1 0代表false 1代表true
where原理:where是唯一一个直接从磁盘获取数据的时候就开始判断条件:从磁盘取出一条记录,开始进行where判断:判断的结果如果成立保存到内存,如果失败直接放弃。
查询条件1:查出学生id为2或3 或5的学生
条件查询2:查出区间在170 ~ 180身高的学生
between 本身是闭区间,between左边的值必须<=右边的值。
group by子句
根据某个字段进行分组。
基本语法:group by 字段名
分组的意义:是为了统计数据。
sql提供了一系列统计函数
count():统计分组后的记录数
max():统计每组中最大值
min():
avg():
sum():
count 函数:里面可以使用两种参数:*代表统计记录,字段名代表统计对应的字段(null不统计)。
分组会自动排序:根据分组字段,默认升序。
group by 字段 [asc | desc] ; – 对分组结果合并之后的整个结果进行排序;
多字段分组:先根据一个字段进行分组,然后对分组后的结果再次按照其他字段进行分组。
group_concat 字段可以对分组的结果中的某个字段进行字符串连接(保留该组所有的某个字段)。
having子句
与where子句一样:进行条件判断的。
where是针对磁盘数据进行判断,进入到内存之后,会进行分组操作,分组结果需要having来处理。
having能做where能做的几乎所有的事情。但是where却不能做having能做的很多事情。
- 分组后的结果或者说统计函数都只有having能够使用
2.having能够使用字段别名,where不能。
order by子句
根据某个字段进行排序,依赖校对集
基本语法
order by 字段名 [asc|desc];
排序可以进行多字段排序:先根据某个字段排序,排序好后在按照某个数据再次排序
limit 子句
限制结果的语句:限制数量
limit有两种使用方式:
方案1:只用来限制长度:limit 数据量;
方案2:限制起始位置,限制数量:limit 起始位置,长度;
主要用来实现数据的分页:节省时间,提高响应效率,减少资源浪费