2024. 10. 20. 15:33ㆍoracle
함수 < FUNCTION >
자바로 따지면 메소드로 전달된 값들을 가지고 계산된 결과를 반환함
- 단일행 함수: N개의 값을 읽어서 N개의 결과를 리턴 (매 행마다 함수 실행 후 결과 반환)
- 그룹 함수: N개의 값을 읽어서 1개의 결과를 리턴 (하나의 그룹별로 함수 실행 후 결과를 반환)
→ 단일행 함수와 그룹함수는 함께 사용할 수 없음 :결과 행의 개수가 다르기 때문
---------------------------------------------------------------------------------------------------------------------------------------------------
[단일행함수]
< 문자열과 관련된 함수 >
- LENGTH(STR): 전달된 문자열의 글자 수 반환
- LENGTHB(STR) : 전달된 문자열의 바이트 수 반환
STR: '문자열' / 문자열이 들어있는 컬럼
→ 결과는 NUMBER 타입으로 반환
- 한글: 'ㄱ', 'ㅏ', '강' → 한 글자당 3Byte
- 숫자, 영어, 특수문자 → 한글자당 1Byte
SELECT
LENGTH('오라클!'), → 4
LENGTHB('오라클!') → 10
FROM
DUAL; -- 가상테이블(DUMMY TABLE)
---------------------------------------------------------------------------------------------------------------------------------------------------
[ INSTR ]
: INSTR(STR): 문자열로부터 특정 문자의 위치값 반환
[ 표현법 ]
INSTR(STR, '특정 문자', 찾을 위치의 시작값, 순번)
→ 결과값은 NUMBER타입으로 반환
→ 찾을 위치의 시작값과 순번은 생략
[ 찾을 위치의 시작값 ]
- 1 : 앞에서부터 찾겠다. (기본값)
- -1 : 뒤에서부터 찾겠다.
SELECT INSTR('AABAACAABBAA', 'B')
FROM DUAL; -- 찾을 위치, 순번 생략 시 기본적으로 앞에서부터 첫 번째 글자의 위치 검색 (3)
SELECT INSTR('AABAACAABBAA', 'B', -1)
FROM DUAL; -- 해당 문자열의 뒤에서부터 첫번째 'B'가 앞에서부터 몇 번째에 존재하는지 반환 (10)
SELECT INSTR('AABAACAABBAA', 'B', 1, 3)
FROM DUAL; -- 해당 문자열의 앞에서부터 세번째 'B'가 앞에서부터 몇 번째에 존재하는지 반환 (10)
-- EMAIL컬럼의 값 들 중 @의 위치 찾기!
SELECT
INSTR(EMAIL, '@') "@의 위치"
FROM
EMPLOYEE;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ SUBSTR ]
[표현법] 문자 숫자 숫자
- SUBSTR(STR, POSITION, LENGTH): 문자열로부터 특정 문자열을 추출해서 반환
- STR: '문자열' 또는 문자타입 컬럼 값
- POSITION: 문자열 추출 시작위치값(음수도 제시가능) -> POSITION번째 문자부터 추출
- LENGTH: 추출할 문자 개수 (생략 시 끝까지라는 의미)
SELECT
SUBSTR('KH정보교육원', 3) -- 정보교육원
FROM
DUAL;
SELECT
SUBSTR('KH정보교육원', 3, 2) -- 정보
FROM
DUAL;
SELECT
SUBSTR('KH정보교육원', -3, 2) -- 교육
FROM
DUAL; -- 시작 위치가 음수일 경우 뒤에서부터 N번째 위치로부터 문자를 추출하겠다라는 의미
-- EMPLOYEE테이블로부터 사원명과 이메일 컬럼과 EMAIL컬럼의 아이디 값만 조회
SELECT
EMP_NAME,
EMAIL,
SUBSTR(EMAIL, 1, INSTR(EMAIL, '@') -1) AS "ID"
FROM
EMPLOYEE;
-- 사원 성별 조회
SELECT EMP_NAME, SUBSTR(EMP_NO, 8, 1) FROM EMPLOYEE;
-- 여성사원들만 조회
SELECT
EMP_NAME
FROM
EMPLOYEE
WHERE
-- SUBSTR(EMP_NO, 8, 1) = '2' OR SUBSTR(EMP_NO, 8, 1) = '4';
SUBSTR(EMP_NO, 8, 1) IN ('2', '4');
---------------------------------------------------------------------------------------------------------------------------------------------------
[ LAPD / RPAD ]
: 제시한 문자열에 임의의 문자를 왼쪽 또는 오른쪽에 덧붙여서 최종 N길이 만큼의 문자열을 반환
[표현법]
LPAD / RPAD(STR, 최종적으로 반환할 문자의 길이(바이트), 패딩할 문자)
→ 결과값은 CHARACTER타입으로 반환
→ 덧붙이고자 하는 문자는 생략 가능
SELECT
LPAD(EMAIL, 25)
FROM
EMPLOYEE; -- 덧붙이고자 하는 문자 생략 시 기본값은 공백

SELECT
RPAD(EMAIL, 24, '#')
FROM
EMPLOYEE;

-- 주민번호 총 14자리, 마스킹처리 하는법
SELECT RPAD('777010-1', 14, '*')
FROM DUAL;
-- 모든 직원의 사원명과 주민등록번호 뒤 6자리를 마스킹처리해서 조회하기
SELECT
EMP_NAME,
RPAD(SUBSTR(EMP_NO, 1, 8), 14, '*') "주민번호"
FROM
EMPLOYEE;

---------------------------------------------------------------------------------------------------------------------------------------------------
[ LTRIM / RTRIM ]
- LTRIM / RTRIM(STR, 제거하고자 하는 문자)
: 문자열의 왼쪽 또는 오른쪽에서 제거하고자 하는 문자들을 찾아서 제거한 나머지 문자열을 반환
→ 결과값은 CHARACTER 타입으로 반환
→ 제거하고자하는 두번째 인자값은 생략 가능
SELECT
LTRIM(' K H')
FROM
DUAL;
SELECT
RTRIM('123123KH123', '123')
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ TRIM ]
: 문자열의 양쪽 / 앞 / 뒤 있는 특정 문자를 제거한 나머지 문자열을 반환
[ 표현법 ]
TRIM(BOTH / LEADING / TRAILING '제거시키고자 하는 문자' FROM STR)
→ 결과값은 CHARACTER타입으로 반환
→ BOTH / LEADING / TRAILING은 생략 가능 참고로 생략 시 기본값은 BOTH
SELECT TRIM(LEADING 'Z' FROM 'ZZZKHZZZ')
FROM DUAL; -- LEADING: 앞쪽
SELECT TRIM(TRAILING 'Z' FROM 'ZZZKEZZZ')
FROM DUAL; -- TRAILING: 뒤쪽
---------------------------------------------------------------------------------------------------------------------------------------------------
[ LOWER / UPPER / INITCAP ]
[ 표현법 ]
- LOWER (STR) : 다 소문자로 변경
- UPPER(STR) : 다 대문자로 변경
- INITCAP(STR) : 각 단어마다 앞글자만 대문자로 변경
→ 결과값은 모두 CHARACTER타입으로 반환
SELECT
LOWER('HELLO WORLD')
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ CONCAT ]
: 전달된 두개의 인자를 하나로 합친 결과를 반환
[표현법]
CONCAT(STR1, STR2)
→ 결과값은 CHARACTER타입으로 반환
SELECT CONCAT('안녕하세요', '반가워요')
FROM DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ REPLACE ]
: STR로부터 찾을 문자를 찾아서 바꿀 문자로 바꾼 문자열을 반환
[표현법]
REPLACE(STR, 찾을문자, 바꿀문자)
→ 결과값은 CHARACTER타입으로 반환
SELECT
REPLACE('오늘의 메뉴는 삼계탕 입니다.', '삼계탕', '돼지국밥')
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ 숫자와 관련된 함수 ]
[ ABS(NUMBER) ] : 절대값을 구해주는 함수
SELECT
ABS(-10)
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ MOD ]
: MOD(NUMBER1, NUMVER2): 두 수를 나눈 나머지값을 반환
SELECT
MOD(10, 3)
FROM
DUAL;
SELECT
MOD(-10, 3)
FROM
DUAL;
SELECT
MOD(10.8, 3)
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ ROUND ]
ROUND(NUMBER, 위치): 반올림 처리해주는 함수
위치: 소수점 아래 N번째 위치를 지정할 수 있음
위치는 생략 가능, 생략 시 기본값은 0
SELECT
ROUND(123.456)
FROM
DUAL;
SELECT
ROUND(123.456, 1)
FROM
DUAL;
SELECT
ROUND(123.456, 2)
FROM
DUAL;
SELECT
ROUND(123.456, -1)
FROM
DUAL;
SELECT
ROUND(123.456, -2)
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ CEIL ]
CEIL(NUMBER) 소수점 아래의 수를 무조건 올림 처리해주는 함수
SELECT
CEIL(123.456)
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ FLOOR ]
FLOOR(NUMBER) 소수점 아래의 수를 무조건 버림처리해주는 함수
SELECT
FLOOR(123.456)
FROM
DUAL;
-- 각 직원별로 고용일로부터 오늘까지의 근무 일수 조회 + 사원명
SELECT
EMP_NAME,
CONCAT(FLOOR(SYSDATE - HIRE_DATE), '일') "근무일자"
FROM
EMPLOYEE;
--10년 이상 근무한 사람 조회
SELECT
EMP_NAME,
CONCAT(FLOOR(SYSDATE - HIRE_DATE), '일') "근무일자"
FROM
EMPLOYEE
WHERE
FLOOR(SYSDATE - HIRE_DATE) > 365 * 10;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ TRUNC ]
- TRUNC(NUMBER, 위치): 위치 지정가능한 절삭 처리 함수
위치는 생략 가능, 단 생략 시 기본값은 0
SELECT
TRUNC(123.456, 2)
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
< 날짜 관련 함수 >
DATE타입: 년, 월, 일, 시, 분, 초를 모두 포함한 자료형
--SYSDATE: 현재 시스템 날짜 반환
SELECT
SYSDATE
FROM
DUAL;
-- MONTHS_BETWEEN(DATE1, DATE2): 두 날짜사이의 개월 수 반환(NUMBER타입으로 반환, DATE2가 더 미래일경우 음수가 나올 수 있음)
-- EMPLOYEE테이블로부터 각 사원의 사원명, 고용일로부터 근무일수와 근무개월수조회
SELECT
EMP_NAME,
FLOOR(SYSDATE - HIRE_DATE) || '일' AS "근무일수",
FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) || '개월' AS "개월수"
FROM
EMPLOYEE;
-- ADD_MONTHS(DATE,NUMBER): 특정 날짜에 해당 숫자만큼 개월 수를 더한 날짜를 반환(DATE타입으로 반환)
-- 오늘 날짜로부터 5개월 후
SELECT
ADD_MONTHS(SYSDATE, 5)
FROM
DUAL;
-- 직원명, 입사일, 입사일로부터 3개월이 흘렀을 때 날짜 조회
SELECT
EMP_NAME,
HIRE_DATE,
ADD_MONTHS(HIRE_DATE, 3)
FROM
EMPLOYEE;
-- NEXT_DAY(DATE, 요일): 특정 날짜에서 가장 가까운 요일을 찾아 그 날짜를 반환
SELECT
NEXT_DAY(SYSDATE, '금요일')
FROM
DUAL;
SELECT
NEXT_DAY(SYSDATE, '금')
FROM
DUAL;
SELECT
NEXT_DAY(SYSDATE, 6)
FROM
DUAL;
-- 1: 일요일, 2: 월요일, 3:화요일 ... 7: 토요일
/*
SELECT
NEXT_DAY(SYSDATE, 'FRIDAY') ->불가 (한글이라서)
FROM
DUAL;
*/
-- 언어변경
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;
ALTER SESSION SET NLS_LANGUAGE = KOREAN;
-- LAST_DAY(DATE): 날짜를 전달받아서 해당 날짜가 있는 달의 마지막 날짜를 구해서 반환(DATE타입)
SELECT
LAST_DAY(SYSDATE)
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ EXTRACT ]
년도 또는 월 또는 일 정보를 추출해서 반환 (NUMBER타입)
- EXTRACT(YEAR FROM DATE): 특정 날짜로부터 년도만 추출
- EXTRACT(MONTH FROM DATE): 특정 날짜로부터 월만 추출
- EXTRACT(DAY FROM DATE): 특정 날짜로부터 일만 추출
-- EMPLOYEE에서 사원명, 입사년도, 입사월, 입사일 조회
SELECT
EMP_NAME,
EXTRACT(YEAR FROM HIRE_DATE) AS "입사년도",
EXTRACT(MONTH FROM HIRE_DATE) AS "입사월",
EXTRACT(DAY FROM HIRE_DATE) AS "입사일"
FROM
EMPLOYEE
ORDER
BY
"입사년도", "입사월", "입사일";
---------------------------------------------------------------------------------------------------------------------------------------------------
[ 형변환 함수 ]
NUMBER / DATE → CHARACTER
TO_CHAR(NUMBER/DATE, 포맷): 숫자형 또는 날짜형 데이터를 문자형 데이터타입으로 반환
SELECT
TO_CHAR(1234, '000000')
FROM
DUAL; -- 1234 -> '001234': 자리수보다 큰 공간을 0으로 채움
SELECT
TO_CHAR(1234, '99999')
FROM
DUAL; -- 1234 -> ' 1234': 자리수보다 큰 공간을 공백문자로 채움
SELECT
TO_CHAR(1234, 'L0000')
FROM
DUAL; -- 1234: '₩1234' 현재 설정된 나라(LOCAL)의 화폐 단위
SELECT
TO_CHAR(1234, '$99999')
FROM
DUAL; -- 1234: '&1234' 본인이 설정한 화폐 단위
SELECT
TO_CHAR(1234124124, 'l999,999,999,999')
FROM
DUAL;
SELECT
EMP_NAME,
TO_CHAR(SALARY, '999,999,999') || '원'
FROM
EMPLOYEE;
---------------------------------------------------------------------------------------------------------------------------------------------------
-- DATE(년월일시분초) -> CHAR
SELECT
SYSDATE
FROM
DUAL;
SELECT
TO_CHAR(SYSDATE)
FROM
DUAL;
SELECT
TO_CHAR(SYSDATE, 'YYYY-MM-DD')
FROM
DUAL;
SELECT
TO_CHAR(SYSDATE, 'PM HH:MI:SS')
FROM
DUAL; -- 오후 04:26:53 : PM 오전/오후 출력하는거임
SELECT
TO_CHAR(SYSDATE, 'HH24:MI:SS')
FROM
DUAL; -- 16:28:01 -> HH24는 24시간 형식
SELECT
TO_CHAR(SYSDATE, 'MON DY, YYYY')
FROM
DUAL; -- 10월 DY:화, 2024
---------------------------------------------------------------------------------------------------------------------------------------------------
-- 년도로 쓸 수 있는 포맷
SELECT
TO_CHAR(SYSDATE, 'YYYY'),
TO_CHAR(SYSDATE, 'RRRR'),
TO_CHAR(SYSDATE, 'YY'),
TO_CHAR(SYSDATE, 'RR'),
TO_CHAR(SYSDATE, 'YEAR')
FROM
DUAL; -- YEAR는 영어로 년도 수 출력
-- 월로 쓸 수 있는 포맷
SELECT
TO_CHAR(SYSDATE, 'MM'),
TO_CHAR(SYSDATE, 'MON'),
TO_CHAR(SYSDATE, 'MONTH'),
TO_CHAR(SYSDATE, 'RM')
FROM
DUAL; -- RM은 로마 숫자 표현 10 -> X
-- 일로 쓸 수 있는 포맷
SELECT
TO_CHAR(SYSDATE, 'DD'),
TO_CHAR(SYSDATE, 'D'), -- 일요일기준으로 몇일째인가 3 (화)
TO_CHAR(SYSDATE, 'DDD')
FROM
DUAL;
-- DD는 한달 기준으로 며칠째 (1일부터)
-- D는 일주일 기준으로 며칠때 (일요일시작)
-- DDD는 일년 기준으로 며칠째 (1월 1일부터)
-- 요일에 사용할 수 있는 포맷
SELECT
TO_CHAR(SYSDATE, 'DAY'),
TO_CHAR(SYSDATE, 'DY')
FROM
DUAL; -- DAY는 화요일 / DY는 화 '요일'뺀거
-- EMPLOYEE 테이블에서 사원명, 입사일
SELECT
EMP_NAME,
TO_CHAR(HIRE_DATE, 'YYYY"년" MM"월" DD"일" (DY)')
FROM
EMPLOYEE; -- 한글 데이터의 경우 쌍따옴표로 묶어주어야만 사용이 가능
---------------------------------------------------------------------------------------------------------------------------------------------------
NUMBER / CHARACTER -> DATE
TO_DATE(NUMBER / CHARACTER, 포맷): 숫자형 또는 문자형 데이터를 전달하면 날짜형으로 변환 (DATE타입반환)
SELECT
TO_DATE(20241015)
FROM
DUAL; -- 기본 포맷인 YY/MM/DD로 변환이 된다.
SELECT
TO_DATE('20241015')
FROM
DUAL; -- 기본 포맷인 YY/MM/DD로 변환이 된다.
SELECT
TO_DATE(000112)
FROM
DUAL;
SELECT
TO_DATE('000112')
FROM
DUAL; -- 반드시 '000112' 처럼 작은 따옴표로 묶어주어야함!
SELECT
TO_DATE('240607')
FROM
DUAL;
SELECT
TO_DATE('980607', 'RRMMDD')
FROM
DUAL;
-- 두자리년도에 대해서 RR포맷을 적용할 경우 -> 50이상이면 이전세기, 50미만이면 현재 세기
---------------------------------------------------------------------------------------------------------------------------------------------------
CHARACTER -> NUMBER
TO_NUMBER(CHARACTER, 포맷): 문자형 데이터를 숫자형으로 변환(NUMBER타입으로 반환)
SELECT
TO_NUMBER('01234')
FROM
DUAL;
SELECT
'123' + '234'
FROM
DUAL; -- 자동으로 NUMBER타입으로 변환해서 산술연산까지 진행
SELECT
'44,000' + '52,000'
FROM
DUAL; -- 문자(,)가 포함되어있기 때문에 자동형변환이 불가능
SELECT
TO_NUMBER('44,000', '99,999') + TO_NUMBER('52,000', '99,999')
FROM
DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------------
[ NULL 처리 함수 ]
NYL(컬럼명, 해당 컬럼값이 NULL일 경우 반환할 결과값)
해당 컬럼에 값이 존재할 경우 컬럼값 그대로 반환, 해당 컬럼의 값이 NULL일 경우 두번째 인자로 전달한 값이 결과값으로 반환됨
-- EMPLOYEE 테이블로부터 사원명, 보너스
SELECT
EMP_NAME,
BONUS,
NVL(BONUS, 0)
FROM
EMPLOYEE;
-- 보너스 포함 연봉 조회
SELECT
EMP_NAME,
(SALARY + SALARY * NVL(BONUS, 0)) * 12
FROM
EMPLOYEE;
-- 사원명, 부서코드 조회
SELECT
EMP_NAME,
NVL(DEPT_CODE, '부서 없음')
FROM
EMPLOYEE;
-- NVL2(컬럼명, 결과값1, 결과값2) -- 향상된 널처리함수!
-- 해당 컬럼에 값이 존재할 경우 결과값 1을 반환
-- 해당 컬럼에 값이 NULL일 경우 결과값 2를 반환
-- 사원명, 부서코드, 부서코드가 존재하는 경우 '부서배치완료' NULL일 경우 '부서없음'으로 조회
SELECT
EMP_NAME,
DEPT_CODE,
NVL2(DEPT_CODE, '부서배치완료', '부서 없음')
FROM
EMPLOYEE;
-- NULLIF(비교대상 1, 비교대상 2)
-- 두 개의 값이 동일할 경우 NULL을 반환
-- 두 개의 값이 동일하지 않을 경우 비교대상1을 반환
SELECT
NULLIF('1', '1')
FROM
DUAL;
SELECT
NULLIF('1', '2')
FROM
DUAL;
--------------------------------------------------------------------------------
/*
< 선택함수 >
DECODE(비교대상(컬럼명/산술연산/함수식), 조건값1, 결과값1, 조건값2, 결과값2, 조건값3, 결과값3, ...., 결과값 );
- 자바에서의 Switch문과 유사
switch(비교대상) {
case 조건값1: 결과값1;
case 조건값2: 결과값2;
...
default: 결과값;
}
*/
-- 사원명, 성별(남/여)
SELECT
EMP_NAME,
DECODE(SUBSTR(EMP_NO, 8, 1),
1, '남',
2, '여',
'성별 선택 안함' ) AS "성별"
FROM
EMPLOYEE;
-- 직원들의 급여를 인상시켜서 조회
-- 직급코드가 'J7'인 사원들의 급여를 10% 인상해서 조회
-- 직급코드가 'J6'인 사원들의 급여를 15% 인상해서 조회
-- 직급코드가 'J5'인 사원들의 급여를 20% 인상해서 조회
-- 그 외의 직급코드인 사원들의 급여는 5% 인상해서 조회
SELECT
EMP_NAME,
SALARY,
JOB_CODE,
DECODE(JOB_CODE,
'J7', (SALARY + SALARY * 0.1),
'J6', (SALARY + SALARY * 0.15),
'J5', (SALARY + SALARY * 0.2),
(SALARY + SALARY * 0.05)) "인상 후 급여"
FROM
EMPLOYEE;
--------------------------------------------------------------------------------
/*
CASE WHEN THEN 구문
- DECODE 선택함수와 비교했을 때 DECODE는 해당 조건검사 시 동등비교만을 수행
CASE WHEN THEN구문으로 특정 조건 제시 시 내맘대로 조건식 기술 가능
-> 자바에서의 IF-ELSE IF문 같은 느낌
[ 표현법 ]
CASE
WHEN 조건식1 THEN 1
WHEN 조건식2 THEN 2
...
ELSE 결과값
END
*/
/*
참고 -- DECODE
SELECT
EMP_NAME,
DECODE(SUBSTR(EMP_NO, 8, 1),
1, '남',
2, '여',
'성별 선택 안함' ) AS "성별"
FROM
EMPLOYEE;
*/
SELECT
EMP_NAME,
CASE
WHEN SUBSTR(EMP_NO, 8, 1) = '1' THEN '남'
WHEN SUBSTR(EMP_NO, 8, 1) = '2' THEN '여'
ELSE '성별선택안함'
END
FROM
EMPLOYEE;
--------------------------------------------------------------------------------
--------------------------------- < 그룹 함수 > ---------------------------------
-- 1. SUM(숫자타입): 해당 컬럼값들의 총 합계를 반환해주는 함수
-- 전체 사원들의 총 급여 합계
SELECT
SALARY
FROM
EMPLOYEE;
SELECT
SUM (SALARY)
FROM
EMPLOYEE;
-- 부서코드가 'D5'인 사원들의 총 급여 합계는?
SELECT
SUM (SALARY)
FROM
EMPLOYEE;
WHERE
DEPT_CODE = 'D5';
--------------------------------------------------------------------------------
-- 2. AVG(숫자타입): 해당 컬럼값들의 평균값을 구해서 반환
-- 전체 사원들의 급여
SELECT
ROUND(AVG(SALARY))
FROM
EMPLOYEE;
-- 3.MIN(ANY 타입): 해당 컬럼값들 중 가장 작은 값 반환
SELECT
MIN(SALARY) "가장 작은 급여값",
MIN(EMP_NAME) "가장 이름이 빠른사람",
MIN(HIRE_DATE) "가장 빠른 입사일"
FROM
EMPLOYEE;
-- 4. MAX(ANY 타입): 해당 컬럼값들 중 가장 큰 값 반환
SELECT
MAX(SALARY) "가장 높은 급여",
MAX(EMP_NAME) "가장 느린 이름",
MIN(HIRE_DATE) "가장 늦은 입사일"
FROM
EMPLOYEE;
-- 5. COUNT(*/컬럼명/DUSTUNCT 컬럼명): 행 개수를 세서 반환
-- COUNT(*): 조회 결과에 해당하는 모든 행 개수를 다 세서 반환
-- COUNT(컬럼명): 제시한 해당 컬럼값이 NULL이 아닌 행만 개수를 세서 반환
-- COUNT(DISTINCT 컬럼명): 제시한 해당 컬럼값에 중복값이 존재할 경우 하나로만 세서 반환
-- 전체 사원수가 몇 명인지 조회
SELECT
COUNT(*)
FROM
EMPLOYEE;
SELECT * FROM EMPLOYEE;
-- 사수가 존재하는 사원의 수 (NULL이 아닌 행만 세서 알려줌)
SELECT
COUNT(MANAGER_ID)
FROM
EMPLOYEE;
SELECT
COUNT(*)
FROM
EMPLOYEE
WHERE
MANAGER_ID IS NOT NULL;
-- 현재 사원들이 속해있는 부서 개수
SELECT COUNT(DISTINCT DEPT_CODE)
FROM EMPLOYEE;
'oracle' 카테고리의 다른 글
| Oracle_DDL_CREATE / ALTER / DROP (1) | 2024.10.27 |
|---|---|
| Orcale_DML_INSERT / UPDATE / DELETE (0) | 2024.10.27 |
| Orcale_DDL_CREATE / ALTER/ DROP (5) | 2024.10.23 |
| Oracle_DML_SUB QUERY 서브쿼리 (3) | 2024.10.21 |
| Oracle_DML_SELECT문 (0) | 2024.10.20 |