--------------------练习1--------------------------------------------------------------
1.创建一个序列,该序列起始值从1开始,无最大值,增量是1,不循环。
create sequence test3
start with 1
nomaxvalue
increment by 1
nocycle;
2.查询序列的当前值及下一个值
select test3.currval from dual;-------查询序列的当前值:currval
select test3.nextval from dual;-------查询序列的下一个值:nextval
3.使用第1题所建的序列,向部门表中插入两条记录,部门编号使用序列值,部门名称分别为:Education、Market,城市分别为:DALLAS、WASHTON
select *from dept;
insert into dept(deptno,dname,loc)
values(test3.nextval,‘Education’,‘DALLAS’);
insert into dept(deptno,dname,loc)
values(test3.nextval,‘Market’,‘WASHTON’);
--------------------练习2--------------------------------------------------------------
1.使用子查询的方式,创建testing表。
create table testing as
select *from emp;
select *from testing
2.快速复制test表中的数据,复制到100w条左右
insert into testing
select *from emp;
3.更新test表中的empno字段为rownum
update testing
set empno=rownum;
4.查询test中empno为800000的记录值,记录查询执行时间。
select *from testing
where empno=1080;
–执行时间:0.015
5.在test表的empno字段上创建索引
------------CREATE INDEX indexname ON table (column[, column]…);-------
create index index_empno
on testing(empno);
6.重新执行第4题,对比查询时间
select *from testing
where empno=1080;
–执行时间:0
--------------------课后作业--------------------------------------------------------------
1.创建序列,起始位1,自增为1,最小值为1,最大值为9999
create sequence test1
start with 1 --序列从1开始
increment by 1 --序列每次增加1
minvalue 1 --序列最小值1
maxvalue 9999 --序列最大值9999
2.创建序列,起始值为50,每次增加5;
create sequence test2
start with 50
increment by 5
3.在表copy_dept中插入记录,其中部门号码采用上一步中创建的序列生成;
------创建copy_dept表--------
create table copy_dept as
select *from dept where 1=0;
------copy_dept表插入数据来自dept即是复制dept表中数据--------
insert into copy_dept
select *from dept
------其中部门号码采用上一步中创建的序列生成--------
insert into copy_dept
values(test1.nextval,‘RESOUCE’,‘BEIJING’)
select *from copy_dept
4.请为工资创建索引,比较<10000,>1000,与round(sal)>10000,哪个索引有效,哪个索引无效;
5.创建表,采用“create table copy_emp_index as select * from emp”,生成500万条数据,把其中的“员工号”字段修改为唯一;
create table copy_emp_index as select * from emp----创建copy_emp_index数据从emp表中引用
alter table copy_emp_index modify (empno number(10))-----修改表中empno列字段alter----modify —
insert into copy_emp_index select * from copy_emp_index ------疯狂复制,表里面的字段不能含有唯一性约束,有的话就不能复制了
update copy_emp_index set empno = rownum----------设置empno为rownum伪列
alter table copy_emp_index modify(empno unique)-----------修改表中empno列字段为唯一
select * from copy_emp_index
6.查询表copy_emp_index表中员工号为200001的员工姓名,工资,记录执行时间;
select ename,sal
from copy_emp_index
where empno=200001;
-----执行时间是0秒,因为上面题目已经empno设置了unique唯一性,系统已经自动帮你设置的唯一性
7.在copy_emp_index表的empno字段上创建索引,再次执行第6题语句,记录执行时间并做对比;
----------创建索引:此题索引创建失败,因为上面已经创建了,上一题就是这题的答案------
create index index_empno
on copy_emp_index(empno)
-------执行索引查询,验证其效率---------
select ename,sal
from copy_emp_index
where empno=200001;