TIL

230221 [SQL] (집합연산자 / 문자 & 숫자 & 형 변환 함수)

하차모 2023. 2. 21. 17:27

1. 집합연산자

  UNION : 여러 SELECT 쿼리를 결과를 모두 보여 줌. 중복 데이터는 한 번만 조회

  UNION ALL : 중복된 데이터도 모두 조회됨.

  -> 쿼리문의 컬럼 개수와 자료형은 동일해야 한다.

SELECT EMPNO, ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE DEPTNO = 20;

  +) 더미 테이블 (쿼리문 연습을 위해 오라클에서 제공하는 테이블) : DUAL

 

2. 문자 함수

  문자의 길이를 조회하는 함수 : LENGTH, LENGTHB

  문자의 일부를 추출하는 함수 : SUBSTR

  문자열 연결 : CONCAT, ||

  문자열 대체 함수 : REPLACE

  빈 공간을 특정 문자로 채우는 함수 : LPAD, RPAD

  공백을 제거하는 함수 : LTRIM, RTRIM

-- 문자의 길이를 조회하는 함수
SELECT LENGTH('안녕하세요')
    , LENGTHB('안녕하세요')
FROM DUAL;

-- 문자의 일부를 추출하는 함수
SELECT 'HELLO WORLD'
    , SUBSTR('HELLO WORLD', 1, 3)
    , SUBSTR('HELLO WORLD', 2, 4)
    , SUBSTR('HELLO WORLD', 1)
FROM DUAL;

-- 문자열 연결
SELECT CONCAT('HELLO', 'WORLD')
    ,'HELLO'||'WORLD'||'ORACLE'
FROM DUAL;

-- 문자열 대체 함수
SELECT '010-1111-2222'
    ,REPLACE('010-1111-2222' , '-', ' ')
    ,REPLACE('010-1111-2222' , '-', '')
FROM DUAL;

-- 빈 공간을 특정 문자로 채우는 함수
SELECT 'ORACLE'
    , LPAD('ORACLE', 10, '#')
    , RPAD('ORACLE', 10, '!')
FROM DUAL;

-- 공백을 제거하는 함수
SELECT LTRIM('  ORACLE  ')
    , RTRIM('  ORACLE  ')
    , TRIM('  ORACLE  ')
FROM DUAL;

 

3. 숫자 함수

  반올림 함수 : ROUND

  올림, 버림 함수 : CEIL, FLOOR

  나머지를 구하는 함수 : MOD

-- 반올림 함수
SELECT 123.456
    , ROUND(123.456)
    , ROUND(123.456, 1)
    , ROUND(123.456, 2)
FROM DUAL;

-- 올림, 버림 함수
SELECT 123.456
    , CEIL(123.456)
    , FLOOR(123.456)
FROM DUAL;

-- 나머지를 구하는 함수
SELECT MOD(10, 4) FROM DUAL;

 

4. 형 변환 함수

  숫자 <--> 문자 / 문자 <--> 날짜 끼리 변환이 가능하다. (날짜를 비교할 때는 날짜 타입으로 형 변환 후 비교)

-- 2005년 1월 1일 이후로 입사한 사원의 모든 정보 조회
SELECT * FROM EMP
WHERE HIREDATE >= TO_DATE('20050101');

4-1.  숫자 <--> 문자 : TO_CHAR, TO_NUMBER

SELECT 1001
    , TO_CHAR(1001)
    , TO_NUMBER('1001')
FROM DUAL;

4-2. 문자 <--> 날짜 : TO_CHAR, TO_DATE

-- 날짜를 문자로 변환
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')
    , TO_CHAR(SYSDATE, 'YYYY')
    , TO_CHAR(SYSDATE, 'HH24:MI:SS')
    , TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')
    , TO_CHAR(SYSDATE, 'YYYY/MM/DD')
    , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;

-- 문자를 날짜로 변환
SELECT TO_DATE('20230221')
FROM DUAL;