create[orreplace][{force|noforce}]view view_name
asselect查询语句
[withread only constraint]
--基于students表和dept表创建的视图
createview view_name
asselect查询语句
createview view_name_info
asselect s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno;
--重新命名列,修改视图or replacecreateorreplaceview view_students_info(学号,姓名,年龄,性别,院系)asselect s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno;
createorreplaceview view_students_info(学号,姓名,年龄,性别,院系)asselect s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno
withread only;
--根据视图进行查询
select*from view_name;select*from view_name_info;
--在创建视图是没有with read only 时,根据视图进行修改
--以视图中列的名称为基准
update view_students_info set 姓名='name'where 学号='2015010001';update view_students_info set 年龄 =17where 学号='2015010001';select*from view_students_info ;
--with check option:检查修改的数据是否满足创建视图查询的条件
createorreplaceview view_students_info1(学号,姓名,年龄,性别,院系)asselect s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno where s.age>18;update view_students_info1 set 年龄 =17where 学号='2015010001';--注意,此时可以修该,但在视图中无法查询select*from view_students_info;createorreplaceview view_students_info2(学号,姓名,年龄,性别,院系)asselect s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno where s.age>18withcheckoption;update view_students_info2 set 年龄 =17where 学号='2015010001';--注意,此时会报错,不允许修改
--删除视图
dropview 视图名;
视图可以DML(数据操纵语言)操作的条件
1、只能修改一个底层的基表
2、如果修改违反了基表的约束条件,则无法更新视图
3、如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
4、如果视图包含伪列或表达式,则将无法更新视图
伪列:伪列的操作类似于表中的列,但是它并不存实际保存在表中。你可以对其进行查询操作,但是你却不能对其进行增加、修改或者是删除,一个伪列也类似于一个没有参数的函数。但是,没有参数的函数通常在结果集中为每一列返回相同的结果,伪列通常为每一列返回不同的值。
具体参考:https://blog.csdn.net/ziwen00/article/details/11672233?biz_id=102&utm_term=oracle%E4%BC%AA%E5%88%97&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-11672233&spm=1018.2118.3001.4187
5、在连接视图中不能有Order by、Group by等排序、分组语句。