首页 > 数据库技术 > 详细

SQL面试题

时间:2015-07-27 08:15:07      阅读:281      评论:0      收藏:0      [点我收藏+]
  1. 举出4种去重的方法:

     第一种:distinct

SQL> create table t as select * from dba_objects;
Table created.
SQL> insert into t select * from t;
87401 rows created.
SQL> commit;
Commit complete.
SQL> create table tmp_t1 as select distinct * from t;
Table created.
SQL> drop table t;
Table dropped.
 SQL> select count(*) from t;
  COUNT(*)
 ----------
     87401

第二种,用rowid

DELETE FROM t
 WHERE ROWID <> (SELECT MIN(ROWID)
                   FROM t b
                  WHERE b.object_id = t.object_id
  5                      AND b.object_name = t.object_name);
174802 rows deleted.
SQL> select count(*) from t;
  COUNT(*)
----------
     87401

第三种,用rowid + group by 的方法:

SQL> insert into t select * from t where rownum<100;
99 rows created.
Elapsed: 00:00:00.21
SQL> commit;
Commit complete.
Elapsed: 00:00:00.03
DELETE FROM t
 WHERE ROWID NOT IN
  2    3         (SELECT MIN(ROWID) FROM t GROUP BY object_id, object_name);
99 rows deleted.
Elapsed: 00:00:00.41
DELETE FROM t
 WHERE NOT EXISTS
 (SELECT 1
          FROM (SELECT MIN(ROWID) rid FROM t GROUP BY object_id, object_name) b
  5           WHERE b.rid = t.rowid);
99 rows deleted.
Elapsed: 00:00:01.32

---第四种, 用分析函数

DELETE FROM t
 WHERE ROWID IN (SELECT b.rd
                   FROM (SELECT ROWID rd,
                                row_number() over(PARTITION BY object_id, object_name ORDER BY object_id) rn
                           FROM t) b
  6                    WHERE b.rn > 1);
99 rows deleted.
Elapsed: 00:00:00.50


SQL面试题

原文:http://7642644.blog.51cto.com/7632644/1678559

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!