1、创建表
Create table student( Sid number(10), Sname varchar2(10) ) tablespace tt;
以上tablespace不是必须的。默认不写,则创建在登录的用户所在的表空间上。
2、使用子查询创建表
create table myemp as select * from yangx.emp;
create table myemp as select * from yangx.emp where deptno=10;
create table myemp as select * from yangx.emp 1=2;
3、添加字段
Alter table student add age number(5);
4、修改字段
Alter table student modify age number(10);
alter table table2 rename column result to result2;
5、删除字段
Alter table student drop column age;
6、清空表中数据
Truncate table student;
正常情况下删除数据,如果发现删除错了,则可以通过rollback回滚。如果使用了截断表,
则表示所有的数据不可恢复了.所以速度很快(更详细的说明可查看Oracle体系结构)
truncate和delete的主要区别:
1、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。
2、delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。
3、delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。
4、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。
5、truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。
6、对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。
7、truncatetable不能用于参与了索引视图的表。
扩展资料:
在速度上,一般来说truncate > delete。
如果想保留表而将所有数据删除,如果和事务无关,用truncate就好。
如果和事务有关,或者想触发trigger,还是用delete。
truncate 只能对table;delete可以是table和view;truncate 和delete只删除数据, drop则删除整个表(结构和数据)。
7、删除表
Drop table student;
8、重命名表
Rename student to student1;
9、insert 语句
insert into table(colname1,colname2) values(value1,valu2);
表间数据拷贝 insert into dept1(id, name) select deptno, dname from dept;
10、update 语句
将编号为7779用户的工作换成编号为7566的雇员的工作和所属上级。
UPDATE myemp SET(job,mgr) = (SELECT job,mgr FROM myemp WHERE
empno=7566) WHERE empno=7779 ;
11、delete 语句
Delete from emp;
12、merge 语句
create table test1(eid number(10), name varchar2(20),birth date,salary number(8,2));
insert into test1 values (1001, ‘张三’, ‘20-5月-70’, 2300);
insert into test1 values (1002, ‘李四’, ‘16-4月-73’, 6600);
select * from test1;
create table test2(eid number(10), name varchar2(20),birth date,salary number(8,2));
select * from test2;
merge into test2 using test1 on(test1.eid = test2.eid ) when matched then
update set name = test1.name, birth = test1.birth, salary = test1.salary
when not matched then insert (eid, name, birth, salary) values(test1.eid, test1.name, test1.birth, test1.salary);
select * from test2;
练习
1.往emp表中插入empno,ename,sal数据(111,‘1’,1000)(222,‘2’,2000)
insert into emp(empno,ename,sal) values(111,‘1’,1000);
insert into emp(empno,ename,sal) values(222,‘2’,2000);
2.把empno=111的员工comm改成100
update emp set comm=100 where empno=111;
3.往dept表中插入dept表中deptno=100的数据
insert into dept select * from dept where deptno=100;
4.删除empno=111的数据
delete from emp where empno=111;
5.为所有人长工资,标准是:10部门长10%;20部门长15%;30部门长20%其他部门长
18%(要求用DECODE函数)
update emp set sal=decode(deptno,‘10’,sal*(1+0.1), ‘20’,sal*(1+0.15), ‘30’,sal*(1+0.2),sal*(1+0.18));
释:DECODE(value,if1,then1,if2,then2,if3,then3,…,else)
含义为
IF 条件=值1 THEN
RETURN(value 1)
ELSIF 条件=值2 THEN
RETURN(value 2)
…
ELSIF 条件=值n THEN
RETURN(value 3)
ELSE
RETURN(default)
END IF
6.根据工作年限长工资,标准是:为公司工作了几个月就长几个百分点。
update emp set sal= round(sal * (1+(sysdate - hiredate)/365/12/100),2);
Round 函数
语法为ROUND(number,num_digits)
其中Number是需要进行四舍五入的数字;Num_digits为指定的位数,按此位数进行四舍五入,如果 num_digits 大于 0,则四舍五入到指定的小数位,如果 num_digits 等于 0,则四舍五入到最接近的整数,如果 num_digits 小于 0,则在小数点左侧进行四舍五入。