SQL汇总

来源:互联网 发布:动易cms如何升级 编辑:程序博客网 时间:2024/05/17 18:25
--1、一个通过单列外键联系起父表和子表
create table parent (pid number not null,primary key(pid));
create table son (sonid number primary key,pid number ,foreign key (pid) references parent(pid));
总结:
定义约束的方法有两种,表级定义、列级定义;

--2、如何把查询出的数据插入到另外一张表中
方法一:
create table dest_table (grade,lsal,hsal) as select * from salgrade;
说明:
在创建表的同时,向表中添加数据,要注意两点:
A:表内字段不要数据数类型;
B:select 语句前要加as;
方法二:
insert into dest_table(grade,lsal,hsal) select * from salgrade;
说明:
向表中添加全部数据时可以不要指定字段:insert into dest_table select * from salgrade;
向表中添加个别字段时必须指定字段:insert into dest_table(grade,lsal,hsal) select * from salgrade;

--3、如何删除表中重复记录
--建表
create table persons (
pid number,
pname varchar2(20),
cardid number,
address varchar2(20));
--添加数据
create or replace procedure sp_persons_pro is
begin
insert into persons values (10,'SMITH',123456789,'延庆');
insert into persons values (10,'SMITH',123456789,'延庆');
insert into persons values (10,'SMITH',123456789,'延庆');
insert into persons values (11,'JIM',987654321,'朝阳');
insert into persons values (11,'JIM',987654321,'朝阳');
insert into persons values (11,'JIM',987654321,'朝阳');
insert into persons values (12,'SCOTT',456987321,'怀柔');
end;
exec sp_persons_pro;
--方法1:rowid
--显示重复的行
select * from persons p1
where rowid<>
(select max(rowid) from persons p2 where p1.pid=p2.pid);
说明:
如果,有多个字段相同,则添加即可,如:
select * from persons p1
where rowid<>
(select max(rowid) from persons p2 where p1.pid=p2.pid and p1.pname=p2.pname);
--删除重复的行
delete from persons p1
where rowid<>
(select max(rowid) from persons p2 where p1.pid=p2.pid);
总结:
A:每张表的记录可能相同,但是每张表的记录的ROWID是唯一的;
B:做题思路
   a:显示相同字段的最大ROWID  
   b:留下相同字段的最大ROWID所在的记录,其它的记录删除;
--方法二:group by
按照PID分组,显示pid数量大于1的记录
select pid from persons group by pid having count(pid)>1;
删除重复行
delete from persons
where pid in (select pid from persons group by pid having count(pid)>1);
此方法将删除有重复记录的所有行,不会留下一条刻录;
--方法三:distinct
取消重复行
select distinct * from persons;
建表并复制“取消重复行的表中的数据”
create table table_new as select distinct * from persons;
删除persons表中数据
delete from persons;
把table_new表中没有重复行的数据插入到到persons表中
insert into persons select * from table_new;
总结:
使用中间表导入导出数据来删除重复行;

--4、查询Emp表的顶部10条记录
select a1.*,rownum from emp a1 where rownum<=10 order by rownum desc;

--5、查询Employee表的 第10 到 第20条 记录,可以用于分页显示
select a1.*,rownum rn from emp a1;
select * from (select a1.*,rownum rn from emp a1) where rn between 10 and 20;



































0 0
原创粉丝点击