数据高级操作


  数据操作:增删改查


新增数据


基本语法


 Insert into 表名[(字段列表)] values(值列表);



  在数据插入的时候,假设主键对应的值已经存在:插入一定失败



  主键冲突


    当主键冲突:更新操作的时候(Duplicate key),可以选择性的进行处理:更新和替换



     主键冲突:更新操作



    Insert into 表名[(字段列表:包含主键)]values(值列表)on duplicate key update 字段=新值;


      

mysql 高阶列计和函数 mysql高级操作_mysql



     主键冲突:替换



     Replace into 表名[(字段列表:包含主键)]values(值列表);


    

mysql 高阶列计和函数 mysql高级操作_免费_02


    蠕虫复制


         蠕虫复制:从已有的数据中去获取数据,然后将数据进行新增操作;数据成倍的增加



        表创建高级操作:从已有表创建新表(复制表结构)


         Create table 表名 like 数据库.表名;


          

mysql 高阶列计和函数 mysql高级操作_数据_03


          


          蠕虫复制:先查出数据,然后将查出的数据新增一遍,


             Insert into 表名[(字段列表)] select 字段列表/*from 数据表名;


         

mysql 高阶列计和函数 mysql高级操作_mysql_04



        蠕虫复制的意义


            1.从已有表拷贝数据到新表中


            2.可以迅速的让表中的数据膨胀到一定的数量级:测试表的压力以及效率


 更新数据


       基本语法


            Update 表名 set 字段=值 [where 条件];



       高级新增语法


             Update 表名 set 字段=值 [where 条件] [limit 更新数量];


        

mysql 高阶列计和函数 mysql高级操作_免费_05



        删除数据


                与更新类似:可以通过limit来限制数量


               Delete from 表名[where条件][limit 数量];


            

mysql 高阶列计和函数 mysql高级操作_免费_06



          删除:如果表中存在主键自增长,那么当删除之后,自增长不会还原(如果删除数据时auto_increment=6,那么插入条数据就从6开始算起)


          思路:数据的删除是不会改变表结构,只能删除表后重建表


         

mysql 高阶列计和函数 mysql高级操作_mysql 高阶列计和函数_07



查询数据


   基本语法


    Select 字段列表/*from 表名[where 条件];


   


   完整语法


    Select  [select选项]  字段列表[字段别名]/*from  数据源 [where 条件子句] [group by 子句] [having子句] [order by 子句] [limit子句];




   select选项


    select选项:select对查出来的结果的处理方式


               All :默认的,保留所有的结果


              Distinct :去重,查出的结果,将重复的给去除(所有字段都相同)


             

mysql 高阶列计和函数 mysql高级操作_数据_08


        字段别名


            字段别名:当数据进行查询出来的时候,有时候名字并不一定就满足需求(多表查询的时候,会有同名字段),需要对字段名进行重命名:别名


    


            语法


             字段名 [as]  别名;


           

mysql 高阶列计和函数 mysql高级操作_数据_09


        数据源


             数据源:数据的来源,关系数据库的来源都是数据表;本质上只要保证数据类似二维表,最终都可以作为数据源



            数据源分为多种:单表数据源,多表数据源,查询语句



            单表数据源:select *from 表名;


              

mysql 高阶列计和函数 mysql高级操作_mysql_10


         多表数据源:select * from 表名1,表名2,.....;


           

mysql 高阶列计和函数 mysql高级操作_免费_11



         从一张表中取出一条记录,去另外一张表中匹配所有记录,而且全部保留(记录数和字段数),将这种结果称为:笛卡尔积(交叉连接),并没有用,尽量避免


 


        子查询:数据的来源是一条查询语句(查询语句的结果是二维表)


         Select *from(select 语句)as表名;


         

mysql 高阶列计和函数 mysql高级操作_mysql_12



     Where子句


             Where子句:用来判断数据,筛选数据


             Where子句返回结果:0或者1,0代表false;1代表true


 


          判断条件:


               比较运算符:>,<,>=,<=,!=,<>,=,like,between,and,in/not in


               逻辑运算符:&&(and),||(or),!(not)




        where原理:where是唯一一个直接从磁盘获取数据的时候就开始判断的条件;从磁盘取出一条记录,开始进行where判断,


                               判断的结果如果成立保存到内存,如果失败直接放弃



       条件查询1:要求找出学生id为1或者3或者5的学生


                 

mysql 高阶列计和函数 mysql高级操作_免费_13



         条件查询2,查出区间落在180,190身高之间的学生


                

mysql 高阶列计和函数 mysql高级操作_mysql 高阶列计和函数_14


        Group by 子句


               Group by:分组的意思,根据某个字段进行分组(相同的放一组,不同的分到不同的组)


                基本语法:group by 字段名;


                

mysql 高阶列计和函数 mysql高级操作_初学者_15


                分组的意义,是为了统计数据(按组统计,按分组字段进行数据统计)
                       sql提供了一系列统计函数:


                             Count():统计分组后的记录数:每一组有多条记录


                             Max():统计每组中最大值


                             Min():统计最小值


                             Avg():统计平均值


                             Sum():统计和


                     

mysql 高阶列计和函数 mysql高级操作_免费_16



                   Count()函数:里面可以使用两种参数:*代表统计记录,字段名代表统计对应的字段(null不统计)


                            

mysql 高阶列计和函数 mysql高级操作_免费_17




              分组会自动排序:根据分组字段:默认升序


                     Group by 字段[asc|desc];------对分组的结果然后合并之后的整个结果进行排序


     

mysql 高阶列计和函数 mysql高级操作_mysql_18



       多字段分组:先根据一个字段进行分组,然后对分组后的结果再次按照其他字段进行分组


              

mysql 高阶列计和函数 mysql高级操作_数据_19



              有一个函数:可以对分组的结果中的某个字段进行字符串连接(保留该组所有的某个字段):


               group_concat(字段);


                

mysql 高阶列计和函数 mysql高级操作_mysql_20



     回溯统计:简单的说就是不需要懂



       Having子句


             Having子句:与where子句一样:进行条件判断


      


             where是针对磁盘数据进行判断:进入内存之后,会进行分组操作;分组结果就需要having来处理


             


             having能够做where能做的几乎所有事情,但是where却不能做having能够做的很多事情


        



              1.分组统计的结果或者说统计函数都只有having能够用


                

mysql 高阶列计和函数 mysql高级操作_mysql 高阶列计和函数_21


            2.having能够使用字段别名:where不能:where是从磁盘取数据,而名字只可能是字段名:别名是在字段进入内存后才会产生的


              

mysql 高阶列计和函数 mysql高级操作_免费_22


        


       Order by 子句


               Order by :排序,根据某个字段进行升序或者降序排序,依赖校对集。


         


                使用基本语法:



                  Order by 字段名[asc|desc];默认是升序


                  

mysql 高阶列计和函数 mysql高级操作_初学者_23


 


                排序可以进行多字段排序:先根据某个字段进行排序,然后排序好的内部,再按照某个数据进行再次排序


               

mysql 高阶列计和函数 mysql高级操作_免费_24



        limit子句


               limit子句是一种限制结果的语句:限制数量,



               limit 有两种使用方式


  


               方案一:只用来限制长度(数据量):limit  数据量;


               

mysql 高阶列计和函数 mysql高级操作_mysql_25



           方案二;限制起始位置,限制数量:limit 起始位置,长度;


             

mysql 高阶列计和函数 mysql高级操作_数据_26


             主要用来实现数据的分页:为用户节省时间,提交服务器的响应效率,减少资源的浪费


              对于用户来讲:可以点击的分页按钮:1,2,3,4


             对于服务器来讲:根据用户选择的页码获取不同的数据:limit offset ,length;


 


            length:每页显示的数据量:基本不变


            offset:offset=(页码-1)*每页显示量