출처 : http://tit99hds.egloos.com/928582


1.SELECT * INTO사용법

   SELECT  INTO 구문은 원본은 있고 대상 테이블은 새롭게 생성하려 할 경우 사용합니다.

   TABLE A에서 모든 데이터를 가져와 A_COPY라는 테이블을 생성하여 데이터를 INSERT하고 싶습니다.

   물론 A_COPY라는 테이블은 현재 만들어져있지 않습니다.

 

   SELECT * INTO A_COPY FROM A

 

  위와 같이 하면 A테이블과 같은 컬럼과 데이터를 가지는 A_COPY라는 테이블이 생성됩니다.

   그럼 A테이블의 특정 컬럼만 가져오려면?

 

   SELECT * INTO A_COPY

  FROM (

              SELECT COL1,COL2,COL3.... FROM A

             ) AS TEMP_TABLE

   위와 같이 하면 A테이블의 특정 컬럼만 가져와서 A_COPY라는 테이블을 생성하여 데이터를 INSERT합니다.

 

2.INSERT INTO SELECT 사용법

   INSERT INTO 구문은 원본과 대상테이블이 모두 있을 경우 사용합니다.

   TABLE A에서 모든 데이터를 가져와 B라는 테이블에 INSERT 하고 싶습니다.

  

   INSERT INTO B SELECT * FROM A

   위에서 TABLE A와 TABLE B는 스키마가 동일해야 합니다.

 

   만일 A보다 컬럼수가 적을 경우에는

   INSERT INTO B SELECT COL1,COL2,COL3 FROM A

  와 같이 사용할 수 있습니다.

출처 : http://blog.naver.com/windil?Redirect=Log&logNo=43011738

Never do a calculation on an indexed column (e.g., WHERE salary*5 > :myvalue).

인텍스 칼럼에는 수식을 사용치 마라.
 

Whenever possible, use the UNION statement instead of OR conditions.

가능한한 OR 조건문 대신 UNION문을 사용하라.
 

Avoid the use of NOT IN or HAVING in the WHERE clause. Instead, use the NOT EXISTS clause.

WHERE절에 NOT IN이나 HAVING사용을 삼가하라. 대신 NOT EXISTS절을 사용하라.
 

Always specify numeric values in numeric form and character values in character form (e.g., WHERE emp_number = 565, WHERE emp_name = 'Jones'.

숫자 관련 값은 숫자로, 문자열 관련 값은 문자로 표현하라.
 

Avoid specifying NULL in an indexed column.

인덱스 칼럼에 NULL사용하지 마라.
 

Avoid the LIKE parameter if = will suffice. Using any Oracle function will invalidate the index, causing a full-table scan.

=(equal)연산자만으로 충분하다면 LIKE를 사용치 마라. 오라클 함수를 사용하는 것은 인덱스를 무용지물로 만들어 full-table scan를 하게 만든다.
 

Never mix data types in Oracle queries, as it will invalidate the index. If the column is numeric, remember not to use quotes (e.g., salary = 50000). For char index columns, always use single quotes (e.g., name = 'BURLESON'.

오라클 쿼리에서 데이터 타입을 섞으면 인덱스를 무용지물로 만든다. 칼럼이 숫자면 따옴표를 사용치말고 문자열이면 항상 작은따옴표를 사용하라.
 

Avoid using subqueries when a JOIN will do the job.

JOIN으로 해결할 수 있다면 서브쿼리를 사용치 마라.
 

Use the Oracle "decode" function to minimize the number of times a table has to be selected.

오라클의 "decode" 함수를 사용하여 개별 테이블이 선택되어지는 횟수를 최소화하라.
 

To turn off an index you do not want to use (only with a cost-based optimizer), concatenate a null string to the index column name (e.g., name||') or add zero to a numeric column name (e.g., salary+0).

(cost-based optimizer에서만) 사용하고 싶지 않은 인덱스를 꺼버리려면,  문자열값을 갖는 인덱스 칼럼의 이름에null 문자열을  잇거나 숫자값을 갖는 인덱스 칼럼에 숫자 0을 더해버려라.
 

If your query will return more than 20 percent of the rows in the table, a full-table scan may be better than an index scan.

쿼리가 20%이상의 테이블 데이터를 불러온다면, full-table scan이 index scan보다 더 낫다.
 

Always use table aliases when referencing columns.

칼럼을 참조할 때는 항상 테이블 alias(별칭)을 사용하라.

'DATABASE' 카테고리의 다른 글

오라클과 NLS 찰떡궁합 보기  (0) 2009.10.29
SQL 튜닝 규칙.  (0) 2009.09.21
SQL 튜닝 규칙.  (0) 2009.09.21
SQL 튜닝 규칙.  (0) 2009.09.21
Oracle DB Link  (0) 2009.09.14
Oracle DB Link  (0) 2009.09.14

출처 : http://blog.naver.com/windil?Redirect=Log&logNo=43011738

Never do a calculation on an indexed column (e.g., WHERE salary*5 > :myvalue).

인텍스 칼럼에는 수식을 사용치 마라.
 

Whenever possible, use the UNION statement instead of OR conditions.

가능한한 OR 조건문 대신 UNION문을 사용하라.
 

Avoid the use of NOT IN or HAVING in the WHERE clause. Instead, use the NOT EXISTS clause.

WHERE절에 NOT IN이나 HAVING사용을 삼가하라. 대신 NOT EXISTS절을 사용하라.
 

Always specify numeric values in numeric form and character values in character form (e.g., WHERE emp_number = 565, WHERE emp_name = 'Jones'.

숫자 관련 값은 숫자로, 문자열 관련 값은 문자로 표현하라.
 

Avoid specifying NULL in an indexed column.

인덱스 칼럼에 NULL사용하지 마라.
 

Avoid the LIKE parameter if = will suffice. Using any Oracle function will invalidate the index, causing a full-table scan.

=(equal)연산자만으로 충분하다면 LIKE를 사용치 마라. 오라클 함수를 사용하는 것은 인덱스를 무용지물로 만들어 full-table scan를 하게 만든다.
 

Never mix data types in Oracle queries, as it will invalidate the index. If the column is numeric, remember not to use quotes (e.g., salary = 50000). For char index columns, always use single quotes (e.g., name = 'BURLESON'.

오라클 쿼리에서 데이터 타입을 섞으면 인덱스를 무용지물로 만든다. 칼럼이 숫자면 따옴표를 사용치말고 문자열이면 항상 작은따옴표를 사용하라.
 

Avoid using subqueries when a JOIN will do the job.

JOIN으로 해결할 수 있다면 서브쿼리를 사용치 마라.
 

Use the Oracle "decode" function to minimize the number of times a table has to be selected.

오라클의 "decode" 함수를 사용하여 개별 테이블이 선택되어지는 횟수를 최소화하라.
 

To turn off an index you do not want to use (only with a cost-based optimizer), concatenate a null string to the index column name (e.g., name||') or add zero to a numeric column name (e.g., salary+0).

(cost-based optimizer에서만) 사용하고 싶지 않은 인덱스를 꺼버리려면,  문자열값을 갖는 인덱스 칼럼의 이름에null 문자열을  잇거나 숫자값을 갖는 인덱스 칼럼에 숫자 0을 더해버려라.
 

If your query will return more than 20 percent of the rows in the table, a full-table scan may be better than an index scan.

쿼리가 20%이상의 테이블 데이터를 불러온다면, full-table scan이 index scan보다 더 낫다.
 

Always use table aliases when referencing columns.

칼럼을 참조할 때는 항상 테이블 alias(별칭)을 사용하라.

'DATABASE' 카테고리의 다른 글

오라클과 NLS 찰떡궁합 보기  (0) 2009.10.29
SQL 튜닝 규칙.  (0) 2009.09.21
SQL 튜닝 규칙.  (0) 2009.09.21
SQL 튜닝 규칙.  (0) 2009.09.21
Oracle DB Link  (0) 2009.09.14
Oracle DB Link  (0) 2009.09.14


SELECT ROW_NUMBER()OVER(order by no) , no FROM fallacy order by no desc

'DATABASE' 카테고리의 다른 글

[Oracle] Driver, URL  (0) 2008.03.27
[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11


SELECT ROW_NUMBER()OVER(order by no) , no FROM fallacy order by no desc

'DATABASE' 카테고리의 다른 글

[Oracle] Driver, URL  (0) 2008.03.27
[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11

[출처] [SQL] sequence|작성자 bluekisunny


= 자동으로 번호를 부여하는 방법.
순서대로 숫자값을 얻어서 primary key나 unique key로 주로 사용한다. 특히나 많은 사용자가 동시에 DB를 사용할 때는 Unique한 컬럼의 데이터가 중복되어 에러가 발생하는 경우가 종종 생기는데, 이경우 사용할 수 있는 값이 sequence이다.

번호 조회시점에서 자신도 증가하고, 증가시킨 숫자값을 돌려주기때문에 아무리 동시작업일 경우에도 근본적으로 중복값으로 오는 문제점을 해결할수 있다.


◎ 사용법

 

sequence는 테이블처럼 sequence를 생성시켜서 이를 select문으로 활용한다.


- 생성

 

CREATE SEQUENCE 시퀀스이름
INCREMENT BY n
START WITH n
MINVALUE n (or NOMINVALUE)
MAXVALUE n (or NOMAXVALUE)
CYCLE (or NOCYCLE)
CACHE N (or NOCACHE);


 INCREMENT BY

 증가분 값

 START WITH

 시작값

 MINVALUE

 최소값

 MAXVALUE

 최대값

 CYCLE

 MAXVALUE 이후 처음부터 다시 시작한다는 의미

 CACHE

 빠른 처리를 위한 메모리 관리, 적어도 2이상 값을 적용해야함



EX)


CREATE SEQUENCE seq_no
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 99999
CYCLE
CACHE 100;

위 쿼리는 1부터 99999까지 1씩 증가하는 sequence를 seq_No라는 이름으로 생성시키는 쿼리이다.


- 삭제

 

DROP SEQUENCE 시퀀스명;


- 수정

 

항목은 생성과 동일하지만 시작 값인 START WITH 는 사용 할 수 없다.


ALTER SEQUENCE 시퀀스이름
INCREMENT BY n
MINVALUE n (or NOMINVALUE)
MAXVALUE n (or NOMAXVALUE)
CYCLE (or NOCYCLE)
CACHE N (or NOCACHE);


- 조회

sequence의 값을 조회하거나 얻을 경우에는 select문을 사용하는데 sequence의 속성을 사용한다.


CURRVAL : 현재 sequence 값을 조회
NEXTVAL : 증가 sequence 값을 조회 & 실제로 증가


select문을 사용 할때는 다음처럼 사용한다.


SELECT 시퀀스이름.CURRVAL FROM DUAL;
SELECT 시퀀스이름.NEXTVAL FROM DUAL;


- SEQEUNCE 목록

SELECT  * FROM USER_SEQUENCES;



이해력을 돕기위한 활용 예제 두둥~!



SQL> CREATE SEQUENCE seq_no
INCREMENT BY 1
START WITH 5
MINVALUE 1
MAXVALUE 10
CYCLE
CACHE 5;

Statement Processed.


-> 시퀀스를 생성한다.


SQL> SELECT seq_no.CURRVAL FROM DUAL
ORA-08002: 시퀀스 SEQ_NO.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다

-> 시퀀스 생성이후 처음에는 CURRVA 값을 얻을 수 없다.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          5

1 rows selected.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          6

1 rows selected.

SQL> SELECT seq_no.CURRVAL FROM DUAL;

CURRVAL   
-----------
          6

1 rows selected.



....중간 생략



SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
         10

1 rows selected.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          1

1 rows selected.


-> CYCLE로 설정되어 있기 때문에 MAXVALUE 값인 10 이후에 MINVALUE 1부터 다시 시작한다

[출처] [SQL] sequence|작성자 bluekisunny

'DATABASE' 카테고리의 다른 글

[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
Oracle Export , Import 관한 내용  (0) 2008.01.10
Oracle Export , Import 관한 내용  (0) 2008.01.10

[출처] [SQL] sequence|작성자 bluekisunny


= 자동으로 번호를 부여하는 방법.
순서대로 숫자값을 얻어서 primary key나 unique key로 주로 사용한다. 특히나 많은 사용자가 동시에 DB를 사용할 때는 Unique한 컬럼의 데이터가 중복되어 에러가 발생하는 경우가 종종 생기는데, 이경우 사용할 수 있는 값이 sequence이다.

번호 조회시점에서 자신도 증가하고, 증가시킨 숫자값을 돌려주기때문에 아무리 동시작업일 경우에도 근본적으로 중복값으로 오는 문제점을 해결할수 있다.


◎ 사용법

 

sequence는 테이블처럼 sequence를 생성시켜서 이를 select문으로 활용한다.


- 생성

 

CREATE SEQUENCE 시퀀스이름
INCREMENT BY n
START WITH n
MINVALUE n (or NOMINVALUE)
MAXVALUE n (or NOMAXVALUE)
CYCLE (or NOCYCLE)
CACHE N (or NOCACHE);


 INCREMENT BY

 증가분 값

 START WITH

 시작값

 MINVALUE

 최소값

 MAXVALUE

 최대값

 CYCLE

 MAXVALUE 이후 처음부터 다시 시작한다는 의미

 CACHE

 빠른 처리를 위한 메모리 관리, 적어도 2이상 값을 적용해야함



EX)


CREATE SEQUENCE seq_no
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 99999
CYCLE
CACHE 100;

위 쿼리는 1부터 99999까지 1씩 증가하는 sequence를 seq_No라는 이름으로 생성시키는 쿼리이다.


- 삭제

 

DROP SEQUENCE 시퀀스명;


- 수정

 

항목은 생성과 동일하지만 시작 값인 START WITH 는 사용 할 수 없다.


ALTER SEQUENCE 시퀀스이름
INCREMENT BY n
MINVALUE n (or NOMINVALUE)
MAXVALUE n (or NOMAXVALUE)
CYCLE (or NOCYCLE)
CACHE N (or NOCACHE);


- 조회

sequence의 값을 조회하거나 얻을 경우에는 select문을 사용하는데 sequence의 속성을 사용한다.


CURRVAL : 현재 sequence 값을 조회
NEXTVAL : 증가 sequence 값을 조회 & 실제로 증가


select문을 사용 할때는 다음처럼 사용한다.


SELECT 시퀀스이름.CURRVAL FROM DUAL;
SELECT 시퀀스이름.NEXTVAL FROM DUAL;


- SEQEUNCE 목록

SELECT  * FROM USER_SEQUENCES;



이해력을 돕기위한 활용 예제 두둥~!



SQL> CREATE SEQUENCE seq_no
INCREMENT BY 1
START WITH 5
MINVALUE 1
MAXVALUE 10
CYCLE
CACHE 5;

Statement Processed.


-> 시퀀스를 생성한다.


SQL> SELECT seq_no.CURRVAL FROM DUAL
ORA-08002: 시퀀스 SEQ_NO.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다

-> 시퀀스 생성이후 처음에는 CURRVA 값을 얻을 수 없다.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          5

1 rows selected.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          6

1 rows selected.

SQL> SELECT seq_no.CURRVAL FROM DUAL;

CURRVAL   
-----------
          6

1 rows selected.



....중간 생략



SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
         10

1 rows selected.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          1

1 rows selected.


-> CYCLE로 설정되어 있기 때문에 MAXVALUE 값인 10 이후에 MINVALUE 1부터 다시 시작한다

[출처] [SQL] sequence|작성자 bluekisunny

'DATABASE' 카테고리의 다른 글

[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
Oracle Export , Import 관한 내용  (0) 2008.01.10
Oracle Export , Import 관한 내용  (0) 2008.01.10

+ Recent posts