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);'FullStack Study > 8주차' 카테고리의 다른 글
| JAVA 풀스택 36일차 - Oracle DB 6 / JDBC (0) | 2026.05.17 |
|---|---|
| JAVA 풀스택 35일차 - Oracle DB 5 (1) | 2026.05.15 |
| JAVA 풀스택 34일차 - Oracle DB 4 (0) | 2026.05.14 |
| JAVA 풀스택 33일차 - Oracle DB 3 (0) | 2026.05.13 |