2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,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约束
没听懂,什么鬼?????
部门id是80的窗口?
开发过程中,往往是通过视图来简化查询的
但是不建议修改啥的
根据自己的需求,构建视图,然后就不要查整个表了
就查视图
应该就是把子集搞出来,当单独的表????
好像是,这样避免了每次我们都去写半天命令,查询啥的
懂了
它能通过很多表来抽取数据
但我最终视图的目的仍然还是用查看数据,而不是操作
子查询就是你平常的查询,然后把它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.00
101 Kochhar 17000.00
102 De Haan 17000.00
103 Hunold 9000.00
104 Ernst 6000.00
105 Austin 4800.00
106 Pataballa 4800.00
107 Lorentz 4200.00
108 Greenberg 12008.00
109 Faviet 9000.00
110 Chen 8200.00
111 Sciarra 7700.00
112 Urman 7800.00
113 Popp 6900.00
114 Raphaely 11000.00
115 Khoo 3100.00
116 Baida 2900.00
117 Tobias 2800.00
118 Himuro 2600.00
119 Colmenares 2500.00
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
120 Weiss 8000.00
121 Fripp 8200.00
122 Kaufling 7900.00
123 Vollman 6500.00
124 Mourgos 5800.00
125 Nayer 3200.00
126 Mikkilineni 2700.00
127 Landry 2400.00
128 Markle 2200.00
129 Bissot 3300.00
130 Atkinson 2800.00
131 Marlow 2500.00
132 Olson 2100.00
133 Mallin 3300.00
134 Rogers 2900.00
135 Gee 2400.00
136 Philtanker 2200.00
137 Ladwig 3600.00
138 Stiles 3200.00
139 Seo 2700.00
140 Patel 2500.00
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
141 Rajs 3500.00
142 Davies 3100.00
143 Matos 2600.00
144 Vargas 2500.00
145 Russell 14000.00
146 Partners 13500.00
147 Errazuriz 12000.00
148 Cambrault 11000.00
149 Zlotkey 10500.00
150 Tucker 10000.00
151 Bernstein 9500.00
152 Hall 9000.00
153 Olsen 8000.00
154 Cambrault 7500.00
155 Tuvault 7000.00
156 King 10000.00
157 Sully 9500.00
158 McEwen 9000.00
159 Smith 8000.00
160 Doran 7500.00
161 Sewall 7000.00
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
162 Vishney 10500.00
163 Greene 9500.00
164 Marvins 7200.00
165 Lee 6800.00
166 Ande 6400.00
167 Banda 6200.00
168 Ozer 11500.00
169 Bloom 10000.00
170 Fox 9600.00
171 Smith 7400.00
172 Bates 7300.00
173 Kumar 6100.00
174 Abel 11000.00
175 Hutton 8800.00
176 Taylor 8600.00
177 Livingston 8400.00
178 Grant 7000.00
179 Johnson 6200.00
180 Taylor 3200.00
181 Fleaur 3100.00
182 Sullivan 2500.00
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
183 Geoni 2800.00
184 Sarchand 4200.00
185 Bull 4100.00
186 Dellinger 3400.00
187 Cabrio 3000.00
188 Chung 3800.00
189 Dilly 3600.00
190 Gates 2900.00
191 Perkins 2500.00
192 Bell 4000.00
193 Everett 3900.00
194 McCain 3200.00
195 Jones 2800.00
196 Walsh 3100.00
197 Feeney 3000.00
198 OConnell 2600.00
199 Grant 2600.00
200 Whalen 4400.00
201 Hartstein 13000.00
202 Fay 6000.00
203 Mavris 6500.00
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
204 Baer 10000.00
205 Higgins 12008.00
206 Gietz 8300.00
300 Lu 23233.00
301 Lu 23233.00
109 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 created
SQL> select * from emp60;
ID_NUMBER NAME ANN_SALARY
--------- ------------------------- ----------
100 King 288000
101 Kochhar 204000
102 De Haan 204000
103 Hunold 108000
还是记住,我们仍然就是是间接查询数据,而不是存储数据哦
SQL> select e.id_number,e.ann_salary from emp60 e;
ID_NUMBER ANN_SALARY
--------- ----------
100 288000
101 204000
有了视图,咱就可以间接查询数据,比较容易了
开发中据说用得很多的
只考虑查询语句:
部门名称在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_NAME MIN(E.SALARY) MAX(E.SALARY) AVG(E.SALARY)
------------------------------ ------------- ------------- -------------
Administration 4400 4400 4400
Development 23233 23233 23233
Accounting 8300 12008 10154
Executive 17000 24000 19333.3333333
IT 4200 9000 5760
Purchasing 2500 11000 4150
Human Resources 6500 6500 6500
Public Relations 10000 10000 10000
Shipping 2100 8200 3475.55555555
Finance 6900 12008 8601.33333333
Sales 6100 14000 8955.88235294
Marketing 6000 13000 9500
12 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 created
SQL> select * from dept;
NAME MIN MAX AVG
------------------------------ ---------- ---------- ----------
Administration 4400 4400 4400
Development 23233 23233 23233
Accounting 8300 12008 10154
Executive 17000 24000 19333.3333
IT 4200 9000 5760
Purchasing 2500 11000 4150
Human Resources 6500 6500 6500
Public Relations 10000 10000 10000
Shipping 2100 8200 3475.55555
Finance 6900 12008 8601.33333
Sales 6100 14000 8955.88235
Marketing 6000 13000 9500
12 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 created
SQL> select * from dept2;
NAME MINSAL MAXSAL AVGSAL
------------------------------ ---------- ---------- ----------
Administration 4400 4400 4400
Development 23233 23233 23233
Accounting 8300 12008 10154
Executive 17000 24000 19333.3333
IT 4200 9000 5760
Purchasing 2500 11000 4150
Human Resources 6500 6500 6500
Public Relations 10000 10000 10000
Shipping 2100 8200 3475.55555
Finance 6900 12008 8601.33333
Sales 6100 14000 8955.88235
Marketing 6000 13000 9500
12 rows selected
懂了吧
两种方法都行,第二种更简单直白
这些可以学,但是不必搞
简单视图可以
复杂视图不能改
SQL> select * from emp80;
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
100 King 24000.00
101 Kochhar 17000.00
这个当时就是简单的视图可以改
把id为100的删除
delete
SQL> delete from emp80 e where e.employee_id=100;
delete from emp80 e where e.employee_id=100
ORA-02292: 违反完整约束条件 (HR.DEPT_MGR_FK) - 已找到子记录
最终你还是要回去删除原来那个表的
SQL> delete from emp80 e where e.employee_id=190;
1 row deleted
SQL> rollback;
Rollback complete
你知道可以删除就行,最好别这么搞,不直观
最好直接操作本表
为了人家改变视图
那我们拒绝DML操作
SQL> create view emp as select * from employees with read only;
create view emp as select * from employees with read only
ORA-00955: 名称已由现有对象使用
SQL> create view emp60 as select * from employees with read only;
create view emp60 as select * from employees with read only
ORA-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 as
select employee_id,last_name,department_name
from employees e,departments d
where e.department_id=d.department_id
实际上都一样,我们要熟悉命令
选中命令执行,就可以得到视图了
SQL> select * from emp90;
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
100 King Executive
101 Kochhar Executive
搞定了
直接跟我drop table 表名;
一个样
之前我还不会删除,现在知道了
SQL> drop view emp50;
View dropped
SQL> select * from emp50;
select * from emp50
ORA-00942: 表或视图不存在
灰常简单的
但是这不会删除原表的数据
这也不能回滚哦
我们之前已经见过了
本质还是教你怎么搞子查询
部门的最高薪水是子查询哦——系统一定会自己建内建视图
然后再去查雇员表,查其他信息
SQL> select max(e.salary) from employees e group by e.department_id;
MAX(E.SALARY)
-------------
12008
11000
7000
23233
24000
13000
10000
12008
8200
14000
6500
9000
4400
13 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_ID SALARY MAXSAL
------------------------- ------------- ---------- ----------
Faviet 100 9000.00 12008
Chen 100 8200.00 12008
Sciarra 100 7700.00 12008
Urman 100 7800.00 12008
Popp 100 6900.00 12008
Khoo 30 3100.00 11000
Baida 30 2900.00 11000
Tobias 30 2800.00 11000
Himuro 30 2600.00 11000
Colmenares 30 2500.00 11000
Kochhar 90 17000.00 24000
De Haan 90 17000.00 24000
Fay 20 6000.00 13000
Gietz 110 8300.00 12008
Weiss 50 8000.00 8200
Kaufling 50 7900.00 8200
Vollman 50 6500.00 8200
Mourgos 50 5800.00 8200
Nayer 50 3200.00 8200
Mikkilineni 50 2700.00 8200
LAST_NAME DEPARTMENT_ID SALARY MAXSAL
------------------------- ------------- ---------- ----------
Landry 50 2400.00 8200
Markle 50 2200.00 8200
Bissot 50 3300.00 8200
Atkinson 50 2800.00 8200
Marlow 50 2500.00 8200
Olson 50 2100.00 8200
Mallin 50 3300.00 8200
Rogers 50 2900.00 8200
Gee 50 2400.00 8200
Philtanker 50 2200.00 8200
Ladwig 50 3600.00 8200
Stiles 50 3200.00 8200
Seo 50 2700.00 8200
Patel 50 2500.00 8200
Rajs 50 3500.00 8200
Davies 50 3100.00 8200
Matos 50 2600.00 8200
Vargas 50 2500.00 8200
Taylor 50 3200.00 8200
Fleaur 50 3100.00 8200
Sullivan 50 2500.00 8200
LAST_NAME DEPARTMENT_ID SALARY MAXSAL
------------------------- ------------- ---------- ----------
Geoni 50 2800.00 8200
Sarchand 50 4200.00 8200
Bull 50 4100.00 8200
Dellinger 50 3400.00 8200
Cabrio 50 3000.00 8200
Chung 50 3800.00 8200
Dilly 50 3600.00 8200
Gates 50 2900.00 8200
Perkins 50 2500.00 8200
Bell 50 4000.00 8200
Everett 50 3900.00 8200
McCain 50 3200.00 8200
Jones 50 2800.00 8200
Walsh 50 3100.00 8200
Feeney 50 3000.00 8200
OConnell 50 2600.00 8200
Grant 50 2600.00 8200
Partners 80 13500.00 14000
Errazuriz 80 12000.00 14000
Cambrault 80 11000.00 14000
Zlotkey 80 10500.00 14000
LAST_NAME DEPARTMENT_ID SALARY MAXSAL
------------------------- ------------- ---------- ----------
Tucker 80 10000.00 14000
Bernstein 80 9500.00 14000
Hall 80 9000.00 14000
Olsen 80 8000.00 14000
Cambrault 80 7500.00 14000
Tuvault 80 7000.00 14000
King 80 10000.00 14000
Sully 80 9500.00 14000
McEwen 80 9000.00 14000
Smith 80 8000.00 14000
Doran 80 7500.00 14000
Sewall 80 7000.00 14000
Vishney 80 10500.00 14000
Greene 80 9500.00 14000
Marvins 80 7200.00 14000
Lee 80 6800.00 14000
Ande 80 6400.00 14000
Banda 80 6200.00 14000
Ozer 80 11500.00 14000
Bloom 80 10000.00 14000
Fox 80 9600.00 14000
LAST_NAME DEPARTMENT_ID SALARY MAXSAL
------------------------- ------------- ---------- ----------
Smith 80 7400.00 14000
Bates 80 7300.00 14000
Kumar 80 6100.00 14000
Abel 80 11000.00 14000
Hutton 80 8800.00 14000
Taylor 80 8600.00 14000
Livingston 80 8400.00 14000
Johnson 80 6200.00 14000
Ernst 60 6000.00 9000
Austin 60 4800.00 9000
Pataballa 60 4800.00 9000
Lorentz 60 4200.00 9000
95 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就行
排序是order by 排序
另外,控制n行
外查询限制行数rownum伪列,分页查询
实际上就是查询特定列,而不是全部数据都展示
没错,否则速度很慢
生成连续的1开始的值
SQL> select rownum,e.last_name from employees e;
ROWNUM LAST_NAME
---------- -------------------------
1 Abel
2 Ande
3 Atkinson
4 Austin
5 Baer
6 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.00
108 Lu 23233.00
109 Lu 23233.00
2 Kochhar 17000.00
3 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.00
2 Lu 23233.00
3 Lu 23233.00
首先通过内建视图拿到原始表中排序好的数据
SQL> select rownum,e.last_name,e.salary from employees e order by e.salary desc;
ROWNUM LAST_NAME SALARY
---------- ------------------------- ----------
1 King 24000.00
108 Lu 23233.00
109 Lu 23233.00
2 Kochhar 17000.00
3 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/13
Mavris 2002/6/7
Higgins 2002/6/7
Baer 2002/6/7
Gietz 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/13
2 Mavris 2002/6/7
3 Higgins 2002/6/7
4 Baer 2002/6/7
rownum就是自己
其他的别加哦
这不就把资格最老的人查出来了呗
好说啊
子查询产生内建视图
然后把这个结果集,给主查询选取前topN条
节约空间
一下子全部打印,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 Steven King SKING 515.123.4567 2003/6/17 AD_PRES 24000.00 90
2 101 Neena Kochhar NKOCHHAR 515.123.4568 2005/9/21 AD_VP 17000.00 100 90
3 102 Lex De Haan LDEHAAN 515.123.4569 2001/1/13 AD_VP 17000.00 100 90
4 103 Alexander Hunold AHUNOLD 590.423.4567 2006/1/3 IT_PROG 9000.00 102 60
5 104 Bruce Ernst BERNST 590.423.4568 2007/5/21 IT_PROG 6000.00 103 60
6 105 David Austin DAUSTIN 590.423.4569 2005/6/25 IT_PROG 4800.00 103 60
7 106 Valli Pataballa VPATABAL 590.423.4560 2006/2/5 IT_PROG 4800.00 103 60
8 107 Diana Lorentz DLORENTZ 590.423.5567 2007/2/7 IT_PROG 4200.00 103 60
9 108 Nancy Greenberg NGREENBE 515.124.4569 2002/8/17 FI_MGR 12008.00 101 100
10 109 Daniel Faviet DFAVIET 515.124.4169 2002/8/16 FI_ACCOUNT 9000.00 108 100
10 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 2005/9/28 FI_ACCOUNT 8200.00 108 100
12 111 Ismael Sciarra ISCIARRA 515.124.4369 2005/9/30 FI_ACCOUNT 7700.00 108 100
13 112 Jose Manuel Urman JMURMAN 515.124.4469 2006/3/7 FI_ACCOUNT 7800.00 108 100
14 113 Luis Popp LPOPP 515.124.4567 2007/12/7 FI_ACCOUNT 6900.00 108 100
15 114 Den Raphaely DRAPHEAL 515.127.4561 2002/12/7 PU_MAN 11000.00 100 30
16 115 Alexander Khoo AKHOO 515.127.4562 2003/5/18 PU_CLERK 3100.00 114 30
17 116 Shelli Baida SBAIDA 515.127.4563 2005/12/24 PU_CLERK 2900.00 114 30
18 117 Sigal Tobias STOBIAS 515.127.4564 2005/7/24 PU_CLERK 2800.00 114 30
19 118 Guy Himuro GHIMURO 515.127.4565 2006/11/15 PU_CLERK 2600.00 114 30
20 119 Karen Colmenares KCOLMENA 515.127.4566 2007/8/10 PU_CLERK 2500.00 114 30
10 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 2005/9/28 FI_ACCOUNT 8200.00 108 100
12 111 Ismael Sciarra ISCIARRA 515.124.4369 2005/9/30 FI_ACCOUNT 7700.00 108 100
13 112 Jose Manuel Urman JMURMAN 515.124.4469 2006/3/7 FI_ACCOUNT 7800.00 108 100
14 113 Luis Popp LPOPP 515.124.4567 2007/12/7 FI_ACCOUNT 6900.00 108 100
15 114 Den Raphaely DRAPHEAL 515.127.4561 2002/12/7 PU_MAN 11000.00 100 30
16 115 Alexander Khoo AKHOO 515.127.4562 2003/5/18 PU_CLERK 3100.00 114 30
17 116 Shelli Baida SBAIDA 515.127.4563 2005/12/24 PU_CLERK 2900.00 114 30
18 117 Sigal Tobias STOBIAS 515.127.4564 2005/7/24 PU_CLERK 2800.00 114 30
19 118 Guy Himuro GHIMURO 515.127.4565 2006/11/15 PU_CLERK 2600.00 114 30
20 119 Karen Colmenares KCOLMENA 515.127.4566 2007/8/10 PU_CLERK 2500.00 114 30
10 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 Chen 8200.00
12 Sciarra 7700.00
13 Urman 7800.00
14 Popp 6900.00
15 Raphaely 11000.00
16 Khoo 3100.00
17 Baida 2900.00
18 Tobias 2800.00
19 Himuro 2600.00
20 Colmenares 2500.00
10 rows selected
有了内建视图,分页非常简单的
rownum分页是要把伪列放在子查询中,因为我们展示的下一个10天
而topN分析是去排序结果的前几条
没有取下几条的能力哦
很完美,学的可以
提示:重要经验:
1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。