본문 바로가기

Oracle

Oracle SQL 조회 및 문자열 연산 정리


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)
    동점자에게 같은 순위를 부여하고, 그 다음 순위를 건너뜁니다.