Fullstack-Study-241204-250625

커리큘럼(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

SELECT 'abcDEF', LOWER('abcDEF'),UPPER('abcDEF'), INITCAP('abcDEF') FROM DUAL;
SELECT LOWER(FIRST_NAME), UPPER(FIRST_NAME),INITCAP(FIRST_NAME) FROM EMPLOYEES;

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

SELECT LPAD(FIRST_NAME,10,'*') FROM EMPLOYEES;
SELECT RPAD(FIRST_NAME,10,'*') FROM EMPLOYEES;

TRIM , LTRIM, LTRIM

SELECT TRIM(' HELLO WORLD '),LTRIM(' HELLO WORLD '),RTRIM(' HELLO WORLD ') FROM DUAL;
SELECT LTRIM( 'HELLO WORLD','HELLO') FROM DUAL;  -- REUSLT : WORLD

REPLACE, TRANSLATE

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

SELECT ABS(-3),CEIL(3.14),FLOOR(3.14),MOD(5,2) FROM DUAL;

날짜 함수

  • 현재의 날짜 반환
  • 현재의 날짜와 시간을 반환

날짜 연산

작업 결과 설명
날짜 + 숫자 날짜 일(DAY) 수를 날짜에 더함
날짜 - 숫자 날짜 날짜에서 일(DAY) 수를 뺌
날짜 - 날짜 날짜 어떤 날짜에서 다른 날짜를 뺌
날짜 + 숫자/24 날짜 시간을 날짜에 더함

날짜 반올림, 절삭

SELECT SYSDATE, ROUND(SYSDATE), TRUNC(SYSDATE) FROM DUAL;

SELECT TRUNC(SYSDATE,'YEAR') FROM DUAL; - 년 기준으로 절삭
SELECT TRUNC(SYSDATE,'MONTH') FROM DUAL; - 월 기준으로 절삭

변환 함수

변환 함수 설명
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

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

  • 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

  • NULL이 아닌 첫번째 인자값 반환
-- 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])
-- 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
-- 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;