10. DECODE와 CASE문

1) DECODE

- if 문 구현하는 DECODE문 : 특정 조건이 참이면 A, 거짓이면 B로 응답 가능


DECODE(비교값, 기준값1, '비교값=기준값1 일 때 반환값',[기준값2,비교값=기준값2 일 때 반환값,] '모두 다르면 기본 반환값');

DECODE(SALARY, 1000, '연봉1000만원', '연봉 1000만원 아님');


2) CASE문

CASE [expression]

 WHEN condition_1 THEN result_1

 WHEN condition_2 THEN result_2

...

 WHEN condition_3 THEN result_3

 ELSE result

END;

 - IF~THEN ~ELSE~END같은 조건문

- WHEN구 : 조건, THEN : 해당 조건이 참이면 실행되고 거짓이면 ELSE구가 실행

- 중첩 사용 가능

SELECT ENAME, SAL, CASE WHEN SAL>=2000 THEN 1000 ELSE(CASE WHEN SAL>=1000 THEN 500 ELSE 0 END)END AS BONUS FROM EMP;


11. ROWNUM과 ROWID

1) ROWNUM

- SELECT문의 결과에 대해서 임시로 부여되는 논리적인 일련번호 (SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호)

- 조회되는 행 수를 제한할떄 많이 사용

- ROWNUM을 사용해서 한 개의 행을 가지고 올 수 있으나, 여러 개의 행을 가지고 올 떄는 인라인 뷰(inline view)를 사용

SELECT * FROM EMP WHERE ROWNUM <-1;

SELECT * FROM(SELECT ROWNUM list, ENAME FROM EMP) WHERE list <=5; <- inline view : FROM절에 SELECT문 사용

SELECT * FROM(SELECT ROWNUM list, ENAME FROM EMP) WHERE list BETWEEN 5 AND 10; <- 웹페이지를 페이지 단위로 조회 구현..ㅎㅎ


2) ROWID

- ORACLE DB 내에서 데이터를 구분할 수 있는 유일한 값

- SELECT ROWID FROM EMP; 처럼 SELECT문으로 확인 가능

- 데이터의 저장 위치 등을 알 수 있음 (포인터 역할!)


3) TOP

- sql server에서 결과 집합으로 출력되는 행의 수를 제한

TOP (반환할 행의 수) [PERCENT] [WITH TIES] 

  - PERCENT : 쿼리 결과 집합에서 처음 Expression%의 행만 반환됨을 나타냄

 - WITH TIES : ORDER BY 절이 지정된 경우에만 사용할 수 있으며, TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정

SELECT TOP(1) PLAYER_NAME FROM PLAYER; 이런 식으로 사용



12. WITH구문

- 서브쿼리를 사용해 임시 테이블이나 뷰처럼 사용할 수 있는 구문

- 서브쿼리 블록에 별칭 지정 가능

- 옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단함


+ Recent posts