数据库设计的三大范式:
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)
相关子查询可以处理一下较为复杂的问题