Oracle___DML

来源:互联网 发布:php array push 编辑:程序博客网 时间:2024/05/29 12:20

增(insert)
方法一:
insert into tableName values();
commit;      //需要提交

方法二:
insert intio tableName(XX,XX)
values(XX,XX);
commit; 

方法三:
从一个表中导入到另一个表
insert into n1
select emp_id,emp_name from employ;

方法四:
create table tName
as
select emp_id,emp_name,title,hire_date from employ;

=================================================
删(delete)
方法一:
删除表中数据
delete from tName;

方法二:
delete from tName where id=X;

误删,delete可以回滚
rollback;

方法三
删除表中全部数据,不能回滚,截断表
truncate  table tName;

=================================================
改(update)
方法一
update tName set 列名="XX" where id=X;
commit;

方法二
update tName set 列名1="XX",列名2="XX" where id=X;
commit;

方法三
update tName1
set 列名=(select 列名 from tName2 where id=X)
where id=X;

方法四,如果两个表中的其中的一列值是一样的,使用合并(merge)
merge into tName1
using tName2
on (tName1.id=tName2.id)
when matched then
update
set tName1.列名=tName2.列名
where not matched then
insert (tName1.id,tName1.name)
values(tName2.id,tName2.name);

================================================
查(select)
简单查询
select * from tName;

除掉重复项(除掉的是重复行,除掉列使用break)查询
select distinct * from tName;

聚合函数,求和
select sum(列名) from tName;

别名
select sun(salary) 工资和 from tName;

字符串连接,使用  || 连接
select '员工号'||id||'的员工是' emp_name from employ;

条件查询(rownum),只能使用小于号 <
select * from tName where rownum<6;     //显示前6行数据

给rownum取别名就可以使用 大小于号了(Oracle数据查询时分页使用)
select * from (select rownum r,tName.* ) t
where t.r>2 and t.r<8

between * and *;
not  or

不等号的表示方法
<>  !=  ^=

模糊查询
select * from tName where title like 'M%';
%   任意多个字符
_   任意一个字符

查询带百分号的 %,转义字符
select * from tName where title '%/%%' escape'/';

空查询
select * from tName where id is null/ not null;

排序
select * from tName order by salary desc(降序)/asc;

排序应该在最后一条
select * from tName where 列名=XX order by 列名 desc;

分组
select sex,count(*) from emp_details
group by sex;

分组后跟条件 (having),不是 where
select id,count(*) from employ
group by dept_id
having count(*)>2

------------------------------------------------------------
高级查询
连接查询(从两个表中先形成以个笛卡尔积,然后从笛卡尔积中找出想要的结果)

内连接
方法一
select  * from tName1,tName2
where tName1.di = tName2.id;

方法二
select * from tName1 [inner] join tName2
on tName1.id=tName2.id;

外连接
右连接
显示tName2中的全部信息,而tName1在tName2中没有的信息,将以空补充
select * from tName1 right [outer] join tName2
on tName1.id=tName2.id;

select * from tName1,tName2
where tName1.id(+)=tName2.id;

左连接
显示tName1中的全部信息
select * from tName1 left [outer] join tName2
on tName1.id=tName2.id;

select * from tName1,tName2
where tName1.id=tName2.id(+);

全连接
select * from tName1 full [outer] join tName2
on tName1.id=tName2.id;


自连接,通过别名的形式连接


自然连接,根据相同列名做等值连接,列名相同类型不同是不可以做自然连接的
select * from tName1 natural join tName2;

指定列名做自然连接
select * from tName join tName2 using(列名)

--------------------------------------------------
嵌套查询(就是在where条件部分在有一个子查询)
select emp_name from employ where emp_id=
(select mgr_id from employ where emp_id=3);

当子查询是多个返回时 使用 in 不用 =
>any 与 in 的功能相同
=some 与 any 相同
=all 是并且的关系
exists 当子查询返回结果有值为真,没有值为假

连接查询速度被嵌套查询快,但是占空间比较大,与嵌套相反
连接查询不能够代替嵌套查询

交差并查询

select dept_id from department
instersect
select dept_id from employ;

差(所查结果在部门表中出现,在员工表中不出现的结果)
select dept_id from department
minus
select dept_id from employ;


select dept_id from department
union
select dept_id from employ;

原创粉丝点击