본문 바로가기

DataBase/Oracle

[퍼옴]질문과 답변에 올라온 오라클 TIP들

1. 10%를 랜덤하게 가져옵니다.(오라클 8.1.7 이상부터 지원이 됩니다.) [하얀그림자님 답변글]

SQL> SELECT *
        FROM table_name
        SAMPLE (10);

2. 오라클에서 CASE문 사용 예제 [하얀그림자님 답변글]

SQL>SELECT col,
           CASE
             WHEN col >= 0  AND col < 6  THEN 'A'
             WHEN col >= 6  AND col < 14 THEN 'B'
             WHEN col >= 14 AND col < 22 THEN 'C'
             WHEN col >= 22 THEN 'D'
           END
      FROM table_name;

3. 해당년도의 선택된 주의 첫번째 날자를 구하고 싶습니다.[석철희님 답변글]

[질문]
해당년도의 선택된 주의 첫번째 날자를 구하고 싶습니다.
 
예로 2002년 36번째 주의 첫번째 날자는 2002/09/02입니다.
2002년 36번째주를 가지고 '2002/09/02'이란 해당주의 첫번째 날자를 구하고 싶습니다.
 

[답변][석철희님 답변글]

SQL> SELECT NEXT_DAY(TO_DATE(해당년도||'0101','RRRRMMDD') + (선택한주 - 2) * 7, 2)
         FROM DUAL;
 

SQL> SELECT NEXT_DAY(TO_DATE(2003||'0101','RRRRMMDD') + (2 - 2) * 7, 2)
         FROM DUAL;
NEXT_DAY
--------
03/01/06
 
 
==> FROM 앞에 2 는 월요일을 그 주에 첫번째로 선택한 거니깐 일요일을
    그 주의 첫번째 날로 바꾸시려면 1로 바꾸시면 됩니다.
 
4. DB 테이블 내용 복사 대해서[하얀그림자님 답변글]

1). Table A와 Table B 가 있는데. A의 내용을 B로 복사하는 방법

SQL>INSERT INTO b SELECT * FROM a;
 
 
2). Table A가 있고 Table B를 생성하면서 복사하는 방법

SQL>CREATE TABLE b AS SELECT * FROM a;


3). Table A가 있고 Table A와 구조가 같고 내용은 복사하지 않는 Table B 생성 방법
 
SQL>CREATE TABLE b AS SELECT * FROM a WHERE 1 = 2;

5.점수별로 몇명씩 있는지 알고 싶습니다 .[배경열님 답변글]
 
[질문]
이름 점수
===============
홍길동 90
김길동 98
이길동 75
성춘향 60
이동국 30
최성국 100
김남일 85
 
일때 .....
점수별로 몇명씩 있는지 알고 싶습니다 ..
 
원하는 결과값
=============
점수대 명수
===============
90-100 3
80-89 1
0-79 3


[답변 ]
Sign Function을 쓰세요.
SELECT
        DECODE(SIGN(점수-89),1,'90-100',
        DECODE(SIGN(점수-79),1,'80-89','0-79')),
        COUNT(*)
FROM
        성적
GROUP BY
        DECODE(SIGN(점수-89),1,'90-100',
        DECODE(SIGN(점수-79),1,'80-89','0-79'))
ORDER BY 1 DESC

6. 컬럼에 해당하는 테이블명 알아내기..
 
SQL>SELECT TABLE_NAME
        FROM  USER_TAB_COLS
        WHERE COLUMN_NAME ='BOARD_ID'
 
이렇게 하시면 됩니다..
컬럼관련 정보는 USER_TAB_COLS 데이터사전을 통해 확인할 수 있습니다.
COLS라는 시노님을 이용해도 됩니다.


SQL>SELECT COUNT(COLUMN_NAME) "Column Count"
    FROM COLS
    WHERE TABLE_NAME ='STORM_BOARD'