Null
값이 정의되지 않은, 존재하지 않는, 할당되지 않은, 현재 데이터를 입력하지 못한 경우, 적용 불가능한 상태
ex)
숫자 0 의 경우 -> ASCII 코드: 48
공백 ' '의 경우 -> ASCII 코드: 32
null 의 경우 -> ASCII 코드: 00
WHERE 절에서 사용할 경우에는 is null 또는 is not null 로 쓴다.
null 은 연산할 수 없다.
null 은 정렬시 가장 큰 값으로 간주한다.
DISTINCT
중복되지 않는 유니크한 튜플만 가져온다.
Oracle version | 원리 | 처리 데이터 |
10g 이전 | ORDER BY | 규모가 작은 데이터량 |
10g 이후 | Hash | 빅데이터 |
DECODE 함수
Oracle 에서만 지원하는 함수이다.
SELECT 문장 내에서 if문을 수행해준다.
CASE
DECODE와 달리 비교연산이 가능하다.
1) CASE ~ WHEN
CASE [대상값] WHEN [비교값1] THEN [결과1] WHEN [비교값2] THEN [결과2] WHEN [비교값3] THEN [결과3] ELSE [결과4] END; |
위 SQL을 DECODE로 바꿔 표현해보면..
DECODE(대상갑,비교값1,결과1,비교값2,결과2,비교값3,결과3,결과4);
2) CASE ~ WHEN 2
CASE WHEN [대상컬럼1] [비교연산1] [비교값1] THEN [결과1] WHEN [대상컬럼2] [비교연산2] [비교값2] THEN [결과2] WHEN [대상컬럼3] [비교연산3] [비교값3] THEN [결과3] ELSE [결과4] END; |
예제)
SELECT GRADE CASE WHEN GRADE>=90 THEN 'A+' WHEN GRADE>=80 THEN AND GRADE<90 THEN 'B+' WHEN GRADE>=70 THEN AND GRADE<80 THEN 'C+' ELSE 'F' FROM SUBJECT |
학생의 과목 점수가 90점이상이면 'A+' 학점을 주고, 80~89점이면 'B+', 60~79점이면 'C+' 이고, 나머지는 'F'이다.
ROWNUM
가상의 컬럼, 쿼리가 실행될 때 레코드에 번호를 나타내어 주는 필드이다.
* Query 처리 순서
⑧ SELECT ⑨ DISTINCT ⑪ <TOP_specification> <select_list> ① FROM <left_table> ③ <join_type> JOIN <right_table> ② ON <join_condition> ④ WHERE <where_condition> ⑤ GROUP BY <group_by_list> ⑥ WITH {CUBE | ROLLUP} ⑦ HAVING <having_condition> ⑩ ORDER BY <order_by_list> |
1. FROM <테이블 이름>
2. ON <조인 조건>
3. <조건 타입> JOIN <조인할 테이블>
4. WHERE <조건절>
5. GROUP_BY <그룹할 컬럼>
6. WITH <결과집합>
7. HAVING <HAVING_조건절>
8. SELECT
9. DISTINCT
10. ORDER BY <정렬할 컬럼>
11. 가져올 데이터 리스트
많이 쓰는 함수
/* 단일행: 문자 함수 */
lower(A) -> A 문자를 소문자로 변환한다
upper(a) -> a 문자를 대문자로 변환한다
substr(x,n,m) -> x 문자를 n번째 부터 m개 추출한다.
instr(x,y,n,m) -> x 문자에서 y를 찾는데, n번째 부터 m까지 범위에서 찾고 인덱스 값을 반환한다.
length(x) -> x 문자의 길이를 반환한다.
concat(x,y) -> x 문자와 y 문자를 합친다.
rpad("대상값","총 문자길이","채움문자") -> 문자길이를 기준으로 대상값의 오른쪽으로 문자를 채운다.
ex) rpad('WEB',5,'a') -> WEBaa
lpad("대상값","총 문자길이","채움문자") -> 문자길이를 기준으로 대상값의 왼쪽으로 문자를 채운다.
ex) lpad('server',8,'#') -> ##server
TRIM("문자열") -> 문자열의 양쪽 공백(스페이스바)을 제거한다.
/* 단일행: 숫자 함수 */
round(x,n) -> x 숫자를 n+1번째에서 반올림한다.
trunc(x,n) -> x 숫자를 n+1번째 부터 버린다.
/* 단일행: 날짜 함수 */
last_day("날짜") -> 입력한 날짜의 마지막 날짜를 반환한다.
ex) last_day(20190814) -> 2019/08/31
next_day("날짜","요일") -> 입력한 날짜 이후의 첫 번째 요일의 날짜를 계산한다.
ex) next_day(sysdate,'월') -> 2019/08/19
round("날짜","지정 값") -> 지정한 값 기준으로 반올림한다.
trunc("날짜","지정 값") -> 지정한 값 기준으로 절삭한다.
날짜 포맷
sysdate => 2019/08/14/21:19:03
SELECT to_char(sysdate , 'PM') FROM DUAL;
결과-> 오후
SELECT to_char(sysdate , 'HH') FROM DUAL;
결과-> 09
SELECT to_char(sysdate , 'HH24') FROM DUAL;
결과-> 21
SELECT to_char(sysdate , 'HH12') FROM DUAL;
결과-> 09
SELECT to_char(sysdate , 'MI') FROM DUAL;
결과-> 17
SELECT to_char(sysdate , 'SS') FROM DUAL;
결과-> 03
SELECT to_char(sysdate , 'SSSSS') FROM DUAL;
결과-> 76745
SELECT to_char(sysdate , 'D') FROM DUAL;
결과-> 4
SELECT to_char(sysdate , 'd') FROM DUAL;
결과-> 4
SELECT to_char(sysdate , 'DD') FROM DUAL;
결과-> 14
SELECT to_char(sysdate , 'dd') FROM DUAL;
결과-> 14
SELECT to_char(sysdate , 'DDD') FROM DUAL;
결과-> 226
SELECT to_char(sysdate , 'ddd') FROM DUAL;
결과-> 226
SELECT to_char(sysdate , 'DAY') FROM DUAL;
결과-> 수요일
SELECT to_char(sysdate , 'DY') FROM DUAL;
결과-> 수
SELECT to_char(sysdate , 'day') FROM DUAL;
결과-> 수요일
SELECT to_char(sysdate , 'FM') FROM DUAL;
결과-> (null)
SELECT to_char(sysdate , 'MM') FROM DUAL;
결과-> 08
SELECT to_char(sysdate , 'MON') FROM DUAL;
결과-> 8월
SELECT to_char(sysdate , 'MONTH') FROM DUAL;
결과-> 8월
SELECT to_char(sysdate , 'YYYY') FROM DUAL;
결과-> 2019
SELECT to_char(sysdate , 'YYY') FROM DUAL;
결과-> 019
SELECT to_char(sysdate , 'YY') FROM DUAL;
결과-> 19
SELECT to_char(sysdate , 'Y') FROM DUAL;
결과-> 9
SELECT to_char(sysdate , 'y') FROM DUAL;
결과-> 9
SELECT to_char(sysdate , 'RRRR') FROM DUAL;
결과-> 2019
SELECT to_char(sysdate , 'RR') FROM DUAL;
결과-> 19
SELECT to_char(sysdate , 'YEAR') FROM DUAL;
결과-> TWENTY NINETEEN
SELECT to_char(sysdate , 'Year') FROM DUAL;
결과-> Twenty Nineteen
'빅데이터 > 개념 정리' 카테고리의 다른 글
HashMap(해쉬맵)에 대한 개념과 사용방법 (0) | 2019.08.26 |
---|---|
JOIN, Sub Query, Transaction 개념정리 노트 (0) | 2019.08.14 |
데이터베이스의 기초, DBMS (0) | 2019.08.12 |
docker에 대하여, 왜 인기일까? (0) | 2019.08.08 |
Linux란 무엇이고, 사용하는 이유는? (0) | 2019.08.07 |