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后

 

posted on 2018-07-05 18:23  秦梦超  阅读(89)  评论(0编辑  收藏  举报

导航