将表 放入回收站 并不是真正意义上的删除
drop table
查看表的数目,可以看到数目并未改变
select * from tab;
从回收站中恢复表(只能恢复最近的一个表)
FLASH BACK TABLE 表名 TO BEFORE DROP;
查看回收站里面的表
select object_name, original_name ,operation,type from recyclebin
删除表不经过回收站
drop table 表名 purge;
从回收站中删除某个表
purge table 表名;
清空回收站
purge recyclebin;
修改表
增加新的列
alter table 表名 add (列名,数据类型[default 默认值], 列名.....);
desc 查看表
修改列的数据类型
alter table 表名 modify(ename varchar(8));
修改列名
alter table 表名 rename column 现列名 to 新名;
删除列 (不可同时删除多个列)
alter table 表名 drop column 列名;
表的重命名
rename 旧名 to 新名;
更改列状态(改为不使用状态)
alter table 表名 set unused column 列名;
删除无用的列
alter table 表名 drop unused columns;
为表添加注释
comment on table 表名 is '注释内容'
插入:
插入单值:
INSERT INTO 表名(列名1,列名2,...)VALUES(值1,值2....)
子查询
INSERT INTO (SELECT 列名 FROM 表名) VALUES (......)
临时表
INSERT INTO 表名(列名1, 列名2.....) select ..... from dual
子查询进行批量插入
eg: 向myemp表中插入一条数据,员工号为1122,员工姓名为‘tom22’ 其他信息与员工7369的信息相同
INSERT INTO myemp SELECT 1122, 'tom22', JOB,MGR FROM emp WHERE empno = 7369;
如果要进行大量数据的装载操作可以利用
insert /*+append*/ into myemp(列名1,列名2) select
eg:
INSERT /*+append*/ INTO myemp (empno, ename) SELECT 2233,'tom33' FROM dual;
向多个表插入数据
无条件多表插入
INSERT ALL INTO 表1 VALUE (值1, 值2)
INTO 表2 VALUES(列1,列2)
子查询;
有条件 向 多个表中插入
INSERT ALL/FIRST
WHEN 条件1 THEN INTO 表1 VALUES(列1,列2)
WHEN 条件2 THEN INTO 表2 VALUES(列1,列2)
ELSE INTO 表(列1,列2)
子查询;
ALL全部都插
FIRST只插入第一个条件(避免重复)
修改数据:
全部修改
update 表名 set 列 = 值,列 = 值
局部修改
update 表名 set 列 = 值,列 = 值 where......
子查询:
update 表名(列名1,列名2) = (子查询 from dual) where 。。。
将部门30的员工工资修改为部门20员工的平均工资
update myemp set sal = sal + (select avg(sal) from emp where deptno = 20) where deptno = 30
删除数据:
全部删除
delete from 表名
from 可以省略 但是不规范
只删除所有数据 表的结构依然在
局部删除
delete from emp where .....
子查询
删除和Smith相同岗位的人的信息
delete from emp where job = (select job from emp where ename = 'Smith')
查询
格式:
select 列名 from 表名
算数运算符 + - * / :
select date+1 日期也可以进行相应的加减 前一天 后一天
别名:
select 列名 (as) 列别名 from
但是如果想要使用as作为列名,就需要将as打上双引号 'as', 但是列名不可以是双引号
空值:null
空值不是0
空值不可以参与运算
nvl(可能产生空值的列名,指定值)
连接符:
列与列的连接
select ename || job as info from emp
字符串连接:
oracle 使用单引号进行字符串连接
select 'id:' || ',name is' || ename
去重:distinct
排序:order by
order by 列名 desc降序
order by 列名 asc 升序
条件: where
日期需要加单引号 默认是 日月年
用where的时候 注意大小写 列名不区分大小写,但是数据区分大小写
逻辑运算符:
AND, OR, NOT
(not) in是否在集合中
between and 两边都是闭区间
like:
% 任意数量的字符
_表示一个字符
连接:
左右连接
列名 (+) = 右连接
= 列名 (+) = 左连接
select 列名
from 表1 right outer join 表名2 on 条件;
select 列名
from 表1 left outer join 表名2 on 条件;
交叉连接:
将返回被连接的两个表的笛卡尔积
select 列
from 表名1 cross join 表名2;
自然连接:
select 列
from 表名1 natural join 表名2;
using子句:
select 列名
from 表名1 join 表名2 using (列名)
on子句:
using 子句
select 列名
from 表名1 join 表名2 on 条件
组函数:
count
可以用于数字,日期等的大小比较
max
min
sum
avg
group by
having