astak16/blog-mysql

读书笔记:《SQL 必知必会》

Opened this issue · 0 comments

  • 表是一种结构化的文件,可用来存储某种特定类型的数据,表是某种特定数据类型的结构化清单
  • 通配符 % 有个例外,不会匹配到 null 的行,比如: name = '%' ,匹配不到 name = null 的数据
  • select curdate() 返回当前日期和时间
  • 文本处理函数
    • 去除两边空格:trim() ,去掉右边的空格:rtrim() ,去除左边的空格:ltrim()
    • right(str, index) ,获取 str 的第 index 位右边的字符串,index0 开始
      • 比如: select right('abcdefg', 3) // efg
    • left(str, index) ,获取 str 的第 index 位左边的字符串,index0 开始
      • 比如 select left('abcdefg', 3) // abc
    • soundex(str) 根据发音匹配文本,如果发音差不多则返回 1 否则返回 0
      • select soundex('Michael Green') = soundex('Michelle Green')
  • 聚合函数
    • avg() 忽略列值为 null 的行
    • count()
      • count(1) 或者 count(*) 不会忽略列值为 null 的行
      • count(col_name) 会忽略列值为 null 的行
    • max() 忽略列值为 null 的行
      • 如果是文本,返回排序后的该列最后一行
    • min() 忽略列值为 null 的行
      • 如果是文本,返回排序后的该列第一行
    • sum() 忽略列值为 null 的行
      这五个聚合函数,默认是 all,如果只计算不同的值,指定 distinct
    • 如果使用 distinct 必须使用列名,不能用 * 或者表达式
  • where 在数据分组前进行过滤, having 在数据分组后进行过滤
    • where 用于标准的行级过滤
    • having 需要配合 group by 使用
  • 子查询是嵌套在其他查询中的查询
  • union
    • 可以对第一个名使用别名,最后输出的结果是使用 product_name
      select product_name ...
      union
      select productName ...
    • 从结果集中自动去除重复的行,如果需要匹配所有的行应该使用 union all
  • 插入数据,insert into ...
    • insert into <table_name>( ... ) select ... 可以将 select 语句的结果插入表中
  • 创建表 create table ...
    • create table <table_name> as select ... 可以将 select 语句的结果创建一张新表
  • 在使用 updatedelete 时,不要省略 where 子句
    • 如果想删除所有的行,可以使用 truncate table <table_name>
    • 在使用 updatedelete 时,先用 select 进行测试,保证过滤的结果是正确的