这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天
第一二三范式
第一范式:每一列(字段)都是单独的一列数据项,即只有一个数据
第二范式:第一范式前提下,如果主键不止一列,则所有列都依赖于全部的主键的列,主属性/主键可以是多个字段组合
第三范式:第二范式基础上任何非主属性不依赖任何非主属性
执行顺序
先有表(from、on、join),才能过滤(where),再才能分组(group、having),再才能选择去重(select distinct),再才能排序(order by),最后才能分页(limit)。
例如:
select
distinct user.name
from user
join vip on user.id=vip.id
where user.id>10
group by user.mobile
having count(*)>2
order by user.id
limit 3;
执行顺序
from user
join vip on user.id=vip.id ,join是表示要关联的表,on是连接的条件
where user.id>10
group by user.mobile 根据user.mobile分组
然后先执行count(*)在执行having,查询分组之后数量大于2的分组数据
select 对分组聚合完的表挑选出需要查询的数据
distinct查询出来的数据去重
order by user.id 对去重后的数据排序
limit 3对排序后的数据选出前面3条
CASE表达式
CASE WHEN <表达式> THEN <表达式>
ELSE <表达式>
END
各个分支<表达式>返回的数据类型要统一;
CASE写完后不能丢了END
ELSE可省略但不建议省,没有值时可写 ELSE NULL
索引
通常是B+树,提升读效率,不提升写(要维护索引,开销大)
表中一列或多列进行值排序的结构。加快检索速度但是占用空间,创建维护也花时间。
每次update/insert/delete导致索引更新
唯一索引UNIQUE:每一个索引值只对应唯一的数据记录,对于多列惟一性索引要保证多个值的组合不᯿重
主键索引:定义主键时自动创建,主键一定唯一,唯一不一定主键
聚集索引:按实际物理存放顺序排序
视图是虚拟存在的表,索引不能建在视图上