*헷갈리는 내용 위주로 정리
-> 하나의 소유자를 반드시 가져야함
-> 소유자가 다를 경우 같은 이름의 테이블 생성 가능
MERGE INTO 대상테이블 AS target
USING 원본테이블 AS source
ON[조건]
WHEN MATCHED THEN -- 조건에 맞는 경우 업데이트
UPDATE SET target.컬럼 = source.컬럼
WHEN NOT MATCHED THEN -- 조건에 맞지 않는 경우 삽입
INSERT (컬럼1, 컬럼2, ...)
VALUES (source.컬럼1, source.컬럼2, ...);
insert 시켜도 되는거 아닌가?
-> merge는 조건을 걸어서 데이터의 insert, update, delete 등을 한번에 할 수 있음
별칭 사용시 주의점
""사용해야하는 경우
1. 특수기호(_제외)
2. 공백
3. 그대로 전달 -> 대소문자 등
oracle에서는 생략 불가 -> 의미상 필요 없는 경우 dual 사용 => 더미 테이블
if 별칭 설정했는데, select절에서 원래의 이름으로 선언시 에러 발생
- select는 column 이름을 칭하고,
- from은 table의 이름을 칭한다.
SUBSTR(대상, m, n)
return: 문자열
문자열 중 m 위치에서 n개의 문자열 추출
주의사항
1부터 위치 시작!!!!
예제
1.
SUBSTR('ABCDE', 2, 3)
결과값: BCD
2.
SUBSTR('ABCDE', 2)
결과값: BCDE
3.
SUBSTR('ABCDE', -4, 3)
결과값: BCD
=> -4 : 뒤에서 4번째 자리부터~
INSTR(대상, 찾을 문자열, m, n)
return: 위치
예제
1.
INSTR('A#B#C#', '#')
결과값: 2
2.
INSTR('A#B#C#', '#', 3, 2)
결과값: 6 => 두번째 #의 위치 return
3.
INSTR('A#B#C#', '#', -3, 2)
결과값: 2 => -3이 있어서 찾는 방향이 왼쪽으로 바뀜
REPLACE(대상, 찾을 문자열, 바꿀 문자열)
TRANSLATE(대상, 찾을 문자열, 바꿀 문자열)
=> replace: 문자열 치환
translate: 1:1 번역!!
FLOOR : 작거나 같은 최대 정수
CEIL: 크거나 같은 최소 정수
ROUND: 반올림
TRUNC: 버림
NULL값 제외하고 계산
DECODE(대상, 값1, 리턴1, ...)
NVL(대상, 치환값) : 대상이 null값이면 치환
NVL2(대상, 치환값1, 치환값2) : 대상이 null이면 값2, 아니면 값1
COALESCE(대상1, 대상2, ...): 대상 중 null이 아닌 값 return
예제
SELECT div, COALESCE(div, 0) FROM table_a;
| div | COALESCE(div, 0) |
|---|---|
| 1 | 1 |
| NULL | 0 |
| 4 | 4 |
ISNULL(대상, 치환값)
: 대상이 null이면 치환
NULLIF(대상1, 대상2)
: 대상1 == 대상2 null, 다르면 대상1값 return
CASE => END AS 필요
동일 대상에 대해 =로 표시하는 부분이 반복된다면
CASE WHEN 대상 = 조건 => CASE 대상 WHEN 조건
공부하면서 드는 생각은...이걸 어떻게 다 외우지 싶다...