Oralce distinct method for removing duplicate records

Source: Internet
Author: User

The value of distinct is displayed only once.

No matter how many times this value appears, it is only displayed once.

Select distinct field name 1, field name 2 from Table order by field name 1

It is best to use it in combination with order. Improves efficiency

SQL>
SQL> CREATE TABLE employees (
2 au_id CHAR (3) not null,
3 au_fname VARCHAR (15) not null,
4 au_lname VARCHAR (15) not null,
5 phone VARCHAR (12) NULL,
6 address VARCHAR (20) NULL,
7 city VARCHAR (15) NULL,
8 state CHAR (2) NULL,
9 zip CHAR (5) NULL
10 );

Table created.

SQL>
SQL> insert into employees VALUES ('a01 ', 's',' B ', '2017-111-1111', '75 st', 'boston ', 'ny ', '123 ');

1 row created.

SQL> INSERT INTO employees VALUES ('a02', 'w', 'h', '2017-222-2222 ', '2017 Rd', 'boston ', 'co ', '123 ');

1 row created.

SQL> INSERT INTO employees VALUES ('a03', 'h', 'h', '2017-333-3333 ', '2017 Ave, # 14f', 'san Francisco ', 'CA', '123 ');

1 row created.

SQL> INSERT INTO employees VALUES ('a04 ', 'k', 'h', '2017-444-4444', '2017 Ave, # 14f', 'san Francisco ', 'CA', '123 ');

1 row created.

SQL> INSERT INTO employees VALUES ('a05 ', 'C', 'k', '2017-555-555555', '2017 st', 'New York', 'ny ', '123 ');

1 row created.

SQL> INSERT INTO employees VALUES ('a06 ', '', 'k', '2017-666-666', '2017 Mall', 'palo Alto ', 'CA ', '123 ');

1 row created.

SQL> INSERT INTO employees VALUES ('a07', 'P', 'O', '2017-777-7777 ', '2017 st', 'sarasota', 'fl ', '123 ');

1 row created.

SQL>
SQL>
SQL> SELECT DISTINCT state
2 FROM employees;


View duplicate SQL statements

SQL> select * from Employee
2/

ID FIRST_NAME LAST_NAME START_DAT END_DATE SALARY CITY DESCRIPTION
-----------------------------------------------------------------------------
01 Jason Martin 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer
02 Alison Mathews 21-MAR-76 21-FEB-86 6661.78 Vancouver Tester
03 James Smith 12-DEC-78 15-MAR-90 6544.78 Vancouver Tester
04 Celia Rice 24-OCT-82 21-APR-99 2344.78 Vancouver Manager
05 Robert Black 15-JAN-84 08-AUG-98 2334.78 Vancouver Tester
06 Linda Green 30-JUL-87 04-JAN-96 4322.78 New York Tester
07 David Larry 31-DEC-90 12-FEB-98 7897.78 New York Manager
08 James Cat 17-SEP-96 15-apr-01232.78 Vancouver Tester

8 rows selected.

SQL>
SQL>
SQL> SELECT Description FROM employee
2/

DESCRIPTION
---------------
Programmer
Tester
Tester
Manager
Tester
Tester
Manager
Tester

8 rows selected.

SQL> SELECT DISTINCT Description FROM employee
2/

DESCRIPTION
---------------
Programmer
Manager
Tester

To process multiple lists, separate the fields with "," as follows:

SQL> SELECT DISTINCT city, state
2 FROM employees


Test the query efficiency after distinct is added

Only when the DISTINCT keyword is added, Oracle must sort all subsequent fields. Previously it was often found that because developers do not understand SQL very well, In the SELECT list of more than 20 fields added in front of the DISTINCT, resulting in the query is basically impossible to complete, or even generate a ORA-7445 error. Therefore, I have been emphasizing to developers the impact of DISTINCT on performance.

I did not expect the developer to tell me that if DISTINCT is added when testing a large SQL statement, it may take about four minutes to complete the query. If DISTINCT is not added, the query is executed for more than 10 minutes and the results are still not obtained.

The first thought is that DISTINCT is in the subquery. Due to the addition of DISTINCT, the result set in step 1 is reduced, resulting in improved query performance. The result is as follows, it is found that DISTINCT is in the outermost layer of the query.

Since the original SQL statement is too long and involves too many tables, it is hard to say clearly. Here we simulate an example. This example is due to the limited data volume and complexity of SQL statements, it cannot be seen that there is a significant difference in the execution time between the two. Here we will explain the problem through logical read comparison in two cases.

First, create a simulated environment:

 

SQL> CREATE TABLE T1 AS SELECT * FROM DBA_OBJECTS
2 where owner = 'sys'
3 AND OBJECT_TYPE not like '% body'
4 AND OBJECT_TYPE not like 'java % ';
Table created.
SQL> CREATE TABLE T2 AS SELECT * FROM DBA_SEGMENTS WHERE OWNER = 'sys ';
Table created.
SQL> CREATE TABLE T3 AS SELECT * FROM DBA_INDEXES WHERE OWNER = 'sys ';
Table created.
SQL> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (OBJECT_NAME );
Table altered.
SQL> CREATE INDEX IND_T2_SEGNAME ON T2 (SEGMENT_NAME );
Index created.
SQL> CREATE INDEX IND_T3_TABNAME ON T3 (TABLE_NAME );
Index created.
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS (USER, 't1', METHOD_OPT => 'FOR ALL INDEXED COLUMNS SIZE 100', CASCADE => TRUE)
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS (USER, 't2', METHOD_OPT => 'FOR ALL INDEXED COLUMNS SIZE 100', CASCADE => TRUE)
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS (USER, 't3 ', METHOD_OPT =>' FOR ALL INDEXED COLUMNS SIZE 100 ', CASCADE => TRUE)
PL/SQL procedure successfully completed.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.