MySQL的增删改查语句以及数据库设计的三大范式

数据库设计的三大范式:

  1.列的原子性,即列是不可再分的

  2.表里的每一列都应该与主键有关系,

  3.表里的每一列都应该与主键有直接关系,

  当使用自增长列不满足2、3范式,是特殊例子,只用在解决较为复杂的问题

 

SQL的增删改查:

  一、添加数据, insert into 表名 values(添加的内容)  ,添加的内容每项用逗号隔开,注意事项:

    字符串和字符需要加单引号,布尔型添加0或1不带引号

    datetime类型按照格式 '2018-01-02 11:34:45'来添加,也要加单引号

    整数型,小数型不用加引号

    表里有几列就要添加几个数据,如果有空数据,则要指定添加数据的列 insert into 表名(要添加数据的列) values() 

    SQL语句里不区分大小写

    自增长列添加数据直接给0,会自动增长

  二、修改数据

    update 表名 set 列名=修改的值 where 可以锁定需要修改项的条件

    如果数据库中的数据时数字类型,想要数据加1的方法   update 表名 set 列名=列名+1 where 条件 

  三、删除数据

    delete from 表名 where 要删除数据的锁定条件

  四、查询数据,简单查询

    1.查询某一张表中的所有数据

    select * from 表名

    2.查询指定列

    select 指定列名1,指定列名2 from 表名

    3.给列指定显示名称

    select 列名 as '指定名称' from 表名 

    4.条件查询

    select * from 表名 where 条件 

      条件可以添加or表示或 以及and表示并

    5.模糊查询(关键字查询)

    select * from 表名 where 列名 like '_关键字%' 

      _表示一个字符,%表示n个字符

    6.排序查询(以某一列的顺序排列)

    select * from 表名 order by 列名 desc

      默认为升序排列(从小到大往下排列),desc表示降序排序(从大到小往下排列)

      列名后追加列名表示追加列名为第二排列顺序

    7.去重查询

    select distinct 列名 from 表名 

    8.分页查询

    select * from 表名 limit 5,5 

      前一个5表示跳过5条,后一个5表示取5条,合起来即每页5条信息

    9.统计查询(聚合函数)

      (1)数据条数  select count(*) from 表名

      (2)最大值、最小值  select max(列名) from 表名 取最大值  select min(列名) from 表名 取最小值

      (3)取平均值  select avg(列名) from 表名

    10.分组查询

    select 列名,count(*) from 表名 group by 列名  按照某一列分组

    select 列名 from 表名 group by 列名 having count(*)  按照分组查询每一组的条数   having后可以直接跟条件

    11.范围查询

    select * from 表名 where 列名 between 60 and 80  查询数值在60到80之间的数据

    12.离散查询 

    select * from 表名 where 列名 in(1,5,8,9)  表示查询数值为1,5,8,9这四个数的数据

    高级查询

      (1)联合查询(行的扩展),是纵向扩展

      select 列名 from 表名1

      union

      select 列名 from 表名2

      (2)连接查询( 连接查询),是横向扩展

      select * from 表名1,表名2 where 表名1.列名=表名2.列名       

      再把*换成想要的列名,列举列名时注意两张表中重名的列名要带上表名如 表名.列名 ,不重名的列名可以不加表名,

      (3)子查询,特点是子查询的结果作为父查询的条件使用

      无关子查询:子查询和父查询没有关系,子查询拿出来可以单独执行

      相关子查询:子查询和父查询互相依赖,不能单独拿出来执行,子查询用到了父查询的内容,利用查询的读取顺序,子查询直接使用卡住的父查询的内容,如

        select * from 表名1 a where 列名1>(select 列名1 from 表名1 b where b.列名2= a.列名2)

        相关子查询可以处理一下较为复杂的问题

      

    

      

posted @ 2018-01-03 10:46  黑山大胖子  阅读(282)  评论(0编辑  收藏  举报