• SQL:查


    简单总结

    Linux 命令——选项——文件

    SQL 语句——子句——表

    数据结构:

    行结构: 平行结构的各个成员

    表:结构体实例的集合(这个不确切:列的高效访问)

    联结表:虚拟表:建立表间关系,结构体保存指针成员?

    游标:限制权限的随机访问(指针?const?)

    增删改查:

    查询操作:降维,映射,聚集/过滤(嵌套过滤,联结过滤)。结果为一维集合:用于成员判定;表

    修改操作:语法上表现为SELECT外添加前缀(与新选项),或缺省SELECT(更具体的语义)

    抽象:

    结果抽象:保存查询结果(视图?),别名

    过程抽象:查询(视图?);修改(存储过程);打包保证原子性(事务处理)

    第四维度:时间

    事务处理&回滚

    三种过滤方法:

    1.where+逻辑表达式

    2.union+select

    3.嵌套

    扩充:正则,相近音

    联结表:虚拟表:建立表间关系

    内联:主键为公共key

    自联

    外联:允许缺省

    其他语言特征:复制引用,复制值

    生成器?

    表操作迟绑定

    表数据结构:结构体

    如何保证原子操作的高效性?存储所用的数据结构(B+-)

    哪些操作影响效率?

    如何识别效率效益的边缘?

    预计算:加载缓存

    计算间独立(条件判断独立)?并发

    查询相关语句如下:

    SELECT

    select 列名 from 表

    结果无序

    排序保证稳定性?增加行号为关键字,作为第二排序key

    select:选列的子集,降维

    from:表:实例集合(列维度全集x实例个数)

    select目标:

    1.指定考察维度,打包一部分列——新的结构体

    2.得到新表,改列名:别名,对列完成值到值映射:计算字段

    3.得到一个集合(是否可以是笛卡尔积?),通过过滤,取原定义域的子集

    检索

    SELECT* 通配符表示所有列(原结构体保持不变)

    是否存在其他取子集操作:

    1.*作为列名的通配符,其他通配符?以列名为匹配对象?

    2.是否存在列名索引切片?

    明确需求,不列出所有列

    1.减少中间结果的存储空间需求

     2.语义准确

    DISTINCT:指定一列,对该列各个行结果去重

         :多列——笛卡尔积非重

    结果切片:取头/尾k个,指定起始位置与偏移(区间)

    其他切片方式?python切片

    --注释:用于测试一部分

    子句:不可单独使用

    排序

    选列的方式:key,index

    默认顺序:无序:底层存储顺序

    过滤

    SELECT

    WHERE  condition  过滤/搜索

    指定各个列的条件,

    效果:1.每列的原定义域缩减为子界

       2.减少行数(实例过滤)

     

    条件判断:NULL比较,其他比较

    WHERE 用逻辑运算符组合过滤条件

    计算顺序:

    0.子句?

    1.运算符优先级(语法默认),括号提升优先级(显式指定)

    2.结合律

    3.运算对象的求值顺序(应该无副作用:select只用于查询,不做修改)

    存疑:

    1.是否为短路操作?

    2.编译时是否将嵌套的过滤条件展开进行优化?

    IN

    与给定域比较:

    连续:区间?

    离散:集合

    可嵌套select

    快于连续OR

    OR线性(短路?)搜索:多次映射(判断)——检查匹配

    IN:并查集?:成员关系

    NOT 语法:整体取反

    +IN BETWEEN EXISTS

    存疑:语法结构一致性:条件前?WHERE后?

    Like 通配符(字符串)

    谓词?操作符?

    通配个数

    1

    0-1

    0-

    1-

    [^ ]

    ^取补,取反

    其他正则?

    空格被认为是有效字符

    类型转换&重新格式化

    字符串——去格式化——对象——操作——格式化

    AS  别名

    计算字段:映射(一对一)

    允许表达式?

    计算字段所用函数

    字符串提取

    类型转换

    日期(成分转换)

    缺点:不可移植,性能

    底层实现?

    文本函数:前缀,长度

        大小写,空格

        soundex:(聚类?距离判定?)

    数值函数:math

    聚集函数:列(组?)——数映射

    汇总(只限一维?)

    统计量:行数,和,max,min,Average

    优化?预计算——更新,按需计算

    其他map-reduce?(划分可指定粒度,可并行计算,随机,规整要求?)

    分组数据

    行聚类

    相同聚类

    映射后聚类(过滤条件完成映射)

    子选项间独立

    GROUP BY

    HAVING

    按列:集合——划分——子集

    select表达式——group by表达式一致

    不允许用别名?

    where过滤行,having过滤分组

    分组前过滤,分组后过滤:实现中是否保持这一顺序?

    实现:独立?并行?

    SELECT子句顺序

    select降维度,映射,别名

    from维度超集x实例个数

    where根据属性筛选实例

    group by分组,聚集值/not

    having

    order by

    子查询 IN (select:单列)

    完全限定列名:表.列,去歧义

    从语言特性

    关系表:信息分解到多个表,一类数据一个表,各表之间用共同值(主键)关联

    保证信息不冗余,减小修改量

    可伸缩性:适应于不断增加的工作量

    联结:一条select语句中关联表,列来自于多个表

    对表的修改:需保证不破坏联结关系

    select

    from 表1,2

    where 表1key=表2key(完全限定名,避免歧义)保证配对

    on——where?

    完全限定名,避免歧义(如果不发生歧义是否可以省略?限定语义更明确)

    以上内联结

    联结表取代嵌套查询

    联结多个表:两两联结

    表别名:减少重复

    SQL是否识别公共子表达式?

    其他别名:select列表,order by子句

    内联结:等值联结 INNER JOIN

    自联结 自然联结 ,外联结

    自联结:使用多个别名 AS A AS B,将表与自身联结

    替代子查询:效率

    自然联结

    去重复列

    表一列:通配符(加限定名);表二列:列出

    外联结:包含没有关联的行 OUT JOIN ON

    ON WHERE

    带聚集函数的联结

    组合查询:多条Select

    如何保证行一致性

    Union

    相同列集合,重复过滤。自动删除重复行(加关键字ALL——不删)

    或相同表达式(使用别名?),聚集值

    必须相同?为何不直接省略?不同的场景?

    过滤子集而非全集

    Union作为分隔

    order by

    最后一条select后

  • 相关阅读:
    多个ROS工作空间常见的问题
    ROS tf(现在都使用tf2了)
    ERROR: cannot launch node of type [teleop/teleop_key]: can't locate node [teleop_key] in package [teleop]
    Linux上静态库和动态库的编译和使用
    【C++】类中this指针的理解
    fatal error: No such file or directory
    g2o使用教程
    如何理解二次型
    <ROS> message_filters 对齐多种传感器数据的时间戳
    linux与C内存管理机制
  • 原文地址:https://www.cnblogs.com/qmcj/p/9269910.html
Copyright © 2020-2023  润新知