오라클 시험대비 DML정리(FUNCTION)

안효빈·2022년 11월 15일
0

개인 공부

목록 보기
31/36

함수(FUNCTION)

    <함수 FUNCTION>
    전달된 컬럼값을 읽어들여 함수를 실행한 결과를 반환
    
    - 단일 행 함수 : N개의 값을 읽어들여서 N개의 결과가 나온다(매 행마다 실행)
    - 그룹 함수 : N개의 값을 읽어들여서 1개의 결과가 나온다(그룹별로 실행)
    
    >> SELECT문에 단일행과 그룹을 동시에 실행불가능
    >> 함수식을 기술할 수 있는 위치 : SELECT절, WHERE절, ORDER BY절, HAVING절
  • 단일 행 함수와 그룹 함수로 나뉘고 그룹함수가 시험에 나올 가능성 높음(좀 까다로움)

단일 행 함수



LEGNTH/LENGTHB

    * LENGTH / LENGTHB -> 반환값 NUMBER
    LENGTH(컬럼|'문자열') : 해당 문자열의 글자 수를 반환해줌
    LENGTHB(컬럼|'문자열') : 해당 문자열의 BYTE수를 반환해줌
        - 한글 : XE버전일때 -> 1글자당 3BYTE(ㄱ, ㅏ, 강) 전부 각각 3바이트
                EE버전일때(엔터프라이즈, 실무에서 많이씀) -> 얘는 1글자당 2바이트
        - 그외 : 1글자당 1BYTE
  • 바이트 수 한번 봐야함

INDEX찾기(INSTR)

    * INSTR : 문자열에서 특정 문자가 있는 시작위치(INDEX)를 찾아서 반환(반환값은 NUMBER)
    ****오라클의 인덱스는 0번부터가 아니라 1번부터임
    
    INSTR(컬럼|'문자열', '찾고자하는 문자', [찾을 위치의 시작값, [순번]]) ===> 대괄호는 생략 가능
    - 찾을위치 시작값
    
    1: 앞에서부터 찾기 (기본값)
    -1 : 뒤에서부터 찾기

SUBSTR

    * SUBSTR : 문자열에서 특정 문자열을 추출하여 반환
    
    [표현법]
    SUBSTR('문자열', POSITION, [LENGTH])
     - POSITION : 문자열을 추출할 시작위치 INDEX값
     - LENGTH : 추출할 문자의 갯수(생략하면 맨 마지막까지 싹 추출)
  • POSITION에 음수를 입력할 경우 문자열의 맨 끝에서부터 거꾸로 올라오면서 셈

LPAD/LTRIM


    * LPAD / RPAD : 문자열을 조회할 때 통일감있게 조회하고자 할 때
    LPAD|RPAD('문자열', 최종적으로 반환할 문자의 길이,[덧붙이고자 하는 문자])


    * LTRIM / RTRIM : 문자열에서 특정 문자를 제거하고 나머지 반환
    * TRIM : 문자열에서 앞/뒤 양쪽에 있는 특정 문자를 제거
    
    LTRIM|RTRIM('문자열', [제거하고자하는문자(생략시공백)])

UPPER

    * LOWER / UPPER / INITCAP : 문자열을 모두 대문자 혹은 소문자로, 단어의 첫글자만
    LOWER|UPPER|INITCAP('문자열')
  • 자바의 TOUPPERCASE와 비슷

CONCAT

    * CONCAT : 두 문자열을 하나로 합쳐서 반환
    CONCAT('문자열1', '문자열2') 두개만합치기 가능

REPLACE

    * REPLACE : 문자열을 새로운 문자로 바꿀 떄 사용
    REPLACE('문자열', '기존문자열', '바꿀문자열')

얘네 다 안나올거같음, 그나마 쓰이면 SUBSTR


숫자처리함수

절대값 구하기

    * ABS : 숫자의 절대값을 구해주는 함수.
    ABS(NUMBER)    

나머지 구하기

    * MOD : 두 수를 나눈 나머지 반환
    MOD(ANUMBER, BNUMBER) -> ANUMBER를 BNUMBER로 나눈 값

반올림, 올림, 내림

    * ROUND : 반올림
    ROUND(NUMBER, [소수점몇자리:안쓰면그냥정수로나옴]) 

소수점몇자리까지 반올림하는법만 좀 눈으로 봐두기


    * CEIL : 올림
    CEIL(NUMBER) ==> 얘는 소수점몇자리지정불가능무조건정수로
	
    * FLOOR : 내림 ==> 얘도 소수점몇자리지정불가능무조건정수로
    
    
    

얘는 무조건 정수만


    * TRUNC : 위치 지정이 가능한 버림
    TRUNC(NUMBER, 숫자)

얘는 버림이지만 위치지정이 가능

제곱

    * POWER : 제곱
    POWER(숫자, 제곱)

날짜처리함수

현재 날짜/시간정보를 뱉어주는 함수

    * SYSDATE : 시스템 날짜 및 시간 반환

두 날짜 사이를 계산(얘네솔직히안나옴)


    * MONTHS_BETWEEN(DATE1, DATE2)
    : 두 날짜 사이의 개월 수를 반환



    * ADD_MONTHS(DATE, NUMBER) : 특정 날짜에 NUMBER만큼 더한 날짜 반환



    * NEXT_DAY : 특정 날짜 이후에 가까운 해당 요일인 날짜를 반환
    NEXT_DAY(DATE, 요일(문자|숫자)) 
    숫자 : 1(일요일), 2(월요일), ..... , 6(토요일)
    문자 : '토요일', '일요일'


    * LAST_DAY : 해당 월의 마지막 날짜 반환


    * EXTRACT : 특정 날짜로부터 년|월|일을 추출해서 반환(NUMBER로 반환)
    EXTRACT(YEAR FROM '날짜') : 년도 추출




형변환 함수

TO_CHAR


    * TO_CHAR : 숫자, 날짜 타입을 문자타입으로 바꿔주는거
                반환결과를 특정 형식에 맞게 출력도 가능
                
    [표현법]
    TO_CHAR(숫자|날짜, [포맷])

------------------------------------------ 숫자타입 -> 문자타입

    포맷
    - 9 : 해당자리의 숫자를 의미한다. 해당자리에 값이 없을때 소수점 이상은 공백, 소수점 이하는 0으로 표시
    
    - 0 : 해당자리의 숫자를 의미한다. 해당자리에 값이 없을때 그냥 0으로 표시
    
    - L : 현재 설정된 나라의 화폐단위(LOCAL)
    
    - FM : 9로 치환했을 경우 소수점 이상은 공백제거 소수점 이하는 0을 제거함

숫자를 문자형식으로 바꾸면서 이런 표현이 가능

SELECT TO_CHAR(1234, 'L999999.99') 문자 FROM DUAL;

결과

SELECT '월급루팡 '||EMP_NAME, '가 받는 돈' || TO_CHAR(SALARY, 'L999,999,999') FROM EMPLOYEE;

근데 이것도 시험에 안나올거같음

밑에 날짜를 문자형식으로 출력하는 방법 10가지 넘게 적혀있는데 시험에 절대 안나옴


NULL처리 함수(그나마 나올만한거)


    NVL(컬럼, 컬럼값이 NULL일 때 반환할 값)


NULL값으로 들어가있는것들을 처리해줌

    NVL2(컬럼, 컬럼값이 있을 때 반환값, 컬럼값이 NULL일 때 반환값)
    
    
    NULLIF(비교대상1, 비교대상2)
    - 두개의 값이 일치하면 NULL을, 일치하지 않으면 비교대상1 을 반환

SELECT NULLIF('123', '123') FROM DUAL;

실행


오라클의 SWITCH, IF-ELSE

    DECODE(비교하고자 하는 대상(컬럼|산술연산|함수식), 비교값1, 결과값1, 비교값2, 결과값2, ...) 
    SWITCH(비교대상){
    CASE 비교값1 : 결과값1;
    ....
    DEFAULT : 
    }

자바의 스위치문과 비슷

SUBSTRING으로 주민등록번호 뒤 첫자리를 구해서 남녀를 구별


    CASE WHEN THEN
    END
    
    CASE WHEN 조건식1 THEN 결과값1
         WHEN 조건식2 THEN 결과값2
         ...
         ELSE 결과값N

자바의 IF-ELSE문과 비슷


단일행 함수 끝

profile
다들 화이팅

0개의 댓글