一.SQL语句的分类


  SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一


种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。




        a:DDL语句



           定义和管理数据对象, 如数据库,数据表等。



           命令有:CREATE、DROP、ALTER



        b:DML语句



           用于操作数据库对象中所包含的数据。



           命令有:INSERT、UPDATE、DELETE



        c:DQL语句



           用于查询数据库数据



           命令有:SELEC



        d:DCL语句



           用来管理数据库的语言,包括管理权 限及数据更改



           命令有:GRANT、COMMIT、ROLLBACK



二.基本增删改数据语法(DML)

a:新增数据

     (1)基本

        insert into 表名 set 字段=值,字段=值,...;

        注意:一次插入一行

     (2)基本

        insert into 表名(字段1,字段2...)  value/values (值,值...)(值,值...)

value和values的区别就是可以添加一条和一次性添加多条数据

          表明()中的字段名可以省略不写,但插入时全部字段都要赋值

          insert into 表名()  value/values (值,值...)(值,值...)

     (3)查询新增

        insert into 表名(字段名,字段名) select 字段名,字段名... from 表名

        注意: 使用查询并新增时要注意前后字段对应起来。

b:修改数据

     (1)基本

        update 表名 set 字段=值,字段=值 where 筛选条件;

        注意:如果不写where筛选条件则修改整个表的内容(危险操作)

     (2)多表修改

        update 表1 left/right/inner join 表2 on 连接条件  set 字段=值,字段=值  where 筛选条件

        注意: 修改时不应破坏多表之间的级联关系

c:删除数据

     (1)基本

        delete from 表名 where 筛选条件

        注意:不写where筛选条件会删除整个表的数据(危险操作)不会清空主键自增

     (2)多表删除

        delete 别名1,别名2 from 表1 别名1 inner|left|right join 表2 别名2 on 连接条件 where 筛选条件

d:删除的区分

        delete     不加条件的删除,会清空数据,但是不清空主键自增(危险操作)

        truncate  会清空表数据,同时清空索引(危险操作)

        drop        直接删除整个表包括表结构(危险操作)

三.查询语法(DQL)

a:完整查询语句

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

[select选项]:ALL(所有信息),distinct(去重)。其中distinct针对的是查询结果的整条记录而言的。

[where字句]:where是从磁盘读数据时就对数据的筛选,在分组之前。

[group by子句]:分组子句,group by子句主要的作用是分组,从而进行统计操作,而不是为了展示,展示的时候,只会展示分组记录的第一条记录,分组时,一般会结合使用count(),  max(), min(), avg(), sum(), 函数。

[having 子句]:效果类似where子句,但having是对分组后的数据进行筛选        

[order by 子句]:对数据进行排序操作,根据某个字段进行升序或者降序排序。(进行多字段排序的时候,依次按照字段的先后顺序,写在最前面的字段优先排)

[limit 子句]:限制结果的数量。limit一共有两个参数,第一个参数控制跳过前多少行,第二个参数控制显示多少行。

b:单表查询



针对数据库中的一张数据表进行查询。



蓝色 字体的为语法中的关键字



(1) select * from student    #对student表进行查询,*表示查所有字段



(2) select distinct *  from student  #查student表所有字段,并去重



(3) select * from student  where sid<10  #带有where筛选的查询



    注意:where后边可以跟的关键字有and or not in is like between等      



(4) select ssex, count (*) from student group by ssex #用性别字段对student表分组查询



    注意:分组后,可以直接显示的字段必须是聚合时完全相同的。



(5) select * from student order by sid desc #查询所有student按照sid降序排序



    注意:asc代表升序,desc为降序,可以写多个字段,先写的先排



(6) select * from student limit 1,3 #查所有学生跳过第一行,显示三行



总结:sql语句中关键字的使用严格区分先后顺序,否则导致语法错误



c.多表联查

     (1)select * from 表1,表2 where 条件

        如果不写where筛选条件,此时得到的是两个表排列组合后的结果,数量是两个表行数的乘积,这样得到的结果是无效的,我们应该看看两个表之间的关系,使用筛选条件得到我们需要的结果。

     (2)select * from 表1 inner/left/right join 表2 on  条件

        inner join后得到的是两个表的交集部分

flask mysql增删改查 mysql语句增删改查_mysql

 

        lefr join 后得到的是两个表的交集部分加左侧表独有的部分

     

flask mysql增删改查 mysql语句增删改查_flask mysql增删改查_02

 

        right join 后得到的是两个表的交集部分加右侧表独有的部分

flask mysql增删改查 mysql语句增删改查_字段_03

 

小结:第一种方法查询如果单表数据过大会导致笛卡尔积过大,从而对内存占用多,第二种方法是一个表一个表的查,查询次数多,但是 对内存占用相对小,所以我们应根据自身需求选择合适的语句

(3)where子查询

select * from student where  sid = (select max(sid) from

注意:where子查询时要注意子查询返回的结果不能与where中条件不一致

(4)from子查询

select * from student inner join (select * from sc)s on

注意:from子查询必须给子查询起别名才能使用

小结:子查询可以嵌套使用来解决一些复杂逻辑,但是要注意嵌套过多影响查询效率,不利于sql优化