2 분 소요

DML (SELECT 2)

형 변환

형번환이란 두 개의 데이터의 데이터타입이 일치하도록 변환하는 것이다.

형변환은 명시적(Explict) 암시적 (Implicit) 형변환이 있다.

명시적 형변환은 사용자가 직접 함수를 통해 데이터 타입을 바꾸는 것을 의미하며, 암시적 형변환은 DBMS 가 자동으로 형변환 하는 것을 의미한다.

형 변환 함수

형변환 함수 설명
TO_NUMBER(문자열) 문자열을 숫자로 변환한다.
TO_CHAR(숫자or날자,[FORMAT] FORMAT의 문자로 변환한다.
TO_DATE(문자열,FORMAT) 문자열을 지정된 FORMAT의 날짜형으로 변환한다.

인덱스 칼럼을 형변환 하게 된다면 인덱스를 사용하지 못 한다.

내장형 함수

문자열 함수

문자열 함수 설명
ASCII(문자) 문자 호는 숫자를 아스키 코드로 변환
CHAR(아스키코드) 아스키 코드를 문자로 변환
SUBSTR(문자열,m,n) 문자열을 m번째 위치에서 n개만큼 슬라이싱
CONTACT(문자열1,문자열2) 문자열을 합침
LOWER(문자열) 문자열 소문자로 변환
UPPER(문자열) 문자열 대문자로 변환
LEN or LENGTH 공백 포함 문자열 길이 산출
LTRIM(문자열,지정문자) 왼쪽에서 지정문자 삭제
RTRIM(문자열,지정문자) 오른쪽에서 지정문자 삭제
TRIM(문자열, 지정문자) 왼쪽 오른쪽에서 지정된 문자 삭제

날짜형 함수

날짜형 함수 설명
SYSDATE 오늘의 날짜를 날짜 타입으로 알려줌
EXTRACT(‘YEAR’|’MONTH’|’DAY’ from dual) 날짜에서 년 월 일 조회

숫자형 함수

숫자형 함수 설명
ABS 절대값
SIGN 양수 음수 0 을 구별
MOD(숫자1,숫자2) 숫자1을 숫자2로 나누어 나머지 계산 (%로 대체 가능)
CEIL/CEILING 숫자보다 크거나 같은 최소의 정수를 반환
FLOOR 숫자보다 작거나 같은 최대의 정수를 반환
ROUND(숫자,m) 소수점 m 자리에서 반올림
TRUNC(숫자,m) 소수점 m 자리에서 절삭

DECODE와 CASE

DECODE

DECODE문은 IF문과 동일한 기능을 한다.

SELECT DECODE(칼럼명,조건,'TRUE','FALSE') FROM 테이블명 ;

-- 위 칼럼의 속성이 조건과 일치하다면 TRUE는 반환하고 불일치하다면 FALSE를 반환한다.

CASE

CASE문은 else if 와 같이 사용된다.

SELECT CASE
	WHEN 칼럼명 = 조건 THEN 'A'
	WHEN 칼럼명 = 조건 THEN 'B'
	WHEN 칼럼명 = 조건 THEN 'C'
	ELSE 'D'
  END
FROM 테이블명 ;

ROWNUM & ROWID

ROWNUM

오라클 DB는 SELECT 결과에 대해서 논리적인 일련번호 (=ROWNUM) 을 부여한다.

ROWNUM은 조회되는 행 수를 제한할 때 사용한다.

페이지 단위 출력을 위해서는 인라인 뷰 를 사용해야 한다.

SELECT * FROM 테이블명 WHERE ROWNUM BETWEEN 1 and 10 ;

-- ROWNUM이 1~10인 모든 행을 출력한다.


SELECT * FROM (SELECT ROWNUM 별칭 FROM 테이블명)WHERE 별칭 BETWEEN 5 and 10 ;

-- ROWNUM은 SELECT의 실행 결과에 대해서 순차적으로 부여되기 때문에 중간값부터 조회하기 위해선 추가적인 쿼리문이 필요하다. 

ROWID

ROWID는 DB내에서 데이터를 구분할 수 있는 유일한 값이다.

ROWID를 통해 데이터가 어떤 데이터 파일, 어느 블록에 저장되어 있는지 알 수 있다.

ROWID의 구조는 다음과 같다.

구조 길이 설명
오브젝트 번호 1~6 오브젝트 별로 유일한 값을 가지고 있으며, 해당 오브젝트가 속해 있는 값이다.
상대파일 번호 7~9 테이블스페이스에 속해 있는 데이터 파일에 대한 상대 파일번호이다.
블록번호 10~15 데이터 파일 내부에서 어느 블록에 데이터가 있는지 알려준다.
데이터번호 16~18 데이터 블록에 데이터가 저장되어 있는 순서를 의미한다.

WITH

WITH 구문은 서브쿼리를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있게 기능한다.

WITH NEW테이블 AS (SELECT * FROM 테이블명) SELECT * FROM NEW테이블명;


댓글남기기