度量快速开发平台-专业、快速的软件定制快开平台

标题: OracleSQL基础要点(一) [打印本页]

作者: fteair    时间: 2020-2-9 17:21
学习了
作者: caixuqad    时间: 2020-4-8 15:59
学习了。。
作者: caixuqad    时间: 2020-4-24 17:55

作者: 万望    时间: 2020-7-6 17:41
标题: OracleSQL基础要点(一)
本帖最后由 万望 于 2017-2-6 17:43 编辑

Oracle SQL 基础要点

本文是学习《程序员的SQL金典》时的读书摘要,记录一些自己不太熟悉或者很重要的知识点。方便后期对照复习。

1.各种主流数据库的优缺点比较
- DB2由IBM开发,功能和性能非常优秀,不过对开发人员的要求比较高。其在SQL扩展上比较保守,对数据类型要求也非常严格,经常被称为“最难用的数据库系统”。
- Oracle吸收了DB2的优点,同时避免了IBM的官僚体制与过度学术化。因此,其无论是功能、性能还是可用性都是非常好的。
- Microsoft SQL Server可用性非常好,学习成本低。但是只能运行于Windows平台,在大数据量情况下表现都不是很好。
- MySQL是开源的,适用于小型的系统架构。

2.关于“索引”的详细理解
索引是在数据插入或者删除时候就更新的,它对需要建立索引的一列事先进行了排序操作,并记录在磁盘空间中,而表中原始的数据行之间是没有顺序这个概念的。因此,当查找按照索引走的时候,会按照某种算法(比如,二分查找)以最快效率找到需要的记录,而并非全表扫描。

3.插入或者删除数据时的“外键约束”
A表中的记录有一列k是外键,引用了B表中的某一列z,在往A表中插入数据的时候,k列的值必须在B表的z列存在,否则就不能将此记录插入A表。
同样的,如果删除B表中的数据时,要先删除A表中对B表z列的外键约束记录,然后才能删除B表中的某行数据。

4.SQL中的聚合函数
MAX、MIN、AVG、SUM、COUNT(count会忽略null的记录)

5.BETWEEN … AND …的用法
between … and … 是包含边界值的,比如between 2 and 4,代表的是[2,4]。一般而言,数据库系统对此进行了专门的优化,因此在检测范围值的时候应该优先使用between … and …,当然,如果你想使用开区间的话,就不适合使用这个了。

6.Where 1 = 1的由来及其危害
来源于“聪明的”程序员便于随时增加where后面的条件。详情查看《程序员的SQL金典》4.2.6节“低效的Where 1=1”。
之所以说它低效有危害,是因为在where后面添加了“1=1”之后,其余的条件就无法使用索引等优化查询策略,数据库会被迫对每行数据进行扫描。

7.关于rownum和row_number()的区别和使用
rownum和row_number()都是用来限制结果集行数的,推荐使用窗口函数row_number(),使用方法如下:

  1. select * from
  2. (select row_number() over(order by salary desc) row_num,name,salary,age from employee) a
  3. where a.row_num >=3 and a.row_num <= 5
复制代码

如上SQL使用between … and … 也是可以的。
但是rownum就不是那么容易的了。
首先oracle中无需我们自己计算行号,它为每个结果集都增加一个默认的表示行号的列,这个列的名称就是rownum。一般地,关于rownum的使用如下:

  1. select rownum,name,salary,age from employee where rownum <6;
复制代码

但是这样使用就会出现问题:

  1. select rownum,name,salary,age from employee where rownum >3 and rownum <6;

复制代码

或者

  1. select rownum,name,salary,age from employee where rownum between 3 and 6;

复制代码

以上两种由于加了下限,所以检索的结果一直都是空集。这是为什么?
书上说,当检索第一行记录时,其rownum为1,不符合条件,所以没有被放到检索结果中,当rownum为2时,因为第一条记录没有被放到结果集中,所以此时的rownum仍然为1。如此类推,永远没有记录符合rownum的条件。
所以,碰到同时需要满足上限和下限的限制记录数的情况,请使用窗口函数row_number()。

8.distinct的一些说明
distinct是对整个结果集进行数据重复抑制的,意思就是它去重去的是,结果集中所有列的值都相同的记录。



作者: 张兴康    时间: 2020-7-7 13:45
学习了




欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2