删除表中重复记录

Filed under: Oracle, SQL | Borrow: | No Comments »
Posted on

Oracle中想要实现这一功能其实并不是很难啊,呵,下面看看我做的。

SQL> create table demo (
  2  aa int,
  3  bb int,
  4  cc int
  5  );
 
Table created
 
SQL> insert into demo values (1, 1, 1);
SQL> insert into demo values (1, 1, 1);
SQL> insert into demo values (1, 1, 1);
SQL> insert into demo values (2, 2, 2);
SQL> insert into demo values (2, 2, 2);
SQL> insert into demo values (3, 3, 3);
 
SQL> select * from demo;
 
 AA  BB  CC
--- --- ---
  1   1   1
  1   1   1
  1   1   1
  2   2   2
  2   2   2
  3   3   3
 
6 rows selected
 
SQL> delete from demo where rowid not in (
  2  select max(rowid) from demo group by aa,bb,cc );
 
3 rows deleted
 
SQL> select * from demo;
 
 AA  BB  CC
--- --- ---
  1   1   1
  2   2   2
  3   3   3

返回结果集中相同部分和不同部分

Filed under: Oracle, SQL | Borrow: | No Comments »
Posted on

原来没注意到Oracle有这东西,今天才开始用起来,早知道原来的项目中就好用了,可惜。。。

还是用SCOTT登录吧,找个简单的东西实践一下OK了。

1、intersect运算,返回查询结果中相同的部分(找EMP和SALGRADE表中SAL列相同记录)

SQL> select sal from emp
  2  intersect
  3  select hisal from salgrade;
 
       SAL
----------
      3000

2、minus运算,返回查询结果中不相同的部分(找EMP和SALGRADE表中SAL列不相同记录) Read the rest of this entry »

Oracle取前几条记录

Filed under: Oracle, SQL | Borrow: | No Comments »
Posted on

这是个经典SQL,呵,很久没写了,今天群里有人提出来,让我突然想到,所以写在这里方便查看。

以SCOTT用户登录Oracle,以它的EMP表为例子吧。

1、使用rownum为记录排名

SQL> select * from (
  2  select * from emp order by sal desc )
  3  where rownum <= 10;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 
10 rows selected
 
SQL> select ename, sal, rn from (
  2  select ename, sal, rownum rn 
  3  from emp where rownum <= 10 order by sal desc )
  4  where rn > 5 and rn < 8;
 
ENAME            SAL         RN
---------- --------- ----------
BLAKE        2850.00          6
CLARK        2450.00          7

2、使用分析函数来为记录排名 Read the rest of this entry »

Tags : , ,

Oracle常用函数总结(六):其它辅助函数

Filed under: Oracle, SQL | Borrow: | No Comments »
Posted on

1、DECODE(exp,s1,r1,s2,r2..s,r[,def]) 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。
exp做为初始参数。s做为对比值,相同则返回r,如果s有多个,则持续遍历所有s,直到某个条件为真为止,否则返回默认值def(如果指定了的话),如果没有默认值,并且前面的对比也都没有为真,则返回空。

SQL> select decode('a', 'a1', 'true', 'false') from dual;
 
DECOD
-----
false

2、GREATEST(n1,n2,…n) 返回序列中的最大值

SQL> select greatest(4, 65, 5, 34, 71) from dual;
 
GREATEST(4,65,5,34,71)
----------------------
                    71

3、LEAST(n1,n2….n) 返回序列中的最小值 Read the rest of this entry »

Oracle常用函数总结(五):转换函数

Filed under: Oracle, SQL | Borrow: | No Comments »
Posted on

转换函数将指定字符从一种类型转换为另一种,通常这类函数遵循如下惯例:函数名称后面跟着待转换类型以及输出类型。

1、TO_CHAR()

转换字符->字符TO_CHAR(c):将nchar、nvarchar2、clob、nclob类型转换为char类型;

SQL> select to_char('AABBCC') from dual;
 
TO_CHA
------
AABBCC

转换时间->字符TO_CHAR(d[,fmt]):将指定的时间(data、
timestamp、timestamp with time zone)按照指定格式转换为varchar2类型;

SQL> select to_char(sysdate, 'yy-mm-dd') from dual;
 
TO_CHAR(
--------
08-10-01

转换数值->字符TO_CHAR(n[,fmt]):将指定数值n按照指定格式fmt转换为varchar2类型并返回; Read the rest of this entry »