java面试

数据库

一.Oracle分页rownum

(1)rownum 对于等于某值的查询条件:因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
(2)rownum对于大于某值的查询条件:使用子查询方法来解决。注意子查询中的rownum必须要有别名(select * from(select rownum no ,id,name from student) where no>2;)
(3)rownum对于小于某值的查询条件:显然rownum对于rownum<n((n>1的自然数)的条件认为是成立的
(4)rownum和排序:rownum是系统按照记录插入时的顺序给记录排的号(select rownum ,id,name from student order by name;)
2中分页示例:

第一种

SELECT * FROM  
(  
SELECT A.*, ROWNUM RN  
FROM (SELECT * FROM TABLE_NAME) A  
WHERE ROWNUM <= 40  
)  
WHERE RN >= 21

第二种

SELECT * FROM  
(  
SELECT A.*, ROWNUM RN  
FROM (SELECT * FROM TABLE_NAME) A  
)  
WHERE RN BETWEEN 21 AND 40  

第一种效率高于第二种

二、索引
概述:创建索引就是对某些特定列中的数据排序,生成独立的索引表。在某列上创建索引后,如果该列出现在查询条件中,Oracle会自动的引用该索引, 先从索引表中查询出符合条件记录的ROWID,由于ROWID是记录的物理地址,因此可以根据ROWID快速的定位到具体的记录,当创建或者删除一个索引时,不会影响基本的表,无论表上是否有索引,sql语句的用法不变
(1)索引创建:
CREATE [UNIQUE] INDEX index_name ON table_name(column_name[,column_name…])
1. UNIQUE:指定索引列上的值必须是唯一的。称为唯一索引。
2. index_name:指定索引名。
3. tabl_name:指定要为哪个表创建索引。
4. column_name:指定要对哪个列创建索引。我们也可以对多列创建索引;这种索引称为组合索引。
(2)优缺点
优点:提高查询的效率
缺点:在数据增删改时需要更新索引,因此索引对增删改时会有负面影响。建立索引会占用空间
(3)注意:
一个基表不能建太多的索引;
空值不能被索引
只有唯一索引才真正提高速度,一般的索引只能提高30%左右。
(4)索引建立原则总结

1. 如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引

2. 至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)

3. 小表不要建立索引

4. 对于基数大的列适合建立B树索引,对于基数小的列适合建立位图索引

5. 列中有很多空值,但经常查询该列上非空记录时应该建立索引

6. 经常进行连接查询的列应该创建索引

7. 使用create index时要将最常查询的列放在最前面

8. LONG(可变长字符串数据,最长2G)和LONG RAW(可变长二进制数据,最长2G)列不能创建索引

9.限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)
10.oracle创建主键时会自动在该列上创建索引
(5)索引的分类
Single column 单行索引
Concatenated 多行索引
Unique 唯一索引
NonUnique 非唯一索引
Function-based函数索引
Domain 域索引
三.表分区
partition by range
四、触发器 trigger
五、存储过程
详见:https://mp.csdn.net/mdeditor/84836421#
六、.where和having的区别:
SELECT AVG(sal),deptno
FROM emp
WHERE AVG(sal)>2000
GROUP BY deptno
上面的SQL语句会报错,WHERE中不能使用
聚合函数作为过滤条件,原因在于过滤的时
机不对.
WHERE是在第一次检索表时,逐行过滤数据
以产生查询结果集时使用的.
而聚合函数是用来统计,那么前提是有数据
所以要将所有数据查询出来才能统计,之后
才可以进行过滤,这实际是在WHERE之后进行
的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值