Fork me on GitHub

集合运算符和序列

--学生表
CREATE TABLE STUDENT
(SNO NUMBER(4),
 NAME VARCHAR2(20),
 SEX CHAR(2),
 BIRTHDAY DATE,
 CLASS NUMBER(6),
 CONSTRAINT STU_SNO_PK PRIMARY KEY (SNO));
--教员表
CREATE TABLE TEACHER
(TNO NUMBER(3),
 NAME VARCHAR2(20),
 SEX CHAR(2),
 BIRTHDAY DATE,
 DEPART VARCHAR(20),--院系
 CONSTRAINT TEA_TNO_PK PRIMARY KEY (TNO));


--并集(去重)
SELECT s.sex  FROM student s
UNION--去重并集
select t.sex  FROM teacher t;

--将两个子查询分别去重后合并
SELECT  DISTINCT s.sex  FROM student s
UNION ALL
select DISTINCT t.sex  FROM teacher t;

--并集(不去重)
SELECT s.name,s.sex  FROM student s
UNION ALL
SELECT t.name,t.sex  FROM teacher t;
--交集(先去重,后取交集)
SELECT s.sex  FROM student s
intersect
SELECT t.sex  FROM teacher t;

--差集
SELECT s.sex  FROM student s
except
select t.sex  FROM teacher t;

  

     --  CREATE SEQUENCE sequencename 创建序列
			 
			-- [INCREMENT BY n]             定义序列增长步长,省略为1

     --  [START WITH m]               序列起始值,省略为1

     --  [{MAXVALUE n | NOMAXVALUE}] 序列最大值,

     --  [{MINVALUE n | NOMINVALUE}] 序列最小值

     --  [{CYCLE | NOCYCLE}]         到达最大值或最小值后,继续产生序列(默认NOCYCLE)

     --  [{CACHE n | NOCACHE}];      CACHE默认是20

 



--创建序列
create sequence myseq;
--NEXTVAL 和CURRVAL 伪列
--NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用CURRVAL 中存放序列的当前值
--第一次使用时CURRVAL不能用,使用时需要指定序列的对象名,将序列值装入内存可提高访问效率
--序列起始值,省略为1
select myseq.nextval from dual;

select myseq.currval from dual;

--创建一个表
create table weilie(
   mid number,
    name varchar2(50) not null,
    constraint pk_mid primary key(mid)
   );
	 --插入一行
	 insert into weilie(mid,name) values (myseq.nextval,'Scott');
	 --插入一行
	 insert into weilie(mid,name) values (myseq.nextval,'Tom');
	 --查询
	 SELECT * FROM weilie;
	 
	 select * from user_sequences;
	 --删除序列
	 drop sequence myseq;
	 
	 
	  --设置序列的初始值和增长步长
	 create sequence myseq
	 --初始值
   increment by 5
		--增长步长
    START WITH 30;
		--步长30
		select myseq.nextval from dual;
		
		
		
		
		--cache和nocache  默认情况是打开缓存的,默认的大小是20,这里有一个重要的参数是LAST_NUMBER
		create sequence myseq cache 100;
		
		select * from user_sequences;
		
		select myseq.nextval from dual;
		
		select * from user_sequences;
		
		
		--nocache
		create sequence myseq nocache;
		
		select * from user_sequences;
		
		select myseq.nextval from dual;--运行一次增长1
		
		--使用循环序列

 -- 循环序列是指每次调用nextval可以产生指定范围的数据,比如在1、3、5、7、9这5个数字中产生
		
		create sequence myseq 
    start with 1
    increment BY 3
    maxvalue 10
    minvalue 1
    cycle 
    cache 3;
		
		select myseq.nextval from dual;
		--CACHE_SIZE 变化
		select * from user_sequences;
		
		--修改序列的注意事项

           --必须是序列的拥有者或对序列有ALTER 权限

          -- 只有将来的序列值会被改变

           --改变序列的初始值只能通过删除序列之后重建序列的方法实现

           --其它的一些限制
		ALTER SEQUENCE myseq
           INCREMENT BY 20
           MAXVALUE 160
           CYCLE;
		
		

  

posted @ 2018-09-27 10:36  雪人奥特曼  阅读(197)  评论(0编辑  收藏  举报