FullStack Study/8주차

JAVA 풀스택 32일차 - Oracle DB 2

레몬팡777 2026. 5. 12. 08:46

SQL

데이터베이스를 조작하는 언어

SELECT * FROM EMPLOYEE;

CRUD

데이터 기번 차리 기능

기능 SQL
CREATE INSERT
READ SELECT
UPDATE UPDATE
DELETE DELETE

SELECT

데이터 조회

구조

SELECT 컬럼
FROM 테이블명
WHERE 조건
ORDER BY 컬럼;

WHERE

조건에 맞는 데이터 조회

WHERE DEPT_CODE = 'D6'

ORDER BY

데이터 정렬

ORDER BY EMP_NAME ASC;

날짜 함수

SYSDATE

DB 서버 기준 현재 날짜/시간

SELECT SYSDATE
FROM DUAL;

SYSTIMESTAMP 

DB 서버 기준 날짜 + 시간 + 밀리초

SELECT SYSTIMESTAMP
FROM DUAL;

CURRENT_DATE

내 컴퓨터 기준 현재 날짜

SELECT CURRENT_DATE
FROM DUAL;

CURRENT_TIMESTAMP

내 컴퓨터 기준 현재 날짜 + 시간

SELECT CURRENT_TIMESTAMP
FROM DUAL;

MONTHS_BETWEEN()

두 날짜 사이 개월 수 계산

SELECT MONTHS_BETWEEN(
	SYSDATE,
	HIRE_DATE
)
FROM EMPLOYEE;

ADD_MONTHS()

날짜에 개월 수 추가

SELECT ADD_MONTHS(
	SYSDATE,
	3
)
FROM DUAL;

EXTRACT()

날짜에서 특정 값 추출

SELECT EXTRACT(YEAR FROM SYSDATE),
       EXTRACT(MONTH FROM SYSDATE)
FROM DUAL;

TO_CHAR()

데이터를 문자로 반환

날짜 -> 문자 변환

TO_CHAR(HIRE_DATE, 'YYYY/MM/DD')

숫자 -> 문 변환

TO_CHAR(SALARY,'999,999,999')

숫자 포맷

기호 의미
0 빈자리 0 표시
9 빈자리 공백
L 화폐 기호

TO_DATE()

문자를 날짜로 변환

SELECT TO_DATE(
	'20260511',
	'YYYYMMDD'
)
FROM DUAL;

TO_NUMBER()

문자를 숫자로 변환

SELECT TO_NUMBER('100')
FROM DUAL;

DECODE()

조건 비교 함수

구조

DECODE(
	비교값,
	조건1, 결과1,
	조건2, 결과2,
	기본값
)

NVL()

NULL 값을 다른 값으로 변경

SELECT NVL(TO_CHAR(BONUS), 'X'),
FROM EMPLOYEE;

NVL2()

NULL 여부에 따라 결과 변경

SELECT NVL2(BONUS, 'O', 'X')
FROM EMPLOYEE;

NULL 이면 X, 아니면 O 로 변경

CASE 문

조건 처리 문법

구조

CASE
	WHEN 조건 THEN 결과
	ELSE 결과
END

숫자 함수

ABS()

절대값 반환

SELECT ABS(-7)
FROM DUAL;	--7 반환

MOD()

나머지 반환

SELECT MOD(10,3)
FROM DUAL;	--1 반환

CEIL()

올림 처리

SELECT CEIL(23.456), 	--24
       CEIL(23.678),	--24 
       CEIL(23)	--23
FROM DUAL;

FLOOR()

버림 처리

SELECT FLOOR(23.456),	--23 
       FLOOR(23.678),	--23 
       FLOOR(23)	--23
FROM DUAL;

ROUND()

반올림

구조

ROUND(숫자, 위치)
SELECT ROUND(23.456, 0),	--23
       ROUND(23.456, 1),	--23.5
       ROUND(23.456, 2),	--23.46
       ROUND(123.456, -2)	--100
FROM DUAL;

 

의미
0 정수
1 소수 첫째자리
2 소수 둘째자리
-1 일의 자리 반올림

TRUNC()

버림 함수

SELECT TRUNC(23.456, 0),	--23
       TRUNC(23.456, 1),	--23.4
       TRUNC(23.456, 2),	--23.45
       TRUNC(123.456, -2)	--100
FROM DUAL;

NEXT_DAY()

가장 가까운 다음 요일 반환

SELECT NEXT_DAY(SYSDATE, '금요일')
FROM DUAL;
NEXT_DAY(SYSDATE, '토')
NEXT_DAY(SYSDATE, 1)	-- 1:일요일 ~ 7:토요일

LAST_DAT()

해당 달의 마지막 날짜 반환

SELECT LAST_DAY(SYSDATE)
FROM DUAL;

날짜 연산

날짜 데이터는 계산 가능

SELECT
	(SYSDATE - 10)	-- 현재 날짜 - 10일
FROM DUAL;

날짜 포맷

TO_CHAR(SYSDATE,'HH24:MI:SS')

시간 포맷 종류

형식 의미
HH24 24시간
HH 12시간
MI
SS
AM 오전/오후

연도 포맷

형식 의미
YYYY 4자리 연도
YY 현재 세기 기준
RR 반세기 기준 계산
RRRR RR 포함 4자리

GROUP BY

특정 칼럼 기준으로 그룹 생성

SELECT DEPT_CODE,
	   AVG(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE;

- 부서별로 그룹 생성 후 평균 임금 계산

HAVING

GROUP BY 결과에 조건 설정

SELECT DEPT_CODE, AVG(SALARY) 평균
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING AVG(SALARY) > 3000000;

- 그룹 평균이 300만원 이상인 부서만 선택

ROLLUP()

중간 합계, 총 합계 자동 생성

SELECT JOB_CODE 직급,
       SUM(SALARY) 급여합계
FROM EMPLOYEE
GROUP BY ROLLUP(JOB_CODE);

SET OPERATOR

SELECT 결과를 집합처럼 처리

UNION

합집합

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
UNION
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000;

- 결과 합치기

- 중복 제거

UNION ALL

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
UNION ALL
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000;

- 결과 합치기

- 중복 제거하지 않음

INTERSECT

교집합

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
INTERSECT
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000;

- 겹치는 결과만 출력

MINUS

차집합

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
MINUS
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000;

- 첫 결과에서 겹치는 내용 제거

SET OPERATOR 사용 조건

- 컬럼 개수 동일

- 컬럼 타입 동일

 

JOIN

여러 테이블을 연결해서 조회

ORACLE 방식의 JOIN

SELECT EMP_NAME, JOB_CODE, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID;

표준 방식의 JOIN

SELECT EMP_NAME, JOB_CODE, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT ON(EMPLOYEE.DEPT_CODE = DEPARTMENT.DEPT_ID);

JOIN 흐름

EMPLOYEE.DEPT_CODE
=
DEPARTMENT.DEPT_ID

값이 같은 행끼리 연경

공통 컬럼 존재 시

컬럼명 앞에 테이블명 작성

 

SELECT EMP_ID,
	   EMP_NAME,
	   EMPLOYEE.JOB_CODE,
	   JOB_NAME
FROM EMPLOYEE
JOIN JOB
ON(EMPLOYEE.JOB_CODE = JOB.JOB_CODE);