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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1141|回复: 4
打印 上一主题 下一主题

[分享] OracleSQL基础要点(一)

[复制链接]

348

主题

3572

帖子

9331

积分

论坛元老

Rank: 8Rank: 8

积分
9331
跳转到指定楼层
楼主
发表于 2020-7-6 17:41:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 万望 于 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是对整个结果集进行数据重复抑制的,意思就是它去重去的是,结果集中所有列的值都相同的记录。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
发表于 2020-7-7 13:45:54 | 只看该作者
学习了
回复

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
板凳
发表于 2020-2-9 17:21:38 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
地板
发表于 2020-4-8 15:59:31 | 只看该作者
学习了。。
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
5#
发表于 2020-4-24 17:55:45 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-25 02:26 , Processed in 0.171285 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表