6.Oracle基础一Oracle基础命令5--子查询、序列、视图

本文系列来自FREE教程,稍加修改以方便复习SQL,如果冒犯请联系作者删除。

子查询

Oracle子查询就是嵌套查询,他把select 查询的结果作为另外一个select、update或delete语句的条件,它的本质就是where条件查询中的一个条件表达式。其中我们数据库开发过程中,子查询可以根据查询结果的行数的多少,可以区分为单行子查询和多行子查询。

1、单行子查询:向外部返回的结果为空或者返回一行。
2、多行子查询:向外部返回的结果为空、一行、或者多行。

Oracle单行子查询

select *
  from stuinfo t
 where t.classno in (select b.classno
                       from class b
                      where b.classname = '信息科学2班(18)');
 
/*虽然在这利用内关联也可以查出结果,
  而且效率更好,但是在一些没有关联关
  系的时候可以利用子查询 */
select t.*
  from stuinfo t, class b
 where t.classno = b.classno
   and b.classname = '信息科学2班(18)';

多行子查询

Oracle多行子查询则需要利用IN关键字来接收子查询的多行结果。也可以用量化关键字ANY、ALL和关系运算符>、>=、=、<、<=来组合使用。

ANY关键字:表示子查询结果当中的任意一个。假如:>ANY(子查询),表示:只要大于子查询当中的任意一个值,这个条件就满足。

ALL关键字:表示子查询中的所有结果。假如:>ALL(子查询),表示:必须大于子查询当中的所有结果才能满足这个条件。

select * from stuinfo t where t.classno in (select b.classno from class b);

--年龄只要大于当中子查询的最小值26岁即可
select * from stuinfo t where t.age>any(26,27,28);
--年龄必须大于子查询当中的最大值28岁才可以
select * from stuinfo t where t.age>all(26,27,28);

序列

Oracle序列Sequence是用来生成连续的整数数据的对象,它经常用来作为业务中无规则的主键。Oracle序列可以是升序列也可以是降序列。

CREATE SEQUENCE sequence_name
[MAXVALUE num|NOMAXVALUE]
[MINVALUE num|NOMINVALUE]
[START WITH num]
[INCREMENT BY increment]
[CYCLE|NOCYCLE]
[CACHE num|NOCACHE]
1、MAXVALUE/MINVALUE:指定的是序列的最大值和最小值。
2、NOMAXVALUE/NOMINVALUE:不指定序列的最大值和最小值,使用系统的默认选项,升序的最大值:1027次方,降序是-1。升序最小值:1,降序的最小值:-1026。
3、START WITH:指定从某一个整数开始,升序默认是1,降序默认是-1。
4、CYCLE | NOCYCLE:表示序列达到最大值或者最小值的时候,是否重新开始。CYCLE:重新开始,NOCYCLE:不重新开始。
5、CACHE:使用 CACHE 选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率 。
6、NOCACHE:不预先在内存中生成序列号。

序列使用

--新建一个序列
drop sequence Sequence_Student_sid
--创建一个序列
create sequence Sequence_Student_sid
start with 1000 --起始值是1000
increment by 10 --每次增量1
maxvalue 9999 --最大增量9999
 
--新建一个表
drop table stu09
create table stu09(
sid number,
sname varchar2(100)
)
 
--通过使用序列的NEXTVAL方法,进行自动增加
insert into stu09 values(Sequence_Student_sid.NEXTVAL,'萧瑾')
insert into stu09 values(Sequence_Student_sid.nextval,'小张')
 
select *
from stu09

视图

oracle视图可以理解为数据库中一张虚拟的表,他是通过一张或者多张基表进行关联查询后组成一个虚拟的逻辑表。查询视图,本质上是对表进行关联查询。

视图的本身是不包含任何数据,只是一个查询结果,当基表的数据发生变化时,视图里面的数据也会跟着发生变化。我们经常在实际开发过程中遇到的视图可以大概分为三种:单表视图、多表关联视图、视图中含有子视图。

CREATE [OR REPLACE]  VIEW view_name
AS
SELECT查询
[WITH READ ONLY CONSTRAINT]

1、OR REPLACE:如果视图已经存在,则替换旧视图。
2、WITH READ ONLY:默认不填的,用户是可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行 insert 操作,或者基表设置了某些约束,这时候插入视图或者修改视图的值,有可能会报错), WITH READ ONLY 说明视图是只读视图,不能通过该视图进行增删改操作。但是在现实开发中,基本上不通过视图对表中的数据进行增删改操作。

create view vw_stuinfo as 
select a.stuid,--学号
       a.stuname,--学生姓名
       a.grade,--年级
       a.sex,--性别(1:男、2:女)
       a.age,--年龄
       b.classname,--班级
       b.monitorname,--班长
       b.headmastername--班主任
  from stuinfo a, class b
 where a.classno = b.classno;
select * from vw_stuinfo;

Guess you like

Origin blog.csdn.net/weixin_43859562/article/details/112616991