- 序列 sequence
可以为表中的列自动产生值
由用户创建数据库对象,并可由多个用户共享
一般用于主键或唯一列。
案例:
create sequence my_seq ---创建序列名
start with 1 ---从1开始
increment by 1 ---每次增长1
maxvalue 999999999 ---最大值
minvalue 1 ---最小值
cycle ---循环
cache ---缓存
order
说明:从1开始,每次增长1,最大值为999999999,之后又循环从1开始。
运用:
select my_seq.nextval from dual ---新值(下一个)
select my_seq.currval from dual ---当前值
SQL语句:插入标识符
insert into tb_student values(my_seq.nextval, ’李四’, ’男’, ’2000-10-19’, 1, null)
删除数据
删除所有记录,表结构还在,写日志,可以恢复的,速度慢
delete from tb_student
删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快
l truncate table tb_student
删除表的结构和数据
l drop table tb_student
DROP与TRUNCATE与DELETE的比较:
相同点:
- TRUNCATE和DELETE、DROP都会删除表内的数据。
- DROP与TRUNCATE都是DDL语句(数据定义语言),执行后会自动提交。
不同点:
- TRUNCATE和DELETE只删除数据不删表结构;DROP除删数据和表结构外,与该表有依赖的约束、触发器、索引将被删除,但存储过程和函数将保留。
- 安全性:小心DROP和TRUNCATE。DELETE在执行后不会马上提交,可以通过回滚找回删除数据;DROP和TRUNCATE执行后直接提交,不会回滚。
- 速度,一般来说:DROP > TRUNCATE > DELETE。
- 查询
- set timing on; --打开操作时间开关
-
(1)查看表结构
desc 表名;
(2)取消重复行
select distinct deptno,job from emp;
(3)查询处理空值
nvl(expr1, expr2)
如果expr1为空则返回expr2
select sal*13+nvl(comm, 0) total from emp;
nvl2(expr1, expr2, expr3)
如果expr1不为空返回expr2,否则返回expr3
select empno,ename, nvl2(comm,'有奖金','没有奖金') from emp;
nullif(expr1, expr2)
如果expr1和expr2相等返回空,否则返回expr1
(4)合并查询
为了合并多个select语句的结果,可以使用集合操作符号union、union all、intersect、minus
l union该操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中重复行。
查询工资大于2500与职位为MANAGER的并集
select ename,sal,job,from emp where sal>2500
union
select ename,sal,job from emp where job=’MANAGER’;
union all与union相似,但是它不会取消重复行:
select ename,sal,job,from emp where sal>2500
union all
select ename,sal,job from emp where job=’MANAGER’;
intersect使用该操作符用于取得两个结果集的交集:
select ename,sal,job,from emp where sal>2500
intersect
select ename,sal,job from emp where job=’MANAGER’;
minus使用该操作符用于取得两个结果集的差集,它只会显示在第一个集合中,而不存在第二个集合中的数据
select ename,sal,job,from emp where sal>2500
minus
select ename,sal,job from emp where job=’MANAGER’;