목차
1 SQL 기본 구조와 CRUD
2 날짜 함수
3 형 변환 함수
4 조건 처리 함수
5 숫자 함수
6 날짜 데이터 연산
7 SELECT문 실행 순서
8 GROUP BY
9 HAVING
10 ROLLUP
11 SET OPERATOR
12 JOIN
1 SQL 기본 구조와 CRUD
1) SELECT 기본 구조
(1) SELECT
SELECT는 데이터베이스에서 데이터를 조회할 때 사용하는 SQL 문장이다.
테이블에 저장된 데이터 중 어떤 컬럼을 볼 것인지 정하는 역할을 한다.
(2) FROM
FROM은 데이터를 가져올 테이블을 지정하는 부분이다.
SELECT로 조회할 대상이 어느 테이블에 있는지 알려준다.
(3) WHERE
WHERE은 특정 조건에 맞는 데이터만 조회할 때 사용한다.
전체 데이터가 아니라 원하는 데이터만 골라낼 때 필요하다.
(4) ORDER BY
ORDER BY는 조회 결과를 정렬할 때 사용한다.
이름순, 급여순, 날짜순처럼 결과를 보기 좋게 정리할 수 있다.
2) CRUD
(1) CRUD의 의미
CRUD는 데이터 처리의 기본 기능을 의미한다.
데이터를 추가하고, 조회하고, 수정하고, 삭제하는 작업을 묶어서 부르는 말이다.
(2) CREATE
CREATE는 데이터를 새로 추가하는 기능이다.
SQL에서는 주로 INSERT문을 사용해 데이터를 추가한다.
(3) READ
READ는 데이터를 조회하는 기능이다.
SQL에서는 SELECT문을 사용해 테이블에 저장된 데이터를 확인한다.
(4) UPDATE
UPDATE는 기존 데이터를 수정하는 기능이다.
이미 저장된 데이터의 값을 변경할 때 사용한다.
(5) DELETE
DELETE는 데이터를 삭제하는 기능이다.
필요 없는 데이터를 테이블에서 제거할 때 사용한다.
2 날짜 함수
1) 현재 날짜와 시간
(1) SYSDATE
SYSDATE는 데이터베이스 서버를 기준으로 현재 날짜와 시간을 조회한다.
DB 서버 시간이 필요할 때 사용한다.
(2) SYSTIMESTAMP
SYSTIMESTAMP는 데이터베이스 서버 기준의 현재 날짜와 시간을 더 자세하게 조회한다.
초 단위보다 더 정밀한 시간 정보가 필요할 때 사용할 수 있다.
(3) CURRENT_DATE
CURRENT_DATE는 현재 세션, 즉 사용자의 환경을 기준으로 현재 날짜를 조회한다.
DB 서버 기준이 아니라 사용자 기준 날짜를 보고 싶을 때 사용한다.
(4) CURRENT_TIMESTAMP
CURRENT_TIMESTAMP는 사용자 환경 기준의 현재 날짜와 시간을 자세하게 조회한다.
사용자의 시간대 기준으로 시간 정보를 확인할 때 사용한다.
2) MONTHS_BETWEEN
(1) MONTHS_BETWEEN의 역할
MONTHS_BETWEEN은 두 날짜 사이의 개월 수를 구하는 함수이다.
입사일로부터 몇 개월이 지났는지 계산할 때 사용할 수 있다.
(2) 입사 후 개월 수 계산
현재 날짜와 입사일을 비교하면 사원이 입사한 뒤 몇 개월이 지났는지 확인할 수 있다.
근속 개월 수나 근무 기간을 구할 때 유용하다.
3) ADD_MONTHS
(1) ADD_MONTHS의 역할
ADD_MONTHS는 특정 날짜에 원하는 개월 수를 더하는 함수이다.
현재 날짜에서 3개월 뒤 날짜를 구하거나, 계약 만료일을 계산할 때 사용할 수 있다.
4) EXTRACT
(1) EXTRACT의 역할
EXTRACT는 날짜 데이터에서 원하는 부분만 추출하는 함수이다.
날짜에서 연도, 월, 일만 따로 꺼내고 싶을 때 사용한다.
(2) 입사년도 추출
HIRE_DATE에서 YEAR만 추출하면 사원들의 입사년도만 조회할 수 있다.
날짜 전체가 아니라 특정 날짜 요소만 필요할 때 유용하다.
5) NEXT_DAY
(1) NEXT_DAY의 역할
NEXT_DAY는 기준 날짜 이후에 가장 가까운 특정 요일의 날짜를 반환한다.
오늘 이후 가장 가까운 금요일이나 다음 특정 요일을 찾을 때 사용한다.
6) LAST_DAY
(1) LAST_DAY의 역할
LAST_DAY는 특정 날짜가 속한 달의 마지막 날짜를 반환한다.
월말 날짜나 남은 일수를 계산할 때 사용할 수 있다.
3 형 변환 함수
1) TO_CHAR
(1) TO_CHAR의 역할
TO_CHAR는 날짜나 숫자 데이터를 문자 형태로 변환하는 함수이다.
데이터를 원하는 출력 형식으로 보기 좋게 바꿀 때 사용한다.
(2) 날짜 형식 변환
날짜 데이터를 YYYY/MM/DD 같은 형식의 문자로 바꿀 수 있다.
화면에 날짜를 원하는 모양으로 출력하고 싶을 때 사용한다.
(3) 숫자 형식 변환
급여 같은 숫자 데이터를 쉼표나 통화 기호가 포함된 문자 형태로 바꿀 수 있다.
금액 데이터를 보기 좋게 표현할 때 유용하다.
(4) 0과 9의 차이
0은 남은 자리를 0으로 채워서 표시한다.
9는 남은 자리를 표시하지 않고 비워둔다.
2) TO_DATE
(1) TO_DATE의 역할
TO_DATE는 문자나 숫자 형태의 값을 날짜 데이터로 변환하는 함수이다.
날짜처럼 보이는 값을 실제 날짜 타입으로 다루고 싶을 때 사용한다.
(2) 날짜 형식 지정
TO_DATE를 사용할 때는 입력된 값이 어떤 날짜 형식인지 함께 알려줘야 한다.
예를 들어 20260511은 YYYYMMDD 형식으로 해석할 수 있다.
3) TO_NUMBER
(1) TO_NUMBER의 역할
TO_NUMBER는 문자 형태의 숫자를 실제 숫자 타입으로 변환하는 함수이다.
문자로 저장된 숫자를 계산에 사용하고 싶을 때 필요하다.
(2) 숫자 연산
문자 '100'도 상황에 따라 연산이 가능할 수 있지만, 명확하게 숫자로 다루려면 TO_NUMBER를 사용하는 것이 좋다.
데이터 타입을 분명히 맞춰주면 오류를 줄일 수 있다.
4 조건 처리 함수
1) DECODE
(1) DECODE의 역할
DECODE는 특정 값이 무엇인지 비교한 뒤, 그 결과에 따라 다른 값을 출력하는 함수이다.
Java의 삼항 연산자나 간단한 switch문과 비슷한 역할을 한다.
(2) 성별 출력
주민등록번호의 특정 자리를 확인해서 남, 여로 출력할 수 있다.
저장된 코드 값을 사용자가 이해하기 쉬운 문자로 바꿀 때 유용하다.
(3) 근무여부 출력
ENT_YN 값이 Y이면 퇴사자, N이면 근무자로 출력할 수 있다.
데이터베이스에 저장된 짧은 코드 값을 의미 있는 글자로 바꿔 보여줄 수 있다.
(4) 관리자 여부 출력
MANAGER_ID가 없으면 관리자, 있으면 사원으로 출력할 수 있다.
NULL 여부에 따라 다른 결과를 보여주고 싶을 때 사용할 수 있다.
2) NVL
(1) NVL의 역할
NVL은 값이 NULL일 때 다른 값으로 바꿔주는 함수이다.
NULL 값을 그대로 출력하지 않고 X, 0, 기본 문구 등으로 대체하고 싶을 때 사용한다.
3) NVL2
(1) NVL2의 역할
NVL2는 값이 NULL인지 아닌지에 따라 서로 다른 결과를 출력하는 함수이다.
값이 있으면 O, 없으면 X처럼 표시할 때 사용할 수 있다.
4) CASE
(1) CASE의 역할
CASE문은 조건에 따라 다른 결과를 출력하는 구문이다.
Java의 if문이나 switch문처럼 여러 조건을 나누어 처리할 수 있다.
(2) CASE 사용 이유
DECODE보다 조건을 더 자유롭게 작성할 수 있다.
단순 값 비교뿐만 아니라 IS NULL, 크기 비교, 여러 조건 처리에도 사용할 수 있다.
(3) 급여 인상 계산
직급코드에 따라 급여 인상률을 다르게 적용할 수 있다.
J5는 20%, J6은 15%, J7은 10%, 그 외 직급은 5%처럼 조건별 계산이 가능하다.
5 숫자 함수
1) ABS
(1) ABS의 역할
ABS는 절대값을 구하는 함수이다.
양수와 음수에 상관없이 값의 크기만 보고 싶을 때 사용한다.
2) MOD
(1) MOD의 역할
MOD는 나눗셈을 한 뒤 나머지를 반환하는 함수이다.
홀수와 짝수를 구분하거나 특정 주기마다 데이터를 나눌 때 사용할 수 있다.
(2) 홀수 달 조회
입사월을 기준으로 나머지를 계산하면 홀수 달에 입사한 사원을 찾을 수 있다.
나머지를 이용하면 특정 규칙에 맞는 데이터를 쉽게 분류할 수 있다.
3) CEIL
(1) CEIL의 역할
CEIL은 소수점이 있는 숫자를 올림 처리하는 함수이다.
소수점 아래 값이 조금이라도 있으면 다음 정수로 올린다.
4) FLOOR
(1) FLOOR의 역할
FLOOR는 소수점 이하를 버림 처리하는 함수이다.
소수점 아래 값을 제거하고 정수 부분만 남기고 싶을 때 사용한다.
5) ROUND
(1) ROUND의 역할
ROUND는 지정한 위치에서 숫자를 반올림하는 함수이다.
소수점 자리나 정수 자리 기준으로 값을 반올림할 수 있다.
(2) 자리수 지정
두 번째 값이 0이면 소수점 첫째 자리에서 반올림한다.
양수는 소수점 아래 자리, 음수는 정수 자리에서 반올림한다.
6) TRUNC
(1) TRUNC의 역할
TRUNC는 지정한 위치에서 숫자를 버림 처리하는 함수이다.
반올림하지 않고 원하는 자리 아래 값을 잘라낼 때 사용한다.
(2) 급여 처리
평균 급여를 구한 뒤 100의 자리나 1000의 자리 아래를 버릴 수 있다.
정확한 소수나 자잘한 단위보다 정리된 숫자가 필요할 때 유용하다.
6 날짜 데이터 연산
1) 날짜 더하기와 빼기
(1) 날짜에 숫자 더하기
날짜 데이터에 숫자를 더하면 해당 일수만큼 이후 날짜가 된다.
예를 들어 SYSDATE + 30은 현재 날짜에서 30일 뒤를 의미한다.
(2) 날짜에서 숫자 빼기
날짜 데이터에서 숫자를 빼면 해당 일수만큼 이전 날짜가 된다.
예를 들어 SYSDATE - 10은 현재 날짜에서 10일 전을 의미한다.
2) 날짜끼리 빼기
(1) 날짜 차이 계산
날짜에서 날짜를 빼면 두 날짜 사이의 일수를 구할 수 있다.
특정 날짜로부터 며칠이 지났는지 계산할 때 사용한다.
(2) 월말까지 남은 일수
LAST_DAY와 SYSDATE를 함께 사용하면 이번 달 마지막 날까지 며칠이 남았는지 계산할 수 있다.
3) 날짜 출력 형식
(1) 시간 출력
TO_CHAR를 사용하면 날짜 데이터에서 시간만 따로 출력할 수 있다.
HH24는 24시간 형식, AM HH는 오전과 오후를 구분하는 12시간 형식이다.
(2) YY와 RR
YY와 RR은 2자리 연도를 해석하는 방식이 다르다.
YY는 현재 세기를 기준으로 해석하고, RR은 50을 기준으로 1900년대와 2000년대를 나누어 해석한다.
7 SELECT문 실행 순서
1) 실행 순서의 개념
(1) SQL 작성 순서와 실행 순서
SQL문은 SELECT부터 작성하지만 실제 실행은 FROM부터 시작된다.
실행 순서를 이해하면 WHERE, GROUP BY, HAVING, ORDER BY가 왜 그 위치에 있어야 하는지 이해하기 쉽다.
2) 실행 순서
(1) FROM
가장 먼저 어느 테이블에서 데이터를 가져올지 정한다.
(2) WHERE
테이블에서 조건에 맞는 행만 먼저 걸러낸다.
(3) GROUP BY
걸러진 데이터를 특정 컬럼 기준으로 그룹화한다.
(4) HAVING
그룹화된 결과에 조건을 적용한다.
(5) SELECT
최종적으로 조회할 컬럼, 계산식, 함수식을 선택한다.
(6) ORDER BY
마지막으로 조회 결과를 정렬한다.
8 GROUP BY
1) GROUP BY의 개념
(1) GROUP BY의 역할
GROUP BY는 특정 컬럼을 기준으로 데이터를 그룹으로 묶을 때 사용한다.
부서별 평균 급여, 직급별 총 급여처럼 그룹 단위의 통계를 구할 때 필요하다.
(2) 그룹 함수와 함께 사용
GROUP BY는 COUNT, SUM, AVG, MAX, MIN 같은 그룹 함수와 함께 자주 사용된다.
전체 데이터를 하나로 요약하는 것이 아니라, 부서별 또는 직급별로 나누어 요약할 수 있다.
2) 부서별 평균 급여
(1) 부서별 그룹화
DEPT_CODE를 기준으로 GROUP BY를 사용하면 부서별로 데이터를 묶을 수 있다.
각 부서의 평균 급여를 따로 계산할 때 사용한다.
3) 부서별 통계 조회
(1) 총인원
COUNT를 사용하면 각 부서에 몇 명의 사원이 있는지 확인할 수 있다.
(2) 급여합계
SUM을 사용하면 각 부서의 급여 총합을 구할 수 있다.
(3) 급여평균
AVG를 사용하면 각 부서의 평균 급여를 구할 수 있다.
(4) 최대급여와 최소급여
MAX와 MIN을 사용하면 각 부서에서 가장 높은 급여와 가장 낮은 급여를 확인할 수 있다.
4) 계산식을 이용한 그룹화
(1) 함수식으로 그룹 묶기
GROUP BY에는 컬럼명뿐만 아니라 함수식이나 계산식도 사용할 수 있다.
예를 들어 급여를 백만 단위로 잘라서 급여 구간별 인원 수를 구할 수 있다.
9 HAVING
1) HAVING의 개념
(1) HAVING의 역할
HAVING은 GROUP BY로 묶은 그룹 결과에 조건을 걸 때 사용한다.
WHERE이 개별 행을 필터링한다면, HAVING은 그룹화된 결과를 필터링한다.
2) WHERE과 HAVING의 차이
(1) WHERE
WHERE은 그룹으로 묶기 전에 개별 행을 먼저 걸러낸다.
예를 들어 급여가 300만원 이상인 사원만 먼저 골라낸 뒤 부서별 평균을 구할 수 있다.
(2) HAVING
HAVING은 그룹으로 묶은 뒤 그룹의 결과값에 조건을 건다.
예를 들어 부서별 평균 급여를 구한 뒤, 평균 급여가 300만원 이상인 부서만 조회할 수 있다.
3) 그룹 조건 사용 예
(1) 평균 급여 조건
부서별 평균 급여가 300만원 이상인 부서만 조회할 수 있다.
그룹 함수 결과에 조건을 걸어야 하므로 HAVING을 사용한다.
(2) 급여 합계 조건
부서별 급여 합계가 900만원을 초과하는 부서만 조회할 수 있다.
SUM 결과처럼 그룹 단위 계산 결과를 조건으로 사용할 때 HAVING이 필요하다.
4) 그룹 함수와 서브쿼리
(1) 최고 급여 합계 부서 찾기
부서별 급여 합계를 구한 뒤, 그중 가장 큰 급여 합계를 가진 부서를 찾을 수 있다.
이때 HAVING절 안에서 서브쿼리를 사용하면 최고 합계와 일치하는 부서를 조회할 수 있다.
10 ROLLUP
1) ROLLUP의 개념
(1) ROLLUP의 역할
ROLLUP은 GROUP BY에서 사용하는 함수로, 그룹별 중간 집계와 전체 합계를 함께 보여준다.
일반 GROUP BY보다 더 넓은 집계 결과를 한 번에 확인할 수 있다.
(2) 전체 총합 조회
직급별 급여 합계를 구하면서 마지막에 전체 급여 총합까지 함께 출력할 수 있다.
보고서나 통계 자료를 만들 때 유용하다.
2) 여러 컬럼 ROLLUP
(1) 부서와 직급 기준 집계
ROLLUP에 DEPT_CODE와 JOB_CODE를 함께 사용하면 부서별, 직급별 급여 합계와 중간 합계를 확인할 수 있다.
계층적인 집계 결과를 만들 때 사용한다.
11 SET OPERATOR
1) SET OPERATOR의 개념
(1) SET OPERATOR의 역할
SET OPERATOR는 두 개 이상의 SELECT 결과를 집합처럼 합치거나 비교할 때 사용하는 연산자이다.
여러 SELECT문의 결과를 합집합, 교집합, 차집합 형태로 다룰 수 있다.
(2) 사용 조건
SET OPERATOR를 사용할 때는 SELECT문의 컬럼 개수와 데이터 타입이 맞아야 한다.
서로 다른 결과를 합치려면 구조가 같아야 하기 때문이다.
2) UNION
(1) UNION의 역할
UNION은 두 SELECT 결과를 합쳐서 하나의 결과로 보여준다.
중복되는 행은 한 번만 출력한다.
(2) UNION 사용 예
부서코드가 D5인 사원과 급여가 300만원을 초과하는 사원을 합쳐서 조회할 수 있다.
두 조건 중 하나에 해당하는 데이터를 중복 없이 보고 싶을 때 사용한다.
3) UNION ALL
(1) UNION ALL의 역할
UNION ALL은 두 SELECT 결과를 합쳐서 모두 보여준다.
중복되는 행이 있어도 제거하지 않고 그대로 출력한다.
(2) UNION과의 차이
UNION은 중복을 제거하고, UNION ALL은 중복을 유지한다.
중복 여부까지 그대로 확인해야 할 때는 UNION ALL을 사용한다.
4) INTERSECT
(1) INTERSECT의 역할
INTERSECT는 두 SELECT 결과에 공통으로 존재하는 데이터만 조회한다.
두 조건을 모두 만족하는 데이터를 집합 방식으로 찾을 때 사용한다.
5) MINUS
(1) MINUS의 역할
MINUS는 첫 번째 SELECT 결과에서 두 번째 SELECT 결과와 겹치는 데이터를 제외한다.
특정 조건에는 해당하지만 다른 조건에는 해당하지 않는 데이터를 찾을 때 사용한다.
12 JOIN
1) JOIN의 개념
(1) JOIN의 역할
JOIN은 두 개 이상의 테이블을 연결해서 하나의 결과처럼 조회하는 SQL 구문이다.
한 테이블에 없는 정보를 다른 테이블과 연결해서 함께 보고 싶을 때 사용한다.
(2) JOIN을 사용하는 이유
EMPLOYEE 테이블에는 부서코드나 직급코드가 저장되어 있고, 실제 부서명이나 직급명은 다른 테이블에 저장되어 있을 수 있다.
이때 JOIN을 사용하면 코드와 이름 정보를 함께 조회할 수 있다.
2) 오라클 전용 JOIN 문법
(1) 콤마 JOIN
오라클 전용 문법에서는 FROM절에 여러 테이블을 콤마로 나열한다.
그리고 WHERE절에서 두 테이블을 연결하는 조건을 작성한다.
(2) 연결 조건
EMPLOYEE의 DEPT_CODE와 DEPARTMENT의 DEPT_ID처럼 서로 연결되는 컬럼을 조건으로 사용한다.
이 조건이 없으면 데이터가 잘못 많이 연결될 수 있으므로 JOIN에서는 연결 기준이 중요하다.
3) 표준 JOIN 문법
(1) JOIN ON
표준 문법에서는 FROM 뒤에 JOIN할 테이블을 작성하고, ON에 연결 조건을 작성한다.
어떤 테이블과 어떤 조건으로 연결하는지 구조가 명확하게 보이는 장점이 있다.
(2) JOIN USING
두 테이블에서 연결할 컬럼명이 같을 때는 USING을 사용할 수 있다.
예를 들어 EMPLOYEE와 JOB 테이블 모두 JOB_CODE라는 컬럼을 가지고 있다면 USING(JOB_CODE)로 연결할 수 있다.
4) 테이블 별칭
(1) 테이블 별칭의 역할
테이블 별칭은 테이블 이름을 짧게 줄여서 사용하는 기능이다.
EMPLOYEE를 E, JOB을 J처럼 줄이면 SQL문을 더 간단하게 작성할 수 있다.
(2) 별칭을 사용하는 이유
여러 테이블을 JOIN할 때 같은 이름의 컬럼이 있을 수 있다.
이때 어떤 테이블의 컬럼인지 구분하기 위해 테이블 별칭을 붙여 사용한다.
5) EMPLOYEE와 DEPARTMENT JOIN
(1) 사원과 부서 연결
EMPLOYEE 테이블의 DEPT_CODE와 DEPARTMENT 테이블의 DEPT_ID를 연결하면 사원의 부서명을 함께 조회할 수 있다.
사원 정보와 부서 정보를 하나의 결과로 보고 싶을 때 사용한다.
6) EMPLOYEE와 JOB JOIN
(1) 사원과 직급 연결
EMPLOYEE 테이블의 JOB_CODE와 JOB 테이블의 JOB_CODE를 연결하면 사원의 직급명을 함께 조회할 수 있다.
코드만으로는 의미를 알기 어려운 데이터를 실제 이름과 함께 보여줄 수 있다.
'멀티캠퍼스' 카테고리의 다른 글
| [2026.05.13] - TIL 29일차 SQL 제약조건, 테이블 생성, ALTER, INSERT 정리 (0) | 2026.05.18 |
|---|---|
| [2026.05.12] - TIL 28일차 SQL JOIN, 서브쿼리, 순위 함수, DDL과 제약조건 정리 (0) | 2026.05.18 |
| [2026.05.08] - TIL 26일차 SQL 기본 조회와 조건문 정리 (0) | 2026.05.13 |
| [2026.05.07] - TIL 25일차 데이터베이스, DML (0) | 2026.05.11 |
| [2026.05.06] - TIL 24일차 스레드, 네트워크 (0) | 2026.05.07 |