高级新增操作

 

①基本插入操作:

1 insert  into  数据表名称(字段) values (值);

②批量插入操作:

1 insert  into  数据表名称(字段) values  (值1),(值2),(值3)...

③主键冲突

解决主键冲突的方法一共有两种形式:

第一种方案:

1 insert  into  数据表名称values  (1,’e’) on  duplicate  key  update  字段 = 字段值;

第二种方案:基本语法:

1 replace into  数据表(字段)  values  (值);
2 如果数据表中不存在这条记录,则添加。
3 如果数据表中存在这条记录,则更新。

  但是要特别注意,虽然replace方法比较简单,但是其效果并不高。

④蠕虫复制

蠕虫:就是一种会分裂的小虫子。所谓的蠕虫复制就是采用这样一种复制方式。

基本语法:

复制表结构:

1 create  table数据表名称  like  ‘数据表’;

以上语句只能复制数据表的表结构,而不能复制数据。

1 insert  into  数据表(忽略主键)  select  字段 from  数据表;

以上代码就是蠕虫复制,蠕虫复制得到的结果其实是没有意义的。蠕虫复制的主要目的是测试数据库的承载能力、性能等等

高级删除操作

 ①基本语法:

1 delete  from  数据表名称;   //删除所有记录
2 delete  from  数据表名称   where  删除条件;   //删除指定的记录

②清空表,基本语法:

1 truncate数据表名称;   //清空表

delete from 数据表与truncate 数据表之间的区别:

1 两者虽然都是删除数据表中的所有记录,
2 但是两者不同在于对于数据结构中的自动增长处理不同,
3   truncate会重新创建表结构,
4   auto_increment字段会从1重新开始编号。
5 truncate效果:数据会重新从1开始:
6 delete from 效果:数据会在最后一条记录的基础上,继续编号:

③高级删除操作(order by|limit)

order by|limit基本语法:

order by 字段[asc|desc] :对某个字段进行排序,asc代表升序,desc降序。

limit[num]:指定要删除的数量,limit语句在SQL语句中是放在最末端的。

1 delete  from  数据表名称  where 条件  order by  字段  [asc|desc] limit 5;

 

高级更新操作

 基本语法:

1 update  数据表名称   set  字段=字段值[,字段=字段值]  where  更新条件; 

高级更新:

order  by  字段  [asc|desc] :对记录进行按某个字段进行排序

limit  [num] :更新多少条记录

 

 

 

 

高级查询操作

①SQL语句中的五子句,基本语法:

1 select  */字段   from  数据表   where  [条件] group by  [分组条件]  having[条件]   order  by  字段  [asc|desc]   limit  [offset,length]
2 offset:偏移量,值默认从0开始

② where子句

第一种情况:运算符

1 算术运算符:><  =  <>(不等于)  != >=   <=
2 逻辑运算符:and(&&)    or(||)    非(!)
3 布尔运算符:is nullis  not  null

第二种情况:in与not in(重点),基本语法:

1 select* from  数据表  where  id   in  (1,2,3);  //同时查询多条记录
2 delete  from 数据表where  id  in  (1,2,3);  //同时删除多条记录

第三种情况:between...and...或not  between...and...

使用between...and...有一个基本要求,between后面的值一定要小于and后面的值,而且两者是一个闭区间。

选择年龄在18周岁-20周岁之间的小伙伴。

基本语法:

1 select  *  from  数据表名称  where  age  between  18  and  20;

③all与distinct(去重)

④like模糊查询

like在实际应用中,主要用于数据的搜索,like语句里面有两个匹配符:

% :匹配任意个字符

_ :只能匹配一个任意字符

特殊情况,如果要查询的关联词中包含%或_怎么办呢?答:使用\反斜杠进行转义。

 

③group by子句

基本语法:

1 select  *  from  数据表  group  by   字段;

group  by的主要功能就是实现对数据的分组功能。

1 select  *  from  student  group  by sex;

如以上代码运行可知,如果仅仅使用group  by对某个字段进行分组操作,则其每个组只会返回一条记录。

分组的意义在于实现对数据进行统计,可以使用如下函数:

1 count(*/字段) :获取数据表中的总记录数
2 max(字段) :获取某个字段的最大值
3 min(字段) :获取某个字段的最小值
4 avg(字段) :获取某个字段的平均值
5 sum(字段) :获取某个字段的和

表别名与字段别名(主要针对多张表)

表别名,基本语法:

1 表别名:
2 select  */别名.字段  from  数据表1 as 别名;
3 4 select */别名.字段  from  数据表1 别名;

字段别名,基本语法:

1 字段别名:
2 select  count(*) as 字段别名  from  数据表;
3 4 select count(*) 字段别名  from  数据表;

字段别名的作用有二:

1 第一点:给字段起一个更有意义的名字,比如count(*)起名为num。
2 
3 第二点:如果多表关联,出现同名字段,后面的会覆盖前面的,所以这个时候可以给冲突字段起别名。

count函数与null

1 在实际应用中,如果count(*),代表统计所有记录。但是count函数还可以只统计某个字段的总记录数,但是在统计时会自动忽略null记录。

group by结合统计函数

基本语法:

1 select  分组字段,统计函数(*/分组字段) from  数据表 group  by 字段;
2 select  sex,count(*)  from  student  group  by sex;

 

④having子句

having子句与where子句功能是一致的,都是用于实现对数据的筛选。

两者的唯一区别在于发生的顺序不同。

1 where子句:在数据表中就对数据进行筛选,不需要进入内存。
2 
3 having子句:在数据进行到内存之后(比如group by),才对数据进行筛选。

在MySQL中,如果没有特别的要求,只是简单的筛选操作,having与where子句可以相互替换。

1 ①对于字段别名的处理不同(having可以通过别名字段对数据进行筛选,但是where不行)
2 
3 ②对于统计函数与group by的处理不同(having可以处理统计函数,但是where不行)

 

⑤order by子句

order by就是实现对某个字段或多个字段进行排序,有两个排序参数。asc升序,desc降序。

基本语法:

1 select  *  from  数据表  order  by 字段   [asc|desc];
2 默认采用asc升序排列。

order by与多字段排序,基本语法:

1 select  *  from  数据表  order  by 字段1 [asc|desc],字段2 [asc|desc],字段3 [asc|desc]...  ;
2 系统首先对 字段1 进行排列,
3     如果两个字段的字段1值相同。则对 字段2 进行排序,
4     如果两个字段的字段2值相同。则对 字段3 进行排序,
5     这就是多字段的执行顺序。

 

⑥limit 子句

基本语法:

1 select  * from  数据表   limit  [offset,length];
2 offset :代表从哪条记录开始,默认从0开始
3 length :代表获取的总记录数
4 特别说明:
5 高级查询时,limit拥有以上两个参数,但是高级更新与高级删除时,其只有一个length参数,而没有offset偏移量。

分页的原理就是limit

 1 ①数据表中一共有99台电脑
 2 ②每页显示10台,多了就分页
 3 ③使用limit实现数据分页(读取每一页的数据)
 4 ④offset与页码之间有什么关系呢?
 5 第一页:offset从0开始,length是10
 6 第二页:offset从10开始,length是10
 7 第三页:offset从20开始,length是10
 8 ...
 9 第十页:offset从90开始,length是10
10 推导一下:offset与页码之间的关系,(当前页码 - 1* length

⑦group by补充两个知识点

group_concat函数

  把获取的记录数拼接成字符串。

  PHP把数组转化为字符串implode函数,PHP把字符串转化为数组explode函数。

   1 explode(‘炸开点’,‘要炸开的字符串’); 

回溯统计with rollup(分组后的数据汇总)

  回溯统计就是把分组后的结果进行汇总,得到最终的结果。

 

posted on 2018-04-16 19:21  &&||!  阅读(186)  评论(0编辑  收藏  举报