1、rowid(行标示符)概述
rowid是一个用来唯一标记表中行的伪列。它是物理表中行数据的内部地址(唯一),包含两个地址,其一为指向数据表中包含该行的块所存放数据文件的地址,另一个是可以直接定位到数据行自身的这一行在数据块中的地址
orale 删除相同的数据
delete from TABLE_NAME a
where rowid != (select max(rowid)
from TABLE_NAME t
where a.id = t.id)
2、Rownum(行号)
根据排序插入一列序号
SELECT
t.id,
row_number() over(order by t.aa desc) order_num
FROM table1 t
Rownum 不同分页写法的比较
–>> 方式一 在查询的最外层控制分页的最小值和最大值
SELECT * FROM
(
SELECT B.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) B
)
WHERE RN BETWEEN 1AND 20
—>>方式 二 绝大多数的情况下,第2个查询的效率比第1个高得多。
SELECT * FROM
(
SELECT B.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) B
WHERE ROWNUM <= 20
)
WHERE RN >= 1
3、NAL
SELECT NVL(T.ID,0) AS ID FROM TABLE_NAME T
nvl(字段名,0),就是当你选出来的时候,这个字段虽然为空,但是显示的是0,当然这个0也可以换成其他东西,如:1,2,3……
4、Merge into
-全部男生记录
create table fzq1 as select * from fzq where sex=1;
--全部女生记录
create table fzq2 as select * from fzq where sex=0;
/*涉及到两个表关联的例子*/
--更新表fzq1使得id相同的记录中chengji字段+1,并且更新name字段。
--如果id不相同,则插入到表fzq1中.
--将fzq1表中男生记录的成绩+1,女生插入到表fzq1中
merge into fzq1 aa --fzq1表是需要更新的表
using fzq bb -- 关联表
on (aa.id=bb.id) --关联条件
when matched then --匹配关联条件,作更新处理
update set
aa.chengji=bb.chengji+1,
aa.name=bb.name --此处只是说明可以同时更新多个字段。
when not matched then --不匹配关联条件,作插入处理。如果只是作更新,下面的语句可以省略。
insert values( bb.id, bb.name, bb.sex,bb.kecheng,bb.chengji);