Orcal知识总结

单行函数


dual是数据库中的一个虚表,只有一行一列,不能够修改


1. 字符处理函数(char 、 varchar2 、varchar)
length()、lower()、upper()
substr()—求子串 ,三个参数。
第一个参数表示处理的字段名,
第二个参数:正数表示从正式标号开始,负数表示从倒数几个开始
第三个参数:表示取几个


2. 数值处理函数 number
round—四舍五入
trunc—截取


3. 日期处理函数 date
显示当前系统时间sysdate

 to_char(日期数据,‘日期格式字符串’) 
 to_date('日期字符串',''格式字符串)
 to_date('2014-05-01','yyyy-mm-dd') 不提供的具体信息默认为0
 '03'=3  返回结果为真,隐式类型转换,‘03‘先转化为3,再进行比较,但是不推荐使用,因为会造成某些索引不能使用,降低性能。

日期类型中的重要函数:
sysdate: 获取当前系统时间
to_char(): date–>char 提取日期信息
to_date(): char–>data 生成日期数据
months_between(d1,d2):两个日期数据,相差几个月
last_day:当月的最后一天

. 添加日期数据时,建议使用四位年yyyy避免歧义


4. 其他**
nvl 赋予默认值


多行函数:(多行输入,单行输出)

count()、max()、min()、avg()、sum()


表连接

  1. 什么是表连接?为什么需要表连接?
    1NF:每个属性不可再分;
    2NF:提供pk主属性,保证实体的完整性;
    3:解除了非属性之间的依赖关系,拆表;
    采用三范式的好处,减少数据的冗余,解决了数据的不一致问题,形成一种良好的设计。
    由于业务需求,如果需要将N张表中的数据一次查回,就需要进行多表连接查询。
  2. 如何实现两张表的关系?
    通过主键和外键的关联关系
  3. 表连接的分类?
    内连接:特点:数据会严格匹配 inner join on
    1)等值连接:两张表的关系通过等值方式连接(=);
  select d.name,d.region_id,r.id,r.name from s_dept d,s_region r where d.region_id = r.id (普通写法)
  select d.name,r.name from s_dept d inner jion s_region r on d.region_id = r.id (标准内连接写法)

2)非等值连接:不是使用等于,就相当于不加where或者on的等值关系

select e.first_name,e.salary,g.grade from s_emp,s_salgrade g where e.salary between g.losal and g.hisal(工资在每个范围的薪水级别不相同)

3)自连接:如果一张表的两个字段有关系,可以采用自连接。(这种情况比较少见)

外连接特点:对内连接的补充,解决一个都不能少的问题(outer join)
1)左外连接:保证左边表的记录一个都不能少

要想让左边表的记录一个都不能少,在右边表后添加(+) 标准的sql:左表left outer join 右表on连接条件

2)右外连接(和左外连接相反)
3)全外连接:保证两边表的记录一个都不能少

标准sql:左表 full outer join 右表 on 连接条件

组函数

count()、max()、min()、avg()、sum()

group by 分组字段 having 分组后的过滤条件
空值影响:绝大部分函数会忽略空值,空值的转换函数nvl,如果是null的时候就用默认值代替。
总结:avg()以及大多数组函数不会将空值考虑在内,组函数处理的是所有的非空值。

子查询


子查询:当一个问题比较复杂时,可以分解为若干个问题,依次解决,其中包括主查询和子查询,形成了查询的嵌套。先执行子查询,返回结果后再执行主查询。
子查询的分类:非关联子查询和关联子查询;
子查询的结果:一般都有结果

  1. 一条记录、单值
  2. 多条记录,多值
  3. 无记录、无值 (几乎不用)
    结论:where子句中不能使用组函数,where是分组前的过滤。having是分组后的过滤。子查询的结果可以模拟成一张表,和其他表进行连接建立一种关联关系。

写SQL的要领:看清表结构(E-R模型);分析表中业务数据(数据分布、规律、特点)语法正确–>结构良好–>结果逻辑是否合理,符合业务需求–>高性能(优化)


Orcal特殊的语法

  1. 序列 sequence
    定义:序列sequence 和表table 、视图view、索引index等都属于数据库中的一种对象,都可以通过create语句创建。
    用途:id一般于业务无关,取值的值用户无需知晓。将序列作为id的值插入表的记录中;

  2. 伪列:可以凑够表中查询,但不能插入、更新和删除。

rowid:每一行记录分配一个行的物理地址,rowid就是返回该行的地址。rowid属于物理值。rowid是由系统负责使用的。
rownum:系统都会为返回的行指定一个行号,从1开始递增。逻辑值(相对的)广泛的应用于分页查询。rownum在排序之前就已经分配了,可以在排完序后在分配rownum,这样的rownum就是按照排序后的结果按大到小的排序。rownum分页查询时,只能从1开始,要解决这种问题,就给rowunm起别名,然后通过子查询嵌套的方式来实现。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值