커리큘럼(12-30/변경)
01. Java
02. git
03. Database (v)
04. Jsp [Server]
05. 미니프로젝트 (3W)
06. HTML,CSS
07. JS
08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
SQL
함수
- 데이터 계산 수행
- 개별적인 데이터 항목 수정
- 행의 그룹에 대해 결과 조작
- 출력을 위한 날짜와 숫자 형식 설정
- 열의 데이터타입 변환
- 데이터 값 조작
- 인수를 받고 하나의 결과 리턴
- 리턴될 각각의 행에 적용
- 행별로 하나의 결과 리턴
- 데이터타입을 수정 가능
- 중첩될 수 있음
fucntion_name(column | expression,[arg1,arg2,...])
문자 함수
함수 |
설명 |
결과 |
INITCAP('javaspecialist') |
첫 문자만 대문자로, 나머지는 소문자로 출력 |
javaspecialist |
LOWER('JavaSpecialist') |
모두 소문자로 출력 |
javaspecialist |
UPPER('JavaSpecialist') |
모두 대문자로 출력 |
JAVASPECIALIST |
LENGTH('JavaSpecialist') |
문자열의 길이 출력 |
14 |
LENGTHB('자바전문가그룹') |
바이트 수를 출력 |
21 |
CONCAT('Java', 'Specialist') |
두 문자열을 연결 |
JavaSpecialist |
SUBSTR('JavaSpecialist', 5,7) |
부분 문자열을 출력 |
Special |
SUBSTRB('자바전문가그룹', 7, 9) |
바이트를 기준으로 부분 문자열을 출력 |
전문가 |
INSTR(JavaSpecialist', 'S') |
찾는 문자의 위치 반환, 찾지 못하면 0 반환 |
5 |
INSTRB('자바전문가그룹', '전') |
찾는 문자열의 위치를 바이트 수로 반환 |
7 |
LPAD(17600, 10, '*') |
주어진 자릿수만큼 왼쪽에 채움 |
*****17600 |
RPAD('Java', 10, '-') |
주어진 자릿수만큼 오른쪽에 채움 |
Java------ |
LTRIM('JavaSpecialist','Java') |
첫 번째 문자열의 왼쪽부터 두 번째 문자열을 지움 |
Specialist |
LTRIM(' JavaSpecialist') |
왼쪽 공백 제거 |
JavaSpecialist |
TRIM(' JavaSpecialist ') |
양쪽 공백 제거 |
JavaSpecialist |
REPLACE('JavaSpecialist','Java', 'BigData') |
주어진 문자열에서 두 번째 인수의 문자열을 세 번째 인수의 문자열로 변경 |
BigDataSpecialist |
LOWER, UPPER, INITCAP
- LOWER : 소문자 변환 함수
- UPPER : 대문자 변환 함수
- INITCAP : 첫문자만 대문자 나머지는 소문자 변환 함수
SELECT 'abcDEF', LOWER('abcDEF'),UPPER('abcDEF'), INITCAP('abcDEF') FROM DUAL;
SELECT LOWER(FIRST_NAME), UPPER(FIRST_NAME),INITCAP(FIRST_NAME) FROM EMPLOYEES;
LENGTH, INSTR
- LENGTH : 길이
- INSTR : 문자열 찾기
SELECT FIRST_NAME, LENGTH(FIRST_NAME), INSTR(FIRST_NAME,'a') FROM EMPLOYEES;
SUBSTR, CONCAT
+SUBSTR : 문자열 자르기
+CONCAT : 문자열 붙이기
SELECT FIRST_NAME,SUBSTR(FIRST_NAME,1) FROM EMPLOYEES;
SELECT CONCAT(FIRST_NAME,LAST_NAME), FIRST_NAME || LAST_NAME FROM EMPLOYEES;
LAPD, RPAD
- LPAD : 왼쪽 공백을 특정 값으로 채움
- RPAD : 오른쪽 공백을 특정값으로 채움
SELECT LPAD(FIRST_NAME,10,'*') FROM EMPLOYEES;
SELECT RPAD(FIRST_NAME,10,'*') FROM EMPLOYEES;
TRIM , LTRIM, LTRIM
- TRIM : 양쪽 공백 제거
- LTRIM : 왼쪽에서 제거
- RTRIM : 오른쪽에서서 제거
SELECT TRIM(' HELLO WORLD '),LTRIM(' HELLO WORLD '),RTRIM(' HELLO WORLD ') FROM DUAL;
SELECT LTRIM( 'HELLO WORLD','HELLO') FROM DUAL; -- REUSLT : WORLD
REPLACE, TRANSLATE
- REPLACE(타켓, 찾을문자, 변경문자) : 문자열 내에서 특정 문자를 찾아 다른 문자로 변경경
SELECT REPLACE('피카츄 라이츄 파이리 꼬북이 버터플', '꼬북이' , '어니부기') FROM DUAL;
함수 중첩(NESTED)
SELECT REPLACE(REPLACE('피카츄 라이츄 파이리 꼬북이 버터플', '꼬북이' , '어니부기'), ' ', ' > ') FROM DUAL;
숫자 함수
함수명 |
설명 |
ROUND(column|expression, n) |
열, 표현식 또는 값을 소수점 n 자리까지 반올림( n이 생략되면 소수점이 없어지고, n이 음수이면 소수점의 왼쪽자리 수만큼 반올림) |
TRUNC(column|expression, n) |
열, 표현식 또는 값을 소수점 n 자리까지 절삭(n이 생략되면 소수점이 없어지고, n이 음수이면 소수점의 왼쪽 자리수만큼 절삭) |
ABS(column|expression) |
절대값 반환 |
SIGN(column|expression) |
열, 표현식 또는 값이 양수인지 음수인지를 반환( 0보다 클 경우 1을, 작을 경우 -1을, 같으면 0 ) |
CEIL(column|expression) |
같거나 큰 가장 작은 정수 리턴 |
FLOOR(column|expression) |
작거나 같은 가장 큰 정수 리턴 |
REMAINDER(m, n) |
m을 n으로 나눈 나머지 리턴( NUMBER타입뿐만 아니라BINARY_DOUBLE 타입도 올 수있음) |
MOD(m, n) |
m을n으로 나눈 나머지 리턴 |
POWER(m, n) |
m의n제곱값 리턴 |
SQRT(n) |
n의 제곱근 값 리턴 |
SIN(radian), COS(radian) TAN(radian) |
radian값을 이용한 sine, cosine, tangent 값 <radian = degree * (3.141592/180)> |
SINH(radian), COSH(radian), TANH(radian) |
radian 값을 이용한 Hyperbolic sine, Hyperbolic cosine, Hyperbolic tangent값을 반환 |
EXP(n) |
e의 n승 값 리턴 |
LN(n) |
자연 log값 리턴 |
LOG(m,n) |
m을기수로 이용하여 n의 대수 리턴 |
ROUND
- ROUND(m,n) 에서 n이 양수이면 소수점 자리, 음수이면 정수 자리 부분에 대해서 반올림을 수행
SELECT ROUND(45.92,2),ROUND(45.923,0),ROUND(45.923,-1) FROM DUAL;
TURNC
- TRUNC(m,n) 에서 n이 양수이면 소수점 자리, 음수이면 정수 자리 부분에 대해서 절삭을 수행
SELECT TRUNC(45.923,2),TRUNC(45.923),TRUNC(45.923,-1) FROM DUAL;
ABS,CEIL,FLOOR,MOD
- ABS : 절대값
- CEIL : 올림
- FLOOR : 내림
- MOD : 나머지
SELECT ABS(-3),CEIL(3.14),FLOOR(3.14),MOD(5,2) FROM DUAL;
날짜 함수
- 오라클은 세기, 년, 월, 일, 시간, 분, 초의 내부 숫자형식으로 날짜 저장
- 디폴트 날짜 형식은 'DD-MON-YY' 또는 'YY/MM/DD'
- DUAL은 SYSDATE를 보기 위해 사용된 더미 테이블
날짜 연산
작업 |
결과 |
설명 |
날짜 + 숫자 |
날짜 |
일(DAY) 수를 날짜에 더함 |
날짜 - 숫자 |
날짜 |
날짜에서 일(DAY) 수를 뺌 |
날짜 - 날짜 |
날짜 |
어떤 날짜에서 다른 날짜를 뺌 |
날짜 + 숫자/24 |
날짜 |
시간을 날짜에 더함 |
날짜 반올림, 절삭
SELECT SYSDATE, ROUND(SYSDATE), TRUNC(SYSDATE) FROM DUAL;
SELECT TRUNC(SYSDATE,'YEAR') FROM DUAL; - 년 기준으로 절삭
SELECT TRUNC(SYSDATE,'MONTH') FROM DUAL; - 월 기준으로 절삭
변환 함수
SELECT * FROM EMPLOYEES WHERE SALARY >= '10000';
변환 함수 |
설명 |
TO_CHAR(number[,'fmt']) |
숫자를 포맷 모델 fmt를 사용해 VARCHAR2 문자 스트림으로 변환 |
TO_CHAR(date[,'fmt']) |
날짜를 포맷 모델 fmt를 사용해 VARCHAR2 문자 스트림으로 변환 |
TO_NUMBER(char[,'fmt']) |
숫자를 포함하는 문자 스트림을 숫자**로 변환 |
TO_DATE(char[,'fmt']) |
날짜를 나타내는 문자 스트림을 명시된 fmt에 따라서 날짜 값으로 변환 (fmt생략시 DD-MM-YY순) |
TO_CHAR
- 날짜를 문자로 변환하기 위해서 TO_CHAR함수 사용
- 날짜 형식을 지정하기 위해서 fmt(format)를 지정하며, fmt는 단일 인용 부호로 둘러싸여 있어야함
- 추가된 공백을 제거하거나 앞부분의 0을 없애기 위해 fm(fill mode) 사용
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYY"년" MM"월" DD"일" HH"시" MI"분" SS"초"') FROM DUAL; -- 데이트 포멧 형식이 아닌값은 ""로 묶으면 됨
SELECT FIRST_NAME, TO_CHAR(HIRE_DATE,'YY-MM-DD AM') FROM EMPLOYEES;
요소 |
설 명 |
예시 |
결과 |
9 |
숫자 위치(9의 수는 출력 폭을 결정) |
999999 |
1234 |
0 |
앞에 0을 출력 |
0999999 |
001234 |
$ |
달러 기호를 나타냄 |
$999999 |
$1234 |
L |
지역 화폐 기호 사용 |
L999999 |
₩1234 |
. |
명시한 위치에 소수점 출력 |
999999.99 |
1234.00 |
, |
명시한 위치에 콤마 출력 |
999,999 |
1,234 |
SELECT TO_CHAR(20000,'9999999999') AS "20000" FROM DUAL; -- 9는 자리수
SELECT TO_CHAR(20000,'09999999999') AS "20000" FROM DUAL; -- 남는 자리는 0으로 채움
SELECT TO_CHAR(20000,'9999') FROM DUAL; -- 자리가 부족하면 #으로 처리됨
SELECT TO_CHAR(20000.123,'999999.999') FROM DUAL;
SELECT TO_CHAR((20000,'L999,999,99') FROM DUAL; -- $는 그냥 쓰면 됨, L을 붙이면 지역화폐기호
TO_NUMBER
TO_NUMBER(char,'fmt')
- 오직 숫자로만 이루어진 문자 스트링은 숫자형식으로 자동 형변환
- $ 또는 , 등을 포함한 문자스트링은 fmt를 지정해서 형 변환
SELECT '20000'+20000 FROM DUAL;
SELECT TO_NUMBER('$5,500.00','$99,999.99') - 4000 FROM DUAL;
TO_DATE
SELECT TO_DATE('2024-02-08','YYYY-MM-DD') FROM DUAL;
SELECT TO_DATE('2024-02-07','YYYY-MM-DD') - HIRE_DATE FROM EMPLOYEES;
SELECT TO_DATE('2024년 02월 07일','YYYY"년" MM"월" DD"일"') FROM DUAL;
SELECT TO_DATE('2024-02-07 02:32:24','YYYY-MM-DD HH:MI:SS') FROM DUAL;
.
NVL
- NULL 값을 실제 값으로 변환하기 위해 사용
- 사용될 수 있는 데이터 타입은 날짜, 문자, 숫자
- expr1이 Null이 아니면 해당 값을 출력하고 Null이라면 expr2 출력
-- NVL(타겟, NULL일 경우 대체할 값)
SELECT NVL(3000,0), NVL(NULL,0) FROM DUAL;
SELECT FIRST_NAME, SALARY, NVL(COMMISSION_PCT,0),SALARY+SALARY*NVL(COMMISSION_PCT,0) AS 실제급여 FROM EMPLOYEES;
NVL2
NVL2(expr1, expr2, expr3)
- expr1의 값이 Null일 경우 expr2, Null이 아닐경우 expr3 반환
- NVL과 달리 값 자체를 바꾸는게 아닌 NULL값의 유무에 따라 설정한 값의 단순 반환
-- NVL2(타겟, NULL이 아닐때, NULL일 떄)
SELECT NVL2(NULL,'NOT NULL', 'NULL') FROM DUAL;
SELECT FIRST_NAME,COMMISSION_PCT,NVL2(COMMISSION_PCT,SALARY+SALARY*COMMISSION_PCT,SALARY) FROM EMPLOYEES;
COALESCE
-- CCOALESCE(값, 값, ...) : NULLL이 아닌 첫번쨰 인자값을 반환하는 함수
SELECT COALESCE('A','B','C') FROM DUAL;
SELECT COALESCE(NULL,'B','C') FROM DUAL;
SELECT COALESCE(NULL,NULL,'C') FROM DUAL;
SELECT COALESCE(NULL,NULL,NULL) FROM DUAL;
SELECT COALESCE(COMMISSION_PCT,0),NVL(COMMISSION_PCT,0) EMPLOYEES;
.
DECODE
DECODE(column or expression , search1, result1
[, search2, reulst2, ... ,]
[, default])
- IF-THEN-ELSE 구문과 유사한 방법으로 표현식 해독
- expression을 해독한 후 각각의 searchN에 대해 비교
- 표현식의 결과가 searchN과 같다면 resultN 반환
-- DECODE(값, 비교값, 결과값, ..... , ELSE문
SELECT DECODE('B','A','A입니다','B','B입니다','C','C입니다','나머지입니다') FROM DUAL;
SELECT JOB_ID, DECODE(JOB_ID,'IT_PROG',SALARY*1.1
, 'FI_MGR',SALARY*1.2
,'AD_VP',SALARY*1.3
,SALARY) DECODE
FROM EMPLOYEES;
CASE ~ WHEN ~ THEN
CASE [column or expression] WHEN condition1 THEN result1
WHEN condition2 THEN result2
.......
WHEN conditionN THEN resultN
ELSE result
END
- IF ~ ELSE 문 또는 SWITCH ~ CASE 문과 같은 기능
- CASE 절 뒤에 표현식이 있을 경우 WHEN 절에는 값이 오며, CASE 절 뒤에 아무것도 없을 경우 WHEN 절에 조건식이 옴
-- CASE ~ WHEN ~ THEN ~ ELSE ~ END
SELECT FIRST_NAME
, JOB_ID
, SALARY
, CASE JOB_ID WHEN 'IT_PROG' THEN SALARY*1.1
WHEN 'FI_MGR' THEN SALARY*1.3
WHEN 'AD_VIP' THEN SALARY*1.3
ELSE SALARY
END CASE
FROM EMPLOYEES;
-- 2ND : WHEN 조건식을 넣을 수도 있음
SELECT FIRST_NAME
,JOB_ID
,SALARY
,CASE WHEN JOB_ID='IT_PROG' THEN SALARY*1.1
WHEN JOB_ID='FI_MGR' THEN SALARY*1.3
WHEN JOB_ID = 'AD_VP' THEN SALARY*1.3
ELSE SALARY
END CASE
FROM EMPLOYEES;
집합 연산자

UNION
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE LIKE '04%'
UNION
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE DEPARTMENT_ID=20;
UNIOIN ALL
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE LIKE '04%'
UNION ALL
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE DEPARTMENT_ID=20;
INTERSECT
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE LIKE '04%'
INTERSECT
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE DEPARTMENT_ID=20;
MINUS
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE LIKE '04%'
MINUS
SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE DEPARTMENT_ID=20;