SQL的相关计算和原理。

SQL从数据分析的角度上来讲,相对比较容易掌握,从编程的角度上进一步理解SQL的相关计算和原理。

从数据分析的角度,而不是业务运行的角度看SQL,

这些命令常用于查看数据以及备份库的数据查看等方式 
命令式编程--还原论的思维方式--即将高级现象还原为低级的基本现象
声明式编程--机体论的思维方式-即作为一个整体
     SQL的编程思路
        集合论、群论以及谓词逻辑
         把数据看成关系的集合,再把关系看成命题的集合
        SQL中的三值逻辑 即 True False 以及NULL
        从逻辑学、集合论的角度讲述SQL和关系模型的理论,深刻理解面向集合思维
        遍历--从集合的角度看 --  笛卡尔积
        case表达式
       表数据中没有顺序
       关系具有封闭性--即运算的输出可以直接作为其它运算的输入
       在ISO SQL规定了这样的函数为开窗函数,在 Oracle中则被称为分析函数,而在DB2中则被称为OLAP函数。

0.schema

数据库系统通过表和视图的形式把关于自身的信息提供出来
例如mysql中的 information_schema  ,表名-字段-主键和外键-索引-约束          
      01.查询mysql数据库下有哪些schema命令 ,有哪些数据库
       select * from information_schema.schemata;         
       02.获取数据库中的表
          select TABLE_NAME,TABLE_TYPE,TABLE_ROWS,TABLE_COMMENT,ENGINE,CREATE_TIME,UPDATE_TIME, CHECK_TIME 
          from information_schema.TABLES
          where TABLE_SCHEMA='mytest' ;
     03.获取表中的字段
      select  COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE,COLUMN_COMMENT 
      from information_schema.COLUMNS 
        where TABLE_NAME='emp' ;
    04.利用information_schema了解数据库以及批量生成SQL
     SELECT  concat('select count(*)  from ', TABLE_NAME, ';' )
      FROM information_schema.TABLES    
      WHERE table_schema = 'mytest';
不同的地方:
  01.数据存储说明
    hive里导入数据只是简单的将数据移动到表所在的目录中。
    需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive就可以解析数据
  02.执行的顺讯
  03. group by 中字段,在select中是否有其他的字段,以及分组top n

1.数值处理-- 日常的数值处理工作。

求和-计数-求平均-最大值和最小值
累计求和 -- 使用标量子查询 如果有支持的对应窗口函数
累计乘积--注意添加防范措施--考虑零和NULL的情况
累计差
计算众数和中位数,计算切尾均值

2.字符串的功能

字符串处理擅长做哪些以及不擅长做哪些。了解使用的数据库提供的一些常见功能
     辅助列--自定义列
  01.遍历字符串:
    select substr(e.ename, iter.pos, 1) as C
      from (select ename from emp where ename='KING')e,(select id as pos from  t10  )iter
       where iter.pos <= length(e.ename)
    一张辅助表--自加的整数表,且表的行数不小于字符串的长度
    表连接--笛卡尔积---产生笛卡尔积来模拟循环操作的第一步
    使用where条件跳出循环
    三--使用substr以及生成的行数来提取字符串 
  02.统计字符串出现的次数
    字符串长度 -- 减去 不含有相应字符的字符串的长度
    除以 字符的个数      
  03. 删除不想要的字符
      translate  和 replace  --- 不想要的字符比较明确
       translate  和 rpad   ----  以及通过正则表达式

3.日期计算

日期的格式-日期的计算
 年、月、日、周、季度、时、分、秒、时间戳
 日期间隔
 实时SQL计算:时间窗口函数

4.层次查询

暂时没关注

5.报表和数据仓库

数据变换
1.列数据和行数据的变换
    rollup
    cube
  01.group by empid,custid,year with rollup
  (null,null,null)表示最后的聚合
  empid,null,null)表示仅对(empid)一列进行分组的聚合结果
  (empid,custid,null)表示对(empid,custid)两列进行分组的聚合结果
  (empid,custid,year)表示对这3列进行分组的聚合结果——也就是group by本身聚集
  02.rollup 如果分组的列包含NULL值,那么rollup的结果可能不正确,因为在rollup中进行的分组统计时,null具有特殊意义。
  因此在进行rollup时可以先将null转换成一个不可能存在的值,或者没有特别含义的值
    同理适用于with cube
    当Cube 或者 RollUp 的分组条件>=5的时候,会提示你在聚合函数中不能使用 distinct 会提示错误信息
2.行列之间的变换

其他:NoSQL

0.Apache Calcite
1.Apache Flink SQL
2.Apache Spark --Structured Streaming、 Spark SQL
3.Apache Hive

参考:

《SQL 经典实例》
《SQL进阶教程》

blogroll

social