하나의 트랜잭션은
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와 일치할 때'의 조건으로 사용되고 있다.
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에서는 지정문자 사용 불가(공백만 제거 가능) |
일반형 함수 | 내용 |
---|---|
NVL(표현식1, 표현식2) / ISNULL(표현식1, 표현식2) | 표현식1의 결과가 NULL이면 표현식2의 결과 출력 (단, 두 표현식의 결과값의 타입은 같아야 한다) NULL관련 최다 사용 함수이며 매우 중요하다 |
NULLIF(표현식1, 표현식2) | 표현식1과 표현식2가 같으면 NULL, 다르면 표현식 1의 결과 출력 |
COALEASCE(표현식1, ...) | 임의의 개수의 표현식에서 NULL값이 아닌 최초의 표현식을 나타낸다 모든 표현식이 NULL이라면 NULL 리턴 |
집계 함수 | 기능 |
---|---|
COUNT(*) | NULL값을 포함한 행의 수를 출력 |
COUNT(표현식) | 표현식 값이 NULL인 것을 제외한 행의 수를 출력 |
SUM([DISTINCT | ALL] 표현식) | 표현식 값이 NULL인 것을 제외한 행의 합을 출력 |
AVG([DISTINCT | ALL 표현식) | 표현식 값이 NULL인 것을 제외한 행의 평균을 출력 |
MAX([DISTINCT | ALL 표현식) | 표현식의 최댓값 출력(문자 날짜에도 사용 가능) |
MIN([DISTINCT | ALL 표현식) | 표현식의 최솟값 출력(문자 날짜에도 사용 가능) |
CHR()
아스키 코드를 받아서 해당하는 문자열로 변환한다.
예)
CHR(10) /* 현재 커서의 위치에서 한 줄 아래로 내림 */
숫자의 연산과 같다.
특정 날짜에 1을 더하면 하루를 더한 결과와 같다.
1 = 24시간
1/24/ = 1시간
1/24/60 = 1분
1/24/(60/10) = 10분
사용자 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표준