Database/Oracle

    [Oracle] 함수(FUNCTION)_날짜 처리 함수

    * SYSDATE 시스템 날짜 및 시간 반환 (현재 날짜 및 시간) SELECT SYSDATE FROM DUAL; * MONTHS_BETWEEN(DATE1, DATE2) 두 날짜 사이의 개월 수 => 내부적으로 DATE1 - DATE2 후 나누기 30, 31 이 진행될꺼임 => 결과값은 NUMBER 타입 SELECT EMP_NAME, HIRE_DATE, FLOOR(SYSDATE - HIRE_DATE) || '일' AS "근무일수", CEIL(MONTHS_BETWEEN (SYSDATE, HIRE_DATE)) || '개월' AS "근무개월수" FROM EMPLOYEE; * ADD_MONTHS(DATE, NUMBER) 특정날짜에 해당 숫자만큼의 개월 수를 더해서 날짜를 리턴 => 결과값 : DATE 타입 SE..

    [Oracle] 함수(FUNCTION)_숫자 처리 함수

    * ABS 숫자의 절대값을 구해주는 함수 ABS(NUMBER) => 결과값은 NUMBER 타입 SELECT ABS(-10) FROM DUAL; SELECT ABS(-5.7) FROM DUAL; * MOD 두 수를 나눈 나머지값을 반환해주는 함수 MOD(NUMBER, NUMBER) => 결과값 NUMBER 타입 SELECT MOD(10, 3) FROM DUAL; SELECT MOD(10.9, 3) FROM DUAL; * ROUND 반올림한 결과를 반환 ROUND(NUMBER, [위치]) => 결과값은 NUMBER 타입 SELECT ROUND(123.456) FROM DUAL; -- 위치 생략시 0 SELECT ROUND(123.456, 1) FROM DUAL; SELECT ROUND(123.456, 5) ..

    [Oracle] 함수(FUNCTION)_문자 처리 함수

    * LENGTH / LENGTHB => 결과값 NUMBER 타입 LENGTH(컬럼 | '문자열 값') : 해당 문자열 값의 글자수 반환 LENGTHB(컬럼 | '문자열 값') : 해당 문자열 값의 바이트 수 반환 '김', ' 나', 'ㄱ' 한 글자당 3BYTE 영문자, 숫자, 특문 한글자당 1BYTE SELECT SYSDATE FROM DUAL; -- 가상테이블! 테이블 쓸 거 없을때 쓰는 것! 해당 문자열 값의 글자수 반환, 해당 문자열 값의 바이트 수 반환 SELECT LENGTH ('오라클'), LENGTHB ('오라클') FROM DUAL; SELECT LENGTH('ORACLE'), LENGTHB('ORACLE') FROM DUAL; SELECT EMP_NAME, LENG..

    [Oracle] 함수(FUNCTION)

    전달된 컬럼 값을 읽어들여서 함수를 실행한 결과를 반환함 - 단일행 함수 : N개의 값을 읽어들여서 N개의 결과값을 리턴(매 행 마다 함수 실행 결과 반환) - 그룹 함수 : N개의 값을 읽어들여서 1개의 결과값을 리턴 (그룹을 지어 그룹별로 함수 실행 결과 반환) >> SELECT 절에 단일행함수, 그룹함수를 함께 사용 못함 왜? 결과 행의 개수가 다르기 때문 >> 함수식을 기술 할 수 있는 위치 : SELECT절, WHERE절, ORDER BY절, GROUP절, HAVING절 LENGTH / LENGTHB, INSTR, SUBSTR, LPAD / RPAD, LTRIM / RTRIM, TRIM, LOWER / UPPER / INITCAP 2023.06...

    [Oracle] ORDER BY 절

    가장 마지막 줄에 작성! 뿐만 아니라 실행순서 또한 마지막에 실행 [표현법] SELECT 조회할 컬럼, 컬럼, 산술연산식 AS "별칭", ... FROM 조회하고자 하는 테이블명 WHERE 조건식 ORDER BY 정렬하고 싶은 컬럼 |별칭| 컬럼순번 [ASC | DESC] [NULL FIRST | NULLS LAST] - ASC : 오름차순 정렬 (생략시 기본값 ) - DESC : 내림차순 정렬 - NULLS FIRST : 정렬하고자 하는 컬럼값에 NULL이 있을 경우 해당 데이터를 맨 앞 배치 (생략시 DESC일 때의 기본값) - NULLS LAST : 정렬하고자 하는 컬럽값에 NULL이 있을 경우 해당 데이터를 맨 뒤 배치 (생략시 ASC일때의 기본값) SELECT * FRO..

    [Oracle] 연산자 우선 순위

    0. ( ) 1. 산술연산자 2. 연결연산자 3. 비교연산자 4. IS NULL / LIKE '특정패턴' / IN 5. BETWEEN A AND B 6. NOT (논리연산자) 7. AND (논리연산자) 8. OR (논리연산자) --> 얘네가 중요함 직급코드가 J7이거나 J2인 사원들 중 급여가 200만원 이상인 사원들의 모든 컬럼 조회 SELECT * FROM EMPLOYEE WHERE JOB_CODE = 'J7' OR JOB_CODE = 'J2' AND SALARY >= 2000000; -- AND가 우선순위가 OR 보다 높기 때문에 이상하게 나옴 연산자 우선 순위를 고려하여 작성해보자 SELECT * FROM EMPLOYEE --WHERE JOB_CODE = 'J7' OR JOB_CODE = 'J2'..

    [Oracle] IN

    비교대상컬럼값이 내가 제시한 목록중에 일치하는 값이 있는지 [표현법] 비교대상컬럼 IN ('값1', '값2', '값3', .....); 부서코드 D6이거나 D5인 부서원들의 이름, 부서코드, 급여 조회 SELECT EMP_NAME, DEPT_CODE, SALARY FROM EMPLOYEE --WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D8' OR DEPT_CODE = 'D5'; WHERE DEPT_CODE IN ('D6', 'D8', 'D5'); 그 외의 사원들 SELECT EMP_NAME, DEPT_CODE, SALARY FROM EMPLOYEE WHERE DEPT_CODE NOT IN ('D6', 'D8', 'D5');

    [Oracle] IS NULL / IS NOT NULL

    컬럼값에 NULL 이 있을 경우 NULL값 비교에 사용되는 연산자 보너스를 받지 않는 사원 (BONUS 값이 NULL) 들의 사번, 이금, 급여, 보너스 조회 SELECT EMP_ID, EMP_NAME, SALARY, BONUS FROM EMPLOYEE --WHERE BONUS = NULL; 정상적으로 조회 안됨 WHERE BONUS IS NULL; 보너스를 받는 사원 (BONUS 값이 NULL이 아닌) 들의 사번, 이름, 급여, 보너스 조회 SELECT EMP_ID, EMP_NAME, SALARY, BONUS FROM EMPLOYEE --WHERE BONUS != NULL; 안됨 WHERE BONUS IS NOT NULL; -- 관례적으로 많이씀 --WHERE NOT BONUS IS NULL; -- 되..