[数据库基础]Oracle查询优化改写_02

从今天开始,我跟大家一起学习Oracle的基础知识。孔子曰:“温故而知新,可以为师矣”。学过的东西,也要经常回顾一下,才能记得更牢,用的更溜。
1.限制返回的行数
在查询时,并不是每次都要返回所有数据,比如,只要求返回三条数据。

SELECT * FROM EMP WHERE ROWNUM<=3;

这里写图片描述

但是,
如果直接用rownum=3,来查询会出现什么情况?
这里写图片描述
因为rownum是依次对数据做标识的,就像上学时依据分数排名一样,需要有第一名,后面才有第二名。
正确地取第三行数据的查询应该像下面这样,先生成序号:

SELECT *
  FROM (SELECT ROWNUM AS SN, T.* FROM EMP T WHERE ROWNUM <= 3)
 WHERE SN = 2;

这里写图片描述

2.从表中随机返回n条记录
随机抽取表中的3行数据,可以先按dbms_random随机排序然后取其中的三行。

SELECT * 
FROM (
      SELECT * FROM EMP T ORDER BY DBMS_RANDOM.VALUE()
      )
WHERE ROWNUM <= 3

3.模糊查询

CREATE OR REPLACE VIEW V AS
SELECT 'ABCEDF' AS VNAME 
FROM DUAL
UNION ALL
SELECT '_BCEFG' AS VNAME 
FROM DUAL
UNION ALL
SELECT '_BCEDF' AS VNAME 
FROM DUAL
UNION ALL
SELECT '_\BCEDF' AS VNAME 
FROM DUAL
UNION ALL
SELECT 'XYCEG' AS VNAME 
FROM DUAL;

要求一:查vname中包含字符串‘CDE’的。

select * from v t where t.VNAME like '%CED%'

要求二:查出vname中包含字符串‘_BCE’的。

select * from v t where t.VNAME like '\_BCE%' ESCAPE '\';

注:不加eacape会匹配不上任何一个字符串。
escape把’\’标志为转义字符,而’\’把’_’转义为字符,而非原义(通配符)。
要求三:查出vname中包含字符串‘_\BCEDF’的。

select * from v t where t.vname like '_\\BCE%' escape '\';

4, 按照子串排序
有一种速查法就是按顾客的电话号码尾号的顺序记录,这样在查找的时候就可以快速缩小查找的范围,增强顾客的认可度。如果要按照这种做法排序,应该怎么做到?通过后面几位所需的信息即可。

SELECT T.LAST_NAME AS 名称,
       T.PHONE_NUMBER AS 号码,
       T.SALARY AS 工资,
       SUBSTR(T.PHONE_NUMBER, -4) AS 尾号
FROM HR.EMPLOYEES T
WHERE ROWNUM <=5
ORDER BY 4;

这里写图片描述
由此可见,只要能够将数据查出来,就可以根据相应的信息进行排序。
6,translate
语法格式:TRANSLATE(expr, from_string, to_string)

SELECT TRANSLATE('ab你好bcadefg', 'abcdefg', '1234567')
FROM DUAL

这里写图片描述
from_string和 to_string以字符为单位,对应字符一一替换。
如果to_string为空,那么返回空值。
如果to_string对应的位置没有字符,删除from_string中列出的字符将会被消掉。

7,下面是几个给用户赋权的语句。

grant create  view to Scott;
--赋给Scott创建视图的权限
grant select any table to Scott;
--赋给Scott查询表的权限
grant select any dictionary to SCOTT;
--赋给Scott查询数据字典的权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值