- 不能部分使用distinct,distinct作用于所有的列。
- 多用 in,not,少用,and or 加()的组合,因为前者的语义更明确一切。
- 聚集函数:count(*)不能用distinct,distinct 可以用于,min ,max ,sum,avg,
- 数据分组:
- group by :子句中列出的所有列都必须是检索列或有效的表达式列。
- select语句中的每一列都必须在group by 子句中给出,除了聚集计算语句。
- having:用于过滤分组,而where 是用于过滤行数据,
- union中:
- 每个查询必须包含相同的列,表达式,或聚集函数,
- 默认取消重复的行,
- 也可以使用 union all 返回所有的匹配行,当然包括重复的。
- 从一个表复制到另一个表:
- select * into table2 from table1
- create table table2 as select * from tabel1
- update :有些dbms支持用一个表更新另一个表的数据,这个需要查文档。
- 删除:delete ,这个地方需要留意的设置外键,防止数据意外删除,
- 如果想全部删除数据,可以用 truncate table ,这样速度更快,自增的ID也可以删除从0开始。
- 视图:
- 视图可以理解为重复使用的SQL语句,
- 事务:
- 可以回退的操作:insert ,update,delete,对于select 不能回退,也没有回退的必要,也不能回退create 和drop 操作。事务操作中可以使用这些操作。
- 理解事务中的保留点
- 游标:
- 出现原因:select 只能得到一组结果集,而无法得到它的下一行,前10行之类的。因此有点游标。
- SQLite中游标称为步骤(step)
- 约束:
- 主键,
- 外键:有助于防止意外删除。
- 唯一性约束,
- 检查约束:
- 索引:
- 索引改善了检索操作的性能,但是降低了数据的插入,修改,和删除的性能,在执行这些操作时,DBMS必须动态的更新索引。
- 触发器:
- 特殊的存储过程。他在特定的数据库活动发生时自动执行。触发器,可以与特定表上的insert ,delete,update操作相关联。
- 触发器与单个的表相关联,
- 可在特定操作之前或者之后进行操作。
- 约束的处理速度比触发器快,