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;