Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询
找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!
oracle系列文章:
【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?
【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解
【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库
【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则
【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写
【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系
【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句
【12】Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
【13】Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例
【14】Oracle数据库:oracle函数,单行函数,多行函数,upper,lower,initcap,字符串函数
【15】Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate
【16】Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数
【17】Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数
【18】Oracle数据库:条件表达式case when then else end,decode函数,oracle单行函数练习示例
【19】Oracle数据库:oracle多表查询,等值连接,非等值连接,自连接的sql语句和规则
【20】Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+)
【21】Oracle数据库:自然连接natural join,using语句,注意避免写交叉连接
【22】Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
【23】Oracle数据库:oracle组函数,聚合函数,多行函数,avg,sum,min,max,count,group by,having
【24】Oracle数据库:oracle嵌套分组函数(聚合函数),组函数的练习题,挺复杂的,用好decode函数,很有趣
【25】Oracle数据库:子查询、单行子查询,多行子查询,in,any,all语句,子查询的练习案例
————前面这些都是数据库查询语言的重要知识,一定要牢牢掌握和熟悉
后面的相对简单一点
【26】Oracle数据库:数据库操纵语言DML,插入insert into where,更新update where,删除delete where
【27】Oracle数据库:oracle事务处理语言TCL,commit,rollback,savepoint语句
【28】Oracle数据库:oracle数据定义语言DDL,查询表、序列、索引、视图、创建表,修改表的列alter,rename to,删除表数据truncate和表drop
【29】Oracle数据库:oracle用命令定义非空not null,unique唯一性,主键primary key,外键foreign key,check检查,启用enable,禁用disable约束
文章目录
Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询@[TOC](文章目录)oracle创建数据库的其他对象:视图、序列、索引、同义词视图创建简单视图create view as创建复杂视图:表格的来源多,有函数,有分组啥的了解:视图中的DML操作——不建议搞,我们主要为了查内建视图——子查询一定会给你内建一个视图,引用这数据内建视图用于topN分析——之前我写过很多排序算法oracle 分页查询总结
oracle创建数据库的其他对象:视图、序列、索引、同义词
视图
没听懂,什么鬼?????
部门id是80的窗口?
开发过程中,往往是通过视图来简化查询的
但是不建议修改啥的
根据自己的需求,构建视图,然后就不要查整个表了
就查视图
应该就是把子集搞出来,当单独的表????
好像是,这样避免了每次我们都去写半天命令,查询啥的
懂了
它能通过很多表来抽取数据
但我最终视图的目的仍然还是用查看数据,而不是操作
创建简单视图create view as
子查询就是你平常的查询,然后把它as一个视图
好说
view
SQL> create view emp80 as select e.employee_id,e.last_name,e.salary from employees e;View created
其实就是一个子集数据,新表
SQL> select * from emp80;EMPLOYEE_ID LAST_NAME SALARY----------- ------------------------- ----------100 King 24000.00101 Kochhar 17000.00102 De Haan 17000.00103 Hunold 9000.00104 Ernst 6000.00105 Austin 4800.00106 Pataballa4800.00107 Lorentz 4200.00108 Greenberg 1.00109 Faviet 9000.00110 Chen8200.00111 Sciarra 7700.00112 Urman 7800.00113 Popp6900.00114 Raphaely11000.00115 Khoo3100.00116 Baida 2900.00117 Tobias 2800.00118 Himuro 2600.00119 Colmenares 2500.00EMPLOYEE_ID LAST_NAME SALARY----------- ------------------------- ----------120 Weiss 8000.00121 Fripp 8200.00122 Kaufling 7900.00123 Vollman 6500.00124 Mourgos 5800.00125 Nayer 3200.00126 Mikkilineni 2700.00127 Landry 2400.00128 Markle 2200.00129 Bissot 3300.00130 Atkinson 2800.00131 Marlow 2500.00132 Olson 2100.00133 Mallin 3300.00134 Rogers 2900.00135 Gee2400.00136 Philtanker 2200.00137 Ladwig 3600.00138 Stiles 3200.00139 Seo2700.00140 Patel 2500.00EMPLOYEE_ID LAST_NAME SALARY----------- ------------------------- ----------141 Rajs3500.00142 Davies 3100.00143 Matos 2600.00144 Vargas 2500.00145 Russell 14000.00146 Partners13500.00147 Errazuriz 12000.00148 Cambrault 11000.00149 Zlotkey 10500.00150 Tucker 10000.00151 Bernstein9500.00152 Hall9000.00153 Olsen 8000.00154 Cambrault7500.00155 Tuvault 7000.00156 King 10000.00157 Sully 9500.00158 McEwen 9000.00159 Smith 8000.00160 Doran 7500.00161 Sewall 7000.00EMPLOYEE_ID LAST_NAME SALARY----------- ------------------------- ----------162 Vishney 10500.00163 Greene 9500.00164 Marvins 7200.00165 Lee6800.00166 Ande6400.00167 Banda 6200.00168 Ozer 11500.00169 Bloom 10000.00170 Fox9600.00171 Smith 7400.00172 Bates 7300.00173 Kumar 6100.00174 Abel 11000.00175 Hutton 8800.00176 Taylor 8600.00177 Livingston 8400.00178 Grant 7000.00179 Johnson 6200.00180 Taylor 3200.00181 Fleaur 3100.00182 Sullivan 2500.00EMPLOYEE_ID LAST_NAME SALARY----------- ------------------------- ----------183 Geoni 2800.00184 Sarchand 4200.00185 Bull4100.00186 Dellinger3400.00187 Cabrio 3000.00188 Chung 3800.00189 Dilly 3600.00190 Gates 2900.00191 Perkins 2500.00192 Bell4000.00193 Everett 3900.00194 McCain 3200.00195 Jones 2800.00196 Walsh 3100.00197 Feeney 3000.00198 OConnell 2600.00199 Grant 2600.00200 Whalen 4400.00201 Hartstein 13000.00202 Fay6000.00203 Mavris 6500.00EMPLOYEE_ID LAST_NAME SALARY----------- ------------------------- ----------204 Baer 10000.00205 Higgins 1.00206 Gietz 8300.00300 Lu23233.00301 Lu23233.00109 rows selected
再次查询就不用写别名了
视图,并不是存了数据,而是间接去查询原始那个表
SQL> create view emp60 as select e.employee_id id_number,e.last_name name,e.salary * 12 ann_salary from employees e;View createdSQL> select * from emp60;ID_NUMBER NAME ANN_SALARY--------- ------------------------- ----------100 King288000101 Kochhar 204000102 De Haan 204000103 Hunold 108000
还是记住,我们仍然就是是间接查询数据,而不是存储数据哦
SQL> select e.id_number,e.ann_salary from emp60 e;ID_NUMBER ANN_SALARY--------- ----------100288000101204000
有了视图,咱就可以间接查询数据,比较容易了
开发中据说用得很多的
创建复杂视图:表格的来源多,有函数,有分组啥的
只考虑查询语句:
部门名称在departments表
薪水在employees表
分组,部门id
SQL> select d.department_name,min(e.salary),max(e.salary),avg(e.salary) from employees e,departments d where e.department_id = d.department_id group by d.department_name;DEPARTMENT_NAMEMIN(E.SALARY) MAX(E.SALARY) AVG(E.SALARY)------------------------------ ------------- ------------- -------------Administration440044004400Development 23233 23233 23233Accounting8300 1 10154Executive17000 24000 19333.3333333IT 40005760Purchasing2500 110004150Human Resources650065006500Public Relations 10000 10000 10000Shipping 21008200 3475.55555555Finance 6900 1 8601.33333333Sales6100 14000 8955.88235294Marketing 6000 13000950012 rows selected
将上面的命令创建为视图
SQL> create view dept as select d.department_name name,min(e.salary) min,max(e.salary) max,avg(e.salary) avg from employees e,departments d where e.department_id = d.department_id group by d.department_name;View createdSQL> select * from dept;NAME MIN MAX AVG------------------------------ ---------- ---------- ----------Administration 4400 4400 4400Development232332323323233Accounting 8300110154Executive 1700024000 19333.3333IT4200 9000 5760Purchasing 250011000 4150Human Resources 6500 6500 6500Public Relations100001000010000Shipping 2100 8200 3475.55555Finance69001 8601.33333Sales 610014000 8955.88235Marketing 600013000 950012 rows selected
复杂视图,必须在函数后面另起一个别名
这样才好存
我们在定义视时,名称之后直接加括号,按顺序写名字
SQL> create view dept2(name,minsal,maxsal,avgsal) as select d.department_name,min(e.salary),max(e.salary),avg(e.salary) from employees e,departments d where e.department_id = d.department_id group by d.department_name;View createdSQL> select * from dept2;NAME MINSALMAXSALAVGSAL------------------------------ ---------- ---------- ----------Administration 4400 4400 4400Development232332323323233Accounting 8300110154Executive 1700024000 19333.3333IT4200 9000 5760Purchasing 250011000 4150Human Resources 6500 6500 6500Public Relations100001000010000Shipping 2100 8200 3475.55555Finance69001 8601.33333Sales 610014000 8955.88235Marketing 600013000 950012 rows selected
懂了吧
两种方法都行,第二种更简单直白
了解:视图中的DML操作——不建议搞,我们主要为了查
这些可以学,但是不必搞
简单视图可以
复杂视图不能改
SQL> select * from emp80;EMPLOYEE_ID LAST_NAME SALARY----------- ------------------------- ----------100 King 24000.00101 Kochhar 17000.00
这个当时就是简单的视图可以改
把id为100的删除
delete
SQL> delete from emp80 e where e.employee_id=100;delete from emp80 e where e.employee_id=100ORA-02292: 违反完整约束条件 (HR.DEPT_MGR_FK) - 已找到子记录
最终你还是要回去删除原来那个表的
SQL> delete from emp80 e where e.employee_id=190;1 row deletedSQL> rollback;Rollback complete
你知道可以删除就行,最好别这么搞,不直观
最好直接操作本表
为了人家改变视图
那我们拒绝DML操作
SQL> create view emp as select * from employees with read only;create view emp as select * from employees with read onlyORA-00955: 名称已由现有对象使用SQL> create view emp60 as select * from employees with read only;create view emp60 as select * from employees with read onlyORA-00955: 名称已由现有对象使用SQL> create view emp_v as select * from employees with read only;View created
注意,视图的名字和表的名字,不能重复,否则select 没法查
get
SQL> delete from emp_v v where v.LAST_NAME='xxx';delete from emp_v v where v.LAST_NAME='xxx'ORA-42399: 无法对只读视图执行 DML 操作
这样你就被拒绝了,不能操作
美滋滋
还是那句话,不建议通过视图操作dml
那如何通过plsql工具创建视图呢
好说,右击view,新建
通过这个操作来生成命令
create or replace view emp90 asselect employee_id,last_name,department_namefrom employees e,departments dwhere e.department_id=d.department_id
实际上都一样,我们要熟悉命令
选中命令执行,就可以得到视图了
SQL> select * from emp90;EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME----------- ------------------------- ------------------------------100 King Executive101 Kochhar Executive
搞定了
直接跟我drop table 表名;
一个样
之前我还不会删除,现在知道了
SQL> drop view emp50;View droppedSQL> select * from emp50;select * from emp50ORA-00942: 表或视图不存在
灰常简单的
但是这不会删除原表的数据
这也不能回滚哦
内建视图——子查询一定会给你内建一个视图,引用这数据
我们之前已经见过了
本质还是教你怎么搞子查询
部门的最高薪水是子查询哦——系统一定会自己建内建视图
然后再去查雇员表,查其他信息
SQL> select max(e.salary) from employees e group by e.department_id;MAX(E.SALARY)-------------111000700023233240001300010000182001400065009000440013 rows selected
最高薪水搞定
它在子查询时,一定会用这个子查询的内建视图
SQL> select em.last_name,em.department_id,em.salary,ea.maxsal from employees em,(select e.department_id,max(e.salary) maxsal from employees e group by e.department_id) ea where em.department_id=ea.department_id and em.salary < ea.maxsal;LAST_NAME DEPARTMENT_IDSALARYMAXSAL------------------------- ------------- ---------- ----------Faviet100 9000.001Chen 100 8200.001Sciarra 100 7700.001Urman 100 7800.001Popp 100 6900.001Khoo 30 3100.0011000Baida 30 2900.0011000Tobias 30 2800.0011000Himuro 30 2600.0011000Colmenares 30 2500.0011000Kochhar90 17000.0024000De Haan90 17000.0024000Fay 20 6000.0013000Gietz 110 8300.001Weiss 50 8000.00 8200Kaufling 50 7900.00 8200Vollman50 6500.00 8200Mourgos50 5800.00 8200Nayer 50 3200.00 8200Mikkilineni50 2700.00 8200LAST_NAME DEPARTMENT_IDSALARYMAXSAL------------------------- ------------- ---------- ----------Landry 50 2400.00 8200Markle 50 2200.00 8200Bissot 50 3300.00 8200Atkinson 50 2800.00 8200Marlow 50 2500.00 8200Olson 50 2100.00 8200Mallin 50 3300.00 8200Rogers 50 2900.00 8200Gee 50 2400.00 8200Philtanker 50 2200.00 8200Ladwig 50 3600.00 8200Stiles 50 3200.00 8200Seo 50 2700.00 8200Patel 50 2500.00 8200Rajs 50 3500.00 8200Davies 50 3100.00 8200Matos 50 2600.00 8200Vargas 50 2500.00 8200Taylor 50 3200.00 8200Fleaur 50 3100.00 8200Sullivan 50 2500.00 8200LAST_NAME DEPARTMENT_IDSALARYMAXSAL------------------------- ------------- ---------- ----------Geoni 50 2800.00 8200Sarchand 50 4200.00 8200Bull 50 4100.00 8200Dellinger 50 3400.00 8200Cabrio 50 3000.00 8200Chung 50 3800.00 8200Dilly 50 3600.00 8200Gates 50 2900.00 8200Perkins50 2500.00 8200Bell 50 4000.00 8200Everett50 3900.00 8200McCain 50 3200.00 8200Jones 50 2800.00 8200Walsh 50 3100.00 8200Feeney 50 3000.00 8200OConnell 50 2600.00 8200Grant 50 2600.00 8200Partners 80 13500.0014000Errazuriz 80 12000.0014000Cambrault 80 11000.0014000Zlotkey80 10500.0014000LAST_NAME DEPARTMENT_IDSALARYMAXSAL------------------------- ------------- ---------- ----------Tucker 80 10000.0014000Bernstein 80 9500.0014000Hall 80 9000.0014000Olsen 80 8000.0014000Cambrault 80 7500.0014000Tuvault80 7000.0014000King 80 10000.0014000Sully 80 9500.0014000McEwen 80 9000.0014000Smith 80 8000.0014000Doran 80 7500.0014000Sewall 80 7000.0014000Vishney80 10500.0014000Greene 80 9500.0014000Marvins80 7200.0014000Lee 80 6800.0014000Ande 80 6400.0014000Banda 80 6200.0014000Ozer 80 11500.0014000Bloom 80 10000.0014000Fox 80 9600.0014000LAST_NAME DEPARTMENT_IDSALARYMAXSAL------------------------- ------------- ---------- ----------Smith 80 7400.0014000Bates 80 7300.0014000Kumar 80 6100.0014000Abel 80 11000.0014000Hutton 80 8800.0014000Taylor 80 8600.0014000Livingston 80 8400.0014000Johnson80 6200.0014000Ernst 60 6000.00 9000Austin 60 4800.00 9000Pataballa 60 4800.00 9000Lorentz60 4200.00 900095 rows selected
里面的
from employees em,(select e.department_id,max(e.salary) maxsal from employees e group by e.department_id) ea
就是到处em表
同时给后面按照部门划分的,取部门id和部门内部最高的薪水的数据构建内建视图——别名ea
这真挺复杂的
然后
where em.department_id=ea.department_id and em.salary < ea.maxsal;
这句话本质上是两个表的内连接条件
真复杂啊沃日
然后才是选择列展示我们要的信息
SQL> select em.last_name,em.department_id,em.salary,ea.maxsal
这太狗了
内建视图是真的狗
这就是之前说过了的子查询
复杂子查询,返回多个结果,其实就当一个新的表格
它可以临时存储子查询的数据
内建视图用于topN分析——之前我写过很多排序算法
这数据结构与算法中写的很多的东西
做排名的,取topN就行
排序是order by 排序
另外,控制n行
外查询限制行数rownum伪列,分页查询
实际上就是查询特定列,而不是全部数据都展示
没错,否则速度很慢
生成连续的1开始的值
SQL> select rownum,e.last_name from employees e;ROWNUM LAST_NAME---------- -------------------------1 Abel2 Ande3 Atkinson4 Austin5 Baer6 Baida
绝对连续的行号
topN分析是需要用这个行号的
where 指定返回n行,就是取前几条
先找到薪水的排序顺序
再取前三条
SQL> select rownum,e.last_name,e.salary from employees e order by e.salary desc;ROWNUM LAST_NAME SALARY---------- ------------------------- ----------1 King 24000.00108 Lu23233.00109 Lu23233.002 Kochhar 17000.003 De Haan 17000.00
工资降序排序
SQL> select rownum,em.last_name,em.salary from (select e.last_name,e.salary from employees e order by e.salary desc) em where rownum <= 3;ROWNUM LAST_NAME SALARY---------- ------------------------- ----------1 King 24000.002 Lu23233.003 Lu23233.00
首先通过内建视图拿到原始表中排序好的数据
SQL> select rownum,e.last_name,e.salary from employees e order by e.salary desc;ROWNUM LAST_NAME SALARY---------- ------------------------- ----------1 King 24000.00108 Lu23233.00109 Lu23233.002 Kochhar 17000.003 De Haan 17000.00
然后外查询,我们要伪列rownum,然后控制只取前三条
where rownum <= 3;
展示
select rownum,em.last_name,em.salary
搞定
这就是通过内建视图玩topN分析
入职时间
SQL> select e.last_name,e.hire_date from employees e order by e.hire_date;LAST_NAME HIRE_DATE------------------------- -----------De Haan 2001/1/13Mavris2002/6/7Higgins 2002/6/7Baer 2002/6/7Gietz 2002/6/7
前面四个
SQL> select rownum,em.last_name,em.hire_date from (select e.last_name,e.hire_date from employees e order by e.hire_date) em where rownum <=4;ROWNUM LAST_NAME HIRE_DATE---------- ------------------------- -----------1 De Haan 2001/1/132 Mavris2002/6/73 Higgins 2002/6/74 Baer 2002/6/7
rownum就是自己
其他的别加哦
这不就把资格最老的人查出来了呗
好说啊
子查询产生内建视图 然后把这个结果集,给主查询选取前topN条
oracle 分页查询
节约空间
一下子全部打印,gg
我之前遇到过3000数据就炸了
你把查询的东西都放在内存中,就会溢出,资源不够
最好就是分页查询
爽
通过rownum搞定
不同的数据库产品,对于分页的支持不同
oracle通过内建视图中的结果集来展示,通过topN对rownum来取,这个我们上面说了
mysql是通过limit来实现分页的,从第start开始取,取n条,就像字符串截取函数一样
来,我们实践一波
SQL> select em.* from (select rownum rn,e.* from employees e) em where em.rn>=1 and em.rn<=10;RN EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID---------- ----------- -------------------- ------------------------- ------------------------- -------------------- ----------- ---------- ---------- -------------- ---------- -------------1 100 StevenKing SKING 515.123.4567 /6/17 AD_PRES24000.00 902 101 NeenaKochhar NKOCHHAR 515.123.4568 /9/21 AD_VP 17000.00 100 903 102 Lex De Haan LDEHAAN 515.123.4569 2001/1/13 AD_VP 17000.00 100 904 103 Alexander HunoldAHUNOLD 590.423.4567 /1/3 IT_PROG 9000.00 102 605 104 BruceErnst BERNST590.423.4568 /5/21 IT_PROG 6000.00 103 606 105 DavidAustinDAUSTIN 590.423.4569 /6/25 IT_PROG 4800.00 103 607 106 ValliPataballa VPATABAL 590.423.4560 /2/5 IT_PROG 4800.00 103 608 107 DianaLorentz DLORENTZ 590.423.5567 /2/7 IT_PROG 4200.00 103 609 108 NancyGreenberg NGREENBE 515.124.4569 2002/8/17 FI_MGR 1.00 101 10010 109 DanielFavietDFAVIET 515.124.4169 2002/8/16 FI_ACCOUNT 9000.00 108 10010 rows selected
这样就前10条
这经常是pandas包读取Excel表
中的head()函数
对吧
SQL> select em.* from (select rownum rn,e.* from employees e) em where em.rn>=11 and em.rn<=20;RN EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID---------- ----------- -------------------- ------------------------- ------------------------- -------------------- ----------- ---------- ---------- -------------- ---------- -------------11 110 John Chen JCHEN 515.124.4269 /9/28 FI_ACCOUNT 8200.00 108 10012 111 IsmaelSciarra ISCIARRA 515.124.4369 /9/30 FI_ACCOUNT 7700.00 108 10013 112 Jose ManuelUrman JMURMAN 515.124.4469 /3/7 FI_ACCOUNT 7800.00 108 10014 113 Luis Popp LPOPP 515.124.4567 /12/7 FI_ACCOUNT 6900.00 108 10015 114 Den Raphaely DRAPHEAL 515.127.4561 2002/12/7 PU_MAN 11000.00 100 3016 115 Alexander Khoo AKHOO 515.127.4562 /5/18 PU_CLERK3100.00 114 3017 116 ShelliBaida SBAIDA515.127.4563 /12/24 PU_CLERK2900.00 114 3018 117 SigalTobiasSTOBIAS 515.127.4564 /7/24 PU_CLERK2800.00 114 3019 118 Guy HimuroGHIMURO 515.127.4565 /11/15 PU_CLERK2600.00 114 3020 119 KarenColmenaresKCOLMENA 515.127.4566 /8/10 PU_CLERK2500.00 114 3010 rows selected
这有点骚啊
对吧,好说
SQL> select em.* from (select rownum rn,e.* from employees e) em where em.rn between 11 and 20;RN EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID---------- ----------- -------------------- ------------------------- ------------------------- -------------------- ----------- ---------- ---------- -------------- ---------- -------------11 110 John Chen JCHEN 515.124.4269 /9/28 FI_ACCOUNT 8200.00 108 10012 111 IsmaelSciarra ISCIARRA 515.124.4369 /9/30 FI_ACCOUNT 7700.00 108 10013 112 Jose ManuelUrman JMURMAN 515.124.4469 /3/7 FI_ACCOUNT 7800.00 108 10014 113 Luis Popp LPOPP 515.124.4567 /12/7 FI_ACCOUNT 6900.00 108 10015 114 Den Raphaely DRAPHEAL 515.127.4561 2002/12/7 PU_MAN 11000.00 100 3016 115 Alexander Khoo AKHOO 515.127.4562 /5/18 PU_CLERK3100.00 114 3017 116 ShelliBaida SBAIDA515.127.4563 /12/24 PU_CLERK2900.00 114 3018 117 SigalTobiasSTOBIAS 515.127.4564 /7/24 PU_CLERK2800.00 114 3019 118 Guy HimuroGHIMURO 515.127.4565 /11/15 PU_CLERK2600.00 114 3020 119 KarenColmenaresKCOLMENA 515.127.4566 /8/10 PU_CLERK2500.00 114 3010 rows selected
between and
好说
SQL> select em.rn,em.last_name,em.salary from (select rownum rn,e.* from employees e) em where em.rn between 11 and 20;RN LAST_NAME SALARY---------- ------------------------- ----------11 Chen8200.0012 Sciarra 7700.0013 Urman 7800.0014 Popp6900.0015 Raphaely11000.0016 Khoo3100.0017 Baida 2900.0018 Tobias 2800.0019 Himuro 2600.0020 Colmenares 2500.0010 rows selected
有了内建视图,分页非常简单的
rownum分页是要把伪列放在子查询中,因为我们展示的下一个10天
而topN分析是去排序结果的前几条
没有取下几条的能力哦
很完美,学的可以
总结
提示:重要经验:
1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。