Monday, December 9, 2019

How to get unique records without using distinct in oracle

nSQL> set lines 100
SQL> set pages 50
SQL> drop table employee;

Table dropped.

SQL> create table employee(empno number,ename varchar2(10));

Table created.

SQL> insert into employee values (1,'raj');

1 row created.

SQL> insert into employee values (1,'raj');

1 row created.

SQL> insert into employee values (2,'siva');

1 row created.

SQL> insert into employee values (3,'pavan');

1 row created.

SQL> insert into employee values (3,'pavan');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from employee;

     EMPNO ENAME
---------- ----------
         1 raj
         1 raj
         2 siva
         3 pavan
         3 pavan

Using DISTINCT:

SQL> select distinct empno,ename from employee order by 1,2;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

Without using DISTINCT:

SQL> select unique empno,ename from employee order by 1,2;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL> select empno,ename from employee group by empno,ename order by 1,2;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL> select empno,ename from employee
  2  union
  3  select empno,ename from employee;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL> select empno,ename from employee
  2  union
  3  select null,null from employee where 1=2;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL> select empno,ename from employee
  2  minus
  3  select null,null from employee where 1=2;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL> select empno,ename from
  2  (
  3  select empno,ename,
  4  row_number() over(partition by empno,ename order by empno,ename) as rn from employee
  5  )
  6  where rn=1;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL> select empno,ename from
  2  (
  3  select empno,ename,
  4  rank() over(partition by empno,ename order by rownum) as rn from employee
  5  )
  6  where rn=1;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL>
SQL> select empno,ename from
  2  (
  3  select empno,ename,
  4  dense_rank() over(partition by empno,ename order by rownum) as rn from employee
  5  )
  6  where rn=1;

     EMPNO ENAME
---------- ----------
         1 raj
         2 siva
         3 pavan

SQL>

No comments:

Post a Comment