Oracle-视图

  • 基表中的数据和视图中的数据会被互相同步

 

一:为用户授予创建视图的权限

grant create view to xxx;

二:创建视图

CREATE VIEW empview
AS
SELECT e.employee_id,e.last_name,e.department_id,e.salary,e.email,d.department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id = 80;

三:更新和删除视图中记录

更新

UPDATE empview e SET e.salary = 1100 WHERE e.employee_id = 145; 

删除 

DELETE FROM empview 
WHERE empview.employee_id = 158;

四:修改视图

  • 只需要在create后面加上 or replace 就可以了,其他的和创建表的同。意思就是视图存在时替换,不存在时创建
CREATE OR REPLACE VIEW empview
AS
SELECT e.employee_id,e.last_name,e.department_id,e.salary,e.email,d.department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id = 80

五:with read only

  • 当创建视图是加上with read only则视图只允许查询
CREATE OR REPLACE VIEW empview
AS
SELECT e.employee_id,e.last_name,e.department_id,e.salary,e.email,d.department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id = 80
WITH READ ONLY;

六:复杂视图(带分组函数)

  • 复杂视图只能查询,不能修改
CREATE OR REPLACE VIEW empview1
AS
SELECT d.department_name,AVG(e.salary) avg_salary
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
GROUP BY d.department_name;

七:用途

  • 经常使用的查询语句创建视图,相当于对高频使用的sql的封装
  • 当不想把一张表中的所有数据暴露给别人,可以创建视图包含表中部分数据交给别人操作

八:TOP-N

场景:查询员工表中工资前十的员工

  • ROWNUM:虚拟列,标识当前列序号(ROWNUM的筛选只能使用'<'或'<='不能使用'>'、'>='、'=')
  • 将需要的字段查询出来并按工资排序,作为一个子表
  • 子表中的记录就是按照工资排序的,行号的前十个就是工资最高的十个记录
  • 查询时按照子表的前十个查询即可
SELECT ROWNUM,last_name,salary
FROM(
       SELECT e.last_name,e.salary
       FROM employees e
       ORDER BY e.salary DESC
)
WHERE ROWNUM <= 10;

场景:查询员工表中按工资排序的第40到50条记录

  • 由于ROWNUM不能用‘>’做比较,所以只能将上面查询出来的结果作为子表,将查询出来的记录的ROWNUM取别名,再嵌套一次查询,
SELECT ROWNUM nu,employee_id,last_name,salary
FROM(
       SELECT ROWNUM nu,employee_id,last_name,salary
       FROM(
		SELECT e.employee_id,e.last_name,e.salary
		FROM employees e
		ORDER BY e.salary DESC
       )
)
WHERE nu > 40 AND nu < 50;

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值