--学生表
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;