Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询

Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询

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约束


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.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

懂了吧
两种方法都行,第二种更简单直白

了解:视图中的DML操作——不建议搞,我们主要为了查

在这里插入图片描述

这些可以学,但是不必搞
在这里插入图片描述
简单视图可以
复杂视图不能改

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分析——之前我写过很多排序算法

在这里插入图片描述
这数据结构与算法中写的很多的东西

做排名的,取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条

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 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,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Oracle数据库中,可以使用CREATE VIEW语句来创建视图视图是基于表的逻辑表,可以简化用户对数据的理解,隐藏表结构的复杂性,并提供更好的安全性级别。视图可以通过提供用户所需的基表中的数据来简化查询,也可以通过限制对一组预定义的表行或列的访问来提供更高的安全性级别。此外,视图还可以提供不同于基表的角度来呈现数据,并隔离应用程序对基表的更改。 视图可以分为标准视图、内嵌视图、对象视图和物化视图。标准视图是使用CREATE VIEW语句创建的存储查询,保存在数据字典中作为一个方案对象存在。内嵌视图是在SQL查询语句中直接包含一个子查询,不会保存到数据字典中。对象视图可以将标准表或视图转换为对象类型的视图,利用对象的封装行、继承等特性,为开发人员提供灵活的处理方式。物化视图是真实地存储数据视图,用于汇总、计算、复制和分发数据创建视图的语法如下: CREATE \[OR REPLACE\] \[FORCE | NOFORCE\] VIEW view \[(alias \[, alias\] ...)\] AS subquery \[WITH CHECK OPTION \[CONSTRAINT constraint\]\] \[WITH READ ONLY \[CONSTRAINT constraint\]\]; 例如,可以使用以下语句创建一个简单视图: CREATE OR REPLACE VIEW v_buser AS SELECT id 编号, account 账号, email 邮箱, mobile 电话, name 姓名, sex 性别, birth 生日 FROM buser; 然后可以使用SELECT语句查询视图: SELECT * FROM v_buser; 这样就可以通过视图来访问和查询数据了。 #### 引用[.reference_title] - *1* *2* *3* [Oracle 视图(1)建立视图](https://blog.csdn.net/qq_43085982/article/details/111182599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值