1. 컬럼 별칭(alias)과 조회 예제
컬럼별로 조회 결과에 새로운 이름을 부여하면 외부에서 가독성 높은 필드명으로 데이터를 활용할 수 있습니다.
아래 예제는 사원 테이블(sawon)에서 부서번호가 20초과인 직원의 연봉, 보너스, 월급, 의료보험료를 한 번에 조회하는 쿼리입니다.
SELECT
sabun AS 사번,
saname AS 이름,
sapay AS 연봉,
sapay * 0.1 AS 보너스,
ROUND(sapay/12, 0) AS 월급,
FLOOR(sapay/12 * 0.09) AS 의료보험료
FROM sawon
WHERE deptno > 20;
- sabun AS 사번 : 컬럼명을 ‘사번’으로 재명명
- sapay * 0.1 : 연봉의 10%를 보너스로 계산
- ROUND() / FLOOR() : 반올림·내림 처리 함수
2. 문자열 결합 연산자
Oracle에서 문자열을 합치는 대표적인 방법 두 가지를 살펴봅니다.
- || : 표준 문자열 결합 연산자
- CONCAT(a, b) : 두 개 문자열만 합칠 때 사용
-- || 연산자
SELECT '우리나라' || '대한민국' || '만세'
FROM dual;
-- CONCAT 함수 (2개만 가능)
SELECT CONCAT('우리나라', '대한민국')
FROM dual;
-- 사원 이름에 인사말 결합
SELECT saname || '님, 여름 휴가 잘 다녀오세요!'
FROM sawon;
3. WHERE 절을 활용한 기본 조회
다양한 조건을 조합해 sawon 테이블을 조회하는 예제들입니다.
3-1. 부서번호가 10인 직원 조회
SELECT *
FROM sawon
WHERE deptno = 10;
※ 숫자형 컬럼에 문자 리터럴('10')을 쓰면 버전업 시 오류가 날 수 있으니 주의하세요.
3-2. 여자 직원만 조회
SELECT *
FROM sawon
WHERE sasex = '여자';
3-3. 10번 부서의 여자 직원만 조회
SELECT *
FROM sawon
WHERE deptno = 10
AND sasex = '여자';
3-4. 특정 직급(과장, 대리) 직원 조회
-- OR 연산자 사용
SELECT *
FROM sawon
WHERE sajob = '과장'
OR sajob = '대리';
-- IN 절 사용 (가독성↑)
SELECT *
FROM sawon
WHERE sajob IN ('과장', '대리');
4. 비교 연산자와 범위 조건
비교 연산자(>=, <=, >, <), BETWEEN을 활용한 조회입니다.
4-1. 급여가 3,500 이상 직원 조회
SELECT *
FROM sawon
WHERE sapay >= 3500;
4-2. 급여가 3,500~4,000 사이 직원 조회
-- AND 연산자
SELECT *
FROM sawon
WHERE sapay >= 3500
AND sapay <= 4000;
-- BETWEEN 절
SELECT *
FROM sawon
WHERE sapay BETWEEN 3500 AND 4000;
4-3. 입사일 기준 범위 조회
날짜 비교 시 경계값 포함 여부에 유의해야 합니다.
-- 2000-01-01 이후 입사
SELECT *
FROM sawon
WHERE sahire >= '2000-01-01';
-- 2000~2003년 입사 (직관적이지만 12/31 00:00:01 누락 위험)
SELECT *
FROM sawon
WHERE sahire BETWEEN '2000-01-01' AND '2003-12-31';
-- to_date 함수로 시·분·초까지 명시
SELECT *
FROM sawon
WHERE sahire BETWEEN
TO_DATE('2000-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2003-12-31 23:59:59','YYYY-MM-DD HH24:MI:SS');
-- 더 안전한 패턴: 상한을 다음 해 1월 1일 미만으로
SELECT *
FROM sawon
WHERE sahire >= '2000-01-01'
AND sahire < '2004-01-01';
5. 날짜 함수 활용
날짜를 문자나 숫자로 변환해 원하는 조건을 걸 때 유용합니다.
SELECT
SYSDATE AS 현재_날짜,
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS today,
TO_CHAR(SYSDATE, 'YYYY') AS year,
TO_CHAR(SYSDATE, 'MM') AS month_str,
TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) AS month_num
FROM dual;
- TO_CHAR(날짜, 포맷) : 날짜 → 문자
- TO_NUMBER(문자) : 문자 → 숫자
- TO_DATE(문자, 포맷) : 문자 → 날짜
6. 패턴 매칭 (LIKE)
-- 성씨가 '이' 씨인 사원 조회
SELECT *
FROM sawon
WHERE saname LIKE '이%';
-- 이름 2번째 글자가 '미'인 사원 조회
SELECT *
FROM sawon
WHERE saname LIKE '_미%';
문자열 패턴
- % : 0자 이상 임의의 문자
- _ : 1자 임의의 문자
7. 윈도우 함수로 급여 순위 구하기
전체 사원 중 연봉 순위를 매겨 보겠습니다.
SELECT
s.*,
sapay * 0.1 AS bonus,
RANK() OVER (ORDER BY sapay DESC) AS sapay_rank
FROM (
SELECT *
FROM sawon
) s
ORDER BY s.sabun;
- RANK() OVER (ORDER BY sapay DESC)
동점자에게 같은 순위를 부여하고, 그 다음 순위를 건너뜁니다.
'Oracle' 카테고리의 다른 글
Oracle DECODE, CASE, NVL/NVL2, VIEW 함수 정리 및 예제 (4) | 2025.08.08 |
---|---|
Oracle SQL 함수 정리 (3) | 2025.08.08 |
Oracle 테이블 제약조건 정리 (7) | 2025.08.07 |
Oracle 데이터 타입 정리 (0) | 2025.08.06 |
Oracle SQL 기초: system 계정과 test 계정 작업 정리 (3) | 2025.08.06 |