트랜잭션

하나의 트랜잭션은

  • BEGIN TRANSACTION으로 구문을 시작.
  • COMMIT TRANSACTION 또는 ROLLBACK TRANSACTION으로 구문 종료.
  • ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 ROLLBACK이 수행된다.
BEGIN TRANSACTION
...
...
COMMIT /* 이 시점에서 트랜잭션 종료, 새로운 트랜잭션은 다시 BEGIN TRANSACTION으로 시작 */

BEGIN TRAN /* 줄여서 사용할 수 있다 */
...
...
ROLLBACK TRANSACTION /* 길게 쓸 수 있다 COMMIT 마찬가지 */
  • 저장점(SAVEPOINT)를 정의하면 현 시점에서 SAVEPOINT까지의, 트랜잭션의 일부만을 rollback하는 것이 가능하다.
begin tran
save transaction sp1
...query1
...query2
save transaction sp2
...query3
...query4
rollback transaction sp2
commit

query2까지만 수행된 결과셋이 저장된다.


between a and b

a와 b값 사이 범위를 지정.(a와 b를 포함한다)


TO_CHAR() / TO_DATE()
'201501' = TO_CHAR(svc_end_date, yyyymm)

TO_CHAR(): 날짜, 숫자 등을 문자열로 변경해준다.
원하는 포맷으로 표시 가능하다.
svc_end_date의 값을 yyyymm 형식으로 변환한다.

TO_DATE('201501', YYYYMM) = svc_end_date

TO_DATE(): 문자열 또는 데이터를 날짜로 변환해준다.
원하는 포맷으로 변환 가능하다.
이 쿼리에서는 'TO_DATE()의 결과값이 svc_end_date와 일치할 때'의 조건으로 사용되고 있다.


함수분류

1. 사용자 정의 함수

2. 내장함수: 벤더에서 제공

< 2-1. 단일행 함수 종류 >

Oracle / SQL Server

종류내용함수
문자형문자 입력 > 문자 또는 숫자 반환LOWER, UPPER, SUBSTR/SUBSTRING
LENGTH, LEN, LTRIM, RTRIM, TRIM, ASCII 등
숫자형숫자 입력 > 숫자 반환ABS, MOD, ROUND, TRUNC, SIGN, CHR/CHAR
CEIL/CEILING, FLOOR, EXP, LOG, LN, POWER
SIN, COS, TAN
날짜형DATE 타입의 값을 반환SYSDATE/GETDATE, EXTRACT/DATEPART
TO_NUMBER(TO_CHAR(d, 'YYYY'|'MM'|'DD')) /
YEAR|MONTH|DAY
변환형문자 숫자 날짜 값의 데이터 타입 변환TO_NUMBER, TO_CHAR, TO_DATE / CAST, CONVERT
NULL
관련
NULL 처리를 위한 함수NVL/ISNULL, NULIF, COALEASCE

문자형 함수기능
LOWER
(문자열)
문자열의 알파벳 문자를 소문자로
UPPER
(문자열)
문자열의 알파벳 문자를 대문자로
ASCII
(문자)
문자 또는 숫자를 ASCII 코드번호로 변환
CHR/CHAR
(ASCII 코드번호)
ASCII 코드 번호를 문자나 숫자로 변환
CONCAT
(문자열1,문자열2...)
Oracle/MySQL에서 유효
문자열 연결
Oracle에서는 문자열||문자열
SQL Server에서는 문자열+문자열
SUBSTR/SUBSTRING
(문자열, m[, n])
문자열 중 m번째 위치에서 n개 문자 길에 해당하는 문자를 반환
n 생략 시 마지막까지
LENGTH/LEN
(문자열)
문자열 개수를 숫자값으로 반환
LTRIM
(문자열 [, 지정문자])
지정 문자가 나타나면 해당 문자를 제거(생략 시 공백이 기본값)
SQL Server에서는 지정문자를 사용할 수 없다(공백만 제거 가능)
RTRIM
(문자열 [, 지정문자])
문자열의 마지막에서부터 검색 시작
나머지는 LTRIM과 동일하다
TRIM
([leading|trailing|both]
지정문자 from 문자열)
머리말 꼬리말 또는 양쪽에 있는 지정문자를 제거
옵션 생략시 both가 디폴트
마찬가지로 SQL Server에서는 지정문자 사용 불가(공백만 제거 가능)

단일행 NULL관련 함수
일반형 함수내용
NVL(표현식1, 표현식2) /
ISNULL(표현식1, 표현식2)
표현식1의 결과가 NULL이면 표현식2의 결과 출력
(단, 두 표현식의 결과값의 타입은 같아야 한다)
NULL관련 최다 사용 함수이며 매우 중요하다
NULLIF(표현식1, 표현식2)표현식1과 표현식2가 같으면 NULL, 다르면 표현식 1의 결과 출력
COALEASCE(표현식1, ...)임의의 개수의 표현식에서 NULL값이 아닌 최초의 표현식을 나타낸다
모든 표현식이 NULL이라면 NULL 리턴

< 2-2. 다중행 함수 >

집계 함수기능
COUNT(*)NULL값을 포함한 행의 수를 출력
COUNT(표현식)표현식 값이 NULL인 것을 제외한 행의 수를 출력
SUM([DISTINCT | ALL] 표현식)표현식 값이 NULL인 것을 제외한 행의 합을 출력
AVG([DISTINCT | ALL 표현식)표현식 값이 NULL인 것을 제외한 행의 평균을 출력
MAX([DISTINCT | ALL 표현식)표현식의 최댓값 출력(문자 날짜에도 사용 가능)
MIN([DISTINCT | ALL 표현식)표현식의 최솟값 출력(문자 날짜에도 사용 가능)
  • 그룹 함수
  • 윈도우 함수

CHR()

아스키 코드를 받아서 해당하는 문자열로 변환한다.
예)

CHR(10) /* 현재 커서의 위치에서 한 줄 아래로 내림 */

Oracle에서 날짜의 연산

숫자의 연산과 같다.
특정 날짜에 1을 더하면 하루를 더한 결과와 같다.
1 = 24시간
1/24/ = 1시간
1/24/60 = 1분
1/24/(60/10) = 10분


DUAL 테이블

  • 사용자 System이 소유하며 모든 사용자가 액세스 가능한 테이블이다.

  • SELECT ... FROM ... 의 형식을 갖추기 위한 일종의 더미(DUMMY) 테이블.

  • 이 테이블에는 'DUMMY'라는 이름의 문자열 칼럼에 'X'값이 들어있는 하나의 행이 존재한다.

/* Oracle */
/* MariaDB에는 to_date() 함수가 존재하지 않는다 */
select to_char(
				to_date('2015.01.10.10', 'YYYY.MM.DD HH24')+1/24/(60/10), 
                'YYYY.MM.DD HH24:MI:SS') as result
                from dual;
>> 실행 결과
RESULT
2015.01.10 10:10:00

부정 비교 연산자

같지 않다

  • !=

  • ^=

  • NOT 칼럼명 =
    = 외에도 >, < 사용

  • <>
    ISO표준


0개의 댓글