1. 1. SQL 备忘录

大二没好好学呜呜呜

SQL 备忘录

  1. 基本语句格式
    • select
    • from
    • where
    • group by 按照一定规则分组,可以有多个参数
      多参数时,若两参数的参照关系完全相同,会归为一类
      多参数时,会按照设置的参数项目对结果进行分类
      必须与聚合函数(count()\sum()等)搭配使用,否则会报错
    • order by 按照一定规则排序
      order by colomn [asc|desc]
      asc:Ascend 升序 desc:Descend 降序
  2. 关键字
  • distinct 保证结果(根据某一列/多列)严格不相同
  • join 连接 见6
  • as 为某项数据设置别名,一般在存在复杂子查询时使用
  • exists 后接内层子查询,返回结果为Yes或No,若外层查询到的数据在内层中满足条件的出现过,则返回Yes
  • limit
    • 用在from后:可以设置搜索的偏移量,提升搜索效率,select * from table limit 起始行,向后偏移量(-1则搜索到表结尾)
    • 用在where后:限制结果数量,搜索到指定数量的记录后即停止搜索,避免搜索全表 select * from table where colomn=? limit 1
  • union 用在两个select整体之间,用来连接搜索结果,要求被连接的两个表拥有严格相似的结构
  • in/not in 用于限制条件,可以限制搜索目标in(ans1,ans2,ans3……)
  • like && ilike 见7
  • having 过滤搜索结果,见8
  1. 内置函数
  • generate_series(start, stop, step),可以用于数字/时间的序列生成,step可以为除了0以外的任何实数
  • row_number() over (order by colomn [asc|desc]) 对于某列的数据按照[升序|降序]生成序列,遇到相同数据不会生成重复序号
  • rank() over (order by colomn [asc|desc]) 对于某列的数据按照[升序|降序]生成序列,遇到相同数据会生成重复序号,相同的数据只占用一个名次
  • dense_rank() over (order by colomn [asc|desc]) 对于某列的数据按照[升序|降序]生成序列,遇到相同数据会生成重复序号,相同的数据占用多个名次
  • NTILE(number) over (order by colomn [asc|desc]) 对于某列的数据按照[升序|降序]生成序列,每个数字项出现number次
  • 聚合函数
    • count
    • sum
  1. 范式
    1. 1NF 数据是不可再分的
      • 解决方法:拆数据项
    2. 2NF 在1NF的基础上,消除了非主属性对于码的部分函数依赖,即保证通过主键可以唯一确定该项每一列的值
      • 解决方法:拆表
    3. 3NF 在2NF的基础上,消除了传递依赖,一个表中不可以存在任何非主属性可以被另一项非主属性唯一确定
      • 解决方法:进一步拆表
  2. 表达式
  • case表达式
    • 简单case表达式
1
2
3
4
5
6
case colomn
when ans1 then rep1
when ans2 then rep2
else rep3
end
<!--指定某一列内容,若值为ans,结果呈现为为rep,else为缺省值,可不配置-->
* 搜索case表达式
1
2
3
4
5
case when condition1 then ans1
when condition2 then ans2
else ans3
end
<!--指定条件,若满足条件,则结果呈现为ans,else为缺省值,可不配置-->
  1. 连接
  • inner join
  • left (outer) join
  • right (outer) join
  • full outer join
    粗浅的理解:
    先发生表结构拼接
join 中文 粗浅的理解 备注
inner join 内连接 A交B
left (outer) join 左(外)连接 A并(A交B) B表中没有的内容留空
right (outer) join 右(外)连接 (A交B)并A A表中没有的内容留空
full outer join 全外连接 A并(A交B)并B AB中互相没有的留空,然后补齐在总表下方

A join B
on 匹配条件
仅保存符合匹配条件的数据库记录

  1. 通配符与模糊搜索
  • like && ilike

    • like在搜索时区分大小写
    • 但ilike不区分
  • 两个通配符

    • _ 占位通配符,该通配符出现的次数严格匹配目标的格式,如_0,则目标字串的第二位一定为0
    • % 不占位通配符,该通配符出现的地方不限制字符数字,可以为0-n个字符填充,如%0,此时目标串含有0则会被选中
      语句示例:select * from table where colomn like ‘%_00’
  • like可以用于复制一张表的结构 (不包含数据)

    create table table2(like table1)

  1. having的用法
  • 区分having和where:
    • where是直接在搜索的时候进行筛选,having是过滤搜索结果
    • 执行顺序:where-→聚合函数-→having
    • having后面可以使用聚合函数,但where不可以