2020년 10월 30일

업데이트:


함수(Function)

하나의 큰 프로그램에서 반복적으로 사용되는 부분들을 분리하여 작성해 놓은 작은 서브 프로그램이다. 호출하면서 값을 전달하면 결과를 리턴하는 방식으로 사용된다.


함수는 단일 행 함수그룹 함수로 나뉜다.

  • 단일 행 함수 각 행마다 반복적으로 적용되어 입력 받은 행의 개수만큼 결과를 반환한다.
  • 그룹 함수 특정 행들의 집합으로 그룹이 형성되어 적용된다. 그룹 당 1개의 결과를 반환한다.

단일 행 함수와 그룹 함수는 같이 사용할 수 없다.
함수를 사용할 수 있는 위치는 SELECT, WHERE, ORDER BY절과 GROUP BY, HAVING 절이다.

문자열 처리 함수

LENGTH / LENGTHB

LENGTH : 주어진 컬럼 값/문자열의 길이(문자 개수)를 반환한다. LENGTHB : 주어진 컬럼 값/문자열의 길이(BYTE)를 반환한다.

SELECT EMP_NAME, EMAIL, ENGTH(EMAIL) FROM EMPLOYEE;
SELECT LENGTH('오라클') FROM DUAL;
-- DUAL(DUMMY TABLE) : 가상 테이블

SELECT LENGTH('ORACLE'), LENGTHB('ORACLE123') FROM DUAL;
-- 영어, 숫자 1바이트

SELECT LENGTHB('오라클') FROM DUAL;
-- 한글 3 바이트

-- ORACAL EXPRESS EDITION (XE 버전) : 교육용 무료 버전
-- 영어, 숫자 1바이트
-- 한글, 다른 나라의 외국어, 특수문자 등 아스키코드 이외의 문자 : 3바이트
 ---> 컬럼의 데이터 타입을 NVARCHAR2를 사용 (N : 유니코드)



INSTR

지정한 위치부터 지정한 숫자 번째로 나타나는 문자의 시작 위치를 반환한다.

 --  [작성법]
 -- INSTR('문자열', | 컬럼명, '문자' [, 검색 시작 인덱스 [, 순번] ] )

-- 첫 번째 문자(1)부터 검색하여 'B'가 처음 나오는 위치 조회
SELECT INSTR('AABAACBBAA', 'B') FROM DUAL;
--> 오라클은 인덱스가 1부터 시작


-- 첫 번째 문자(1)부터 검색하여 'B'가 처음 나오는 위치 조회
SELECT INSTR('AABAACBBAA', 'B', 1, 1) FROM DUAL;


-- 첫 번째 문자(1)부터 검색하여 'B'가 두 번째로 나오는 위치 조회
SELECT INSTR('AABAACBBAA', 'B', 1, 2) FROM DUAL;

-- 마지막 문자부터 검색하여 'B'가 처음 나오는 위치 조회
SELECT INSTR('AABAACBBAA', 'B', -1, 1) FROM DUAL;


-- EMPLOYEE 테이블에서 사원명, 이메일, 이메일에서 '@' 위치
SELECT EMP_NAME, EMAIL, INSTR(EMAIL, '@', 1, 1) FROM EMPLOYEE;



TRIM

주어진 컬럼, 문자열의 앞, 뒤, 양쪽에 있는 지정한 STR에 포함된 모든 문자를 제거한 나머지를 반환한다.

-- 지정한 문자가 없는 경우 공백을 제거함

-- 양쪽 제거(BOTH, 기본값)
SELECT TRIM('     KH     ')FROM DUAL;
SELECT  TRIM('-' FROM '-----KH-----') FROM DUAL;
SELECT  TRIM(BOTH '-' FROM '-----KH-----') FROM DUAL;
-- BOTH는 디폴트 값이라 생략 가능함


-- 왼쪽 제거(LEADING;리딩, LTRIM;엘트림)
SELECT  TRIM(LEADING '-' FROM '-----KH-----') FROM DUAL;
SELECT LTRIM('-----KH-----', '-') FROM DUAL;

-- 오른쪽 제거(TRAILING;트레일링, RTRIM)
SELECT  TRIM(TRAILING '-' FROM '-----KH-----') FROM DUAL;
SELECT RTRIM('-----KH-----', '-') FROM DUAL;



SUBSTR

컬럼이나 문자열에서 지정한 위치부터 지정한 개수의 문자열을 잘라내어 반환한다.

-- [작성법]
-- SUBSTR(컬럼명 | '문자열', POSITION [, LENGTH] )
-- POSITION : 잘라내기 시작할 위치
-- LENGTH : 잘라낼 길이

SELECT SUBSTR('SHOWMETHEMONEY', 5, 2) FROM DUAL;

-- 7번부터 끝까지 잘라내어 반환
SELECT SUBSTR('SHOWMETHEMONEY', 7) FROM DUAL;

SELECT SUBSTR('SHOWMETHEMONEY', 1, 6) FROM DUAL;

-- 끝에서부터 8번째부터 잘라내기 시작해서 3글자 자르기
SELECT SUBSTR('SHOWMETHEMONEY', -8, 3) FROM DUAL;


-- EMPLOYEE 테이블에서 사원명,이메일 아이디 조회
SELECT EMP_NAME, EMAIL, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@') -1) FROM EMPLOYEE;


--EMPLOYEE 테이블에서 사원명, 주민등록번호, 주민등록번호 중 성별 부분 조회
SELECT EMP_NAME, EMP_NO, SUBSTR(EMP_NO, INSTR(EMP_NO, '-') +1, 1) "성별 부분"
FROM EMPLOYEE;


-- EMPLOYEE 테이블에서 성별이 남성인 사원의 사원명, 주민등록번호, 주민등록번호 중 성별 부분 조회
SELECT EMP_NAME, EMP_NO, SUBSTR(EMP_NO,8, 1) "성별 부분"
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO,8, 1)  = 1 ;

-- EMPLOYEE 테이블에서 사원명, 태어난 년, 월, 일을 조회
SELECT EMP_NAME"사원명", SUBSTR(EMP_NO,1,2) || '년' AS"년", SUBSTR(EMP_NO, 3, 2)  || '월' AS "월", SUBSTR(EMP_NO,5,2)   || '일' AS  "일" 
FROM EMPLOYEE;



LPAD/RPAD

주어진 컬럼, 문자열에 임의의 문자열을 왼쪽/오른쪽에 덧붙여 길이 N의 문자열을 반환한다.

-- [작성법]
-- LPAD | RPAD (컬럼명 | '문자열', 반환할 문자열의 길이(N), [, 공백에 덧붙일 문자] )

-- 20칸을 할당하고 데이터를 오른쪽 정렬 후 왼쪽 공백에 빈칸을 덧붙임
SELECT LPAD(EMAIL, 20) FROM EMPLOYEE;

-- 20칸을 할당하고 데이터를 오른쪽 정렬 후 왼쪽 공백에 '#'을 덧붙임
SELECT LPAD(EMAIL, 20, '#') FROM EMPLOYEE;

-- 20칸을 할당하고 데이터를 왼쪽 정렬 후 오른쪽 공백에 '#'을 덧붙임
SELECT RPAD(EMAIL, 20, '#') FROM EMPLOYEE;


--EMPLOYEE 테이블에서 사원명, 주민등록번호 조회
-- 단, 주민등록번호 뒷자리는 성별 보이고 나머지는 '*'로 처리
SELECT EMP_NAME, RPAD(SUBSTR(EMP_NO, 1, 8), 14, '*') FROM EMPLOYEE;



REPLACE

컬럼의 문자 혹은 문자열에서 특정 문자(열)을 지정한 문자(열)로 바꾼 후 반환한다.

-- [작성법]
-- REPLACE(컬럼명| '문자열', 변경하려는 문자열, 변경하고자 하는 문자열)
SELECT REPLACE('서울시 강남구 역삼동', '역삼동', '삼성동')
FROM DUAL;


-- EMPLOYEE 테이블에서 사원들의 이메일 주소를 'kh.or.kr'에서 'gmail.com'으로 변경하여 
-- 사원명, 기존 이메일, 바뀐 이메일 조회
SELECT EMP_NAME "사원명", EMAIL "기존 이메일", REPLACE(EMAIL, 'kh.or.kr', 'gmail.com')"바뀐 이메일"
FROM EMPLOYEE;



숫자 처리 함수

MOD

인자로 전달 받은 숫자를 나누어 나머지를 반환한다.

SELECT MOD(10, 3) FROM DUAL;
SELECT MOD(-10, 3) FROM DUAL;
SELECT MOD(10.9, 3) FROM DUAL;



ROUND

인자로 전달 받은 숫자 혹은 컬럼에서 지정한 위치부터 반올림하여 값을 반환한다.

-- [작성법]
-- ROUND(컬럼명 | 숫자 [, 반올림 위치] )

SELECT ROUND(123.456) FROM DUAL;
-- --> ROUND의 기본값은 소수 첫 번째 자리에서 반올림하여 정수를 반환함

SELECT ROUND(123.456, 1) FROM DUAL; --123.5

SELECT ROUND(123.456, 0) FROM DUAL; --123

SELECT ROUND(123.456, 2) FROM DUAL; --123.46

SELECT ROUND(123.456, -2) FROM DUAL; -- 100



CEIL

인자로 전달 받은 숫자 혹은 컬럼을 올림 후 반환한다.

SELECT CEIL(123.1) FROM DUAL;
SELECT CEIL(123.456) FROM DUAL;
SELECT CEIL(123.456 * 10) / 10 FROM DUAL;



FLOOR

인자로 전달 받은 숫자 혹은 컬럼에서 소수점 자리의 수를 내림 후 반환한다.

SELECT FLOOR(123.1) FROM DUAL; --123
SELECT FLOOR(123.456) FROM DUAL; --123
SELECT FLOOR(123.456 * 10) / 10 FROM DUAL; --123.4

SELECT CEIL(-10.9), FLOOR(-10.9) FROM DUAL;



TRUNC

인자로 전달 받은 숫자 혹은 컬럼에서 소수점 자리의 수를 내림 후 반환한다.

SELECT TRUNC(123.456) FROM DUAL;
--> 소수점 모두 버림

SELECT TRUNC(123.456, 1) FROM DUAL;
SELECT TRUNC(123.456, 2) FROM DUAL;
SELECT CEIL(-10.9), FLOOR(-10.9) , TRUNC(-10.9) FROM DUAL;

날짜 처리 함수

SYSDATE

시스템에 저장되어 있는 현재 날짜를 반환한다.

SELECT SYSDATE FROM DUAL;



MONTHS_BETWEEN

인자로 날짜 두 개를 전달 받아 개월 수 차이를 숫자 데이터형으로 변환한다.

-- EMPLOYEE 테이블에서 사원명, 입사일, 근무 개월 수 조회
SELECT EMP_NAME, HIRE_DATE, FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) "근무 개월 수"
FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 사원명, 입사일, 연차 조회
SELECT EMP_NAME, HIRE_DATE, CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)/12) "연차"
FROM EMPLOYEE;



ADD_MONTHS

인자로 전달받은 날짜에 인자로 받은 숫자만큼 개월 수를 더하여 특정 날짜를 반환한다.

SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL;

-- EMPLOYSS 테이블에서
-- 사원의 이름, 입사일, 입사일로부터 6개월이 지난 날짜 조회
SELECT EMP_NAME, HIRE_DATE, ADD_MONTHS(HIRE_DATE, 6) FROM EMPLOYEE;



LAST_DAY

인자로 전달받은 날짜가 속한 달의 마지막 날짜를 반환한다.

SELECT LAST_DAY('20/09/01') FROM DUAL;



EXTRACT

년, 월, 일 정보를 추출하여 반환한다.

-- EXTRACT(YEAR FROM 날짜) : 연도 추출
-- EXTRACT(MONTH FROM 날짜) : 월 추출
-- EXTRACT(DAY FROM 날짜) : 일 추출

-- EMPLOYEE 테이블에서 사원명 , 입사일, 년, 월, 일 조회
SELECT EMP_NAME, EXTRACT(YEAR FROM HIRE_DATE)"년",
EXTRACT(MONTH FROM HIRE_DATE) "월",
EXTRACT(DAY FROM HIRE_DATE) "일"
FROM EMPLOYEE;



형 변환 함수

TO_CHAR

년, 월, 일 정보를 추출하여 반환한다.

-- TO_CHAR(날짜 | 숫자 [, 포맷])
-- 날짜 또는 숫자형 데이터를 문자형으로 바꾸는 함수
-- 포맷 지정 시 포맷에 맞는 형태의 데이터로 변경하여 반환

-- [숫자]
SELECT TO_CHAR(1234) FROM DUAL; --1234

-- 5칸 오른쪽 정렬, 빈칸 공백
SELECT TO_CHAR(1234, '99999') FROM DUAL;

-- 5칸 오른쪽 정렬, 빈칸 0
SELECT TO_CHAR(1234, '00000') FROM DUAL;

-- 9, 0 둘 다 숫자를 채우겠다는 의미
  -- 9는 빈칸 / 0은 빈칸에 0 채움
  
-- 현재 설정된 나라의 화폐단위 + 세자리 수마다 , 붙이기
SELECT TO_CHAR(10000, 'L99,999') FROM DUAL;

-- 다른 나라의 화폐단위 + 세자리 수마다 , 붙이기
SELECT TO_CHAR(10000, '$99,999') FROM DUAL;


SELECT TO_CHAR(10000, '$99,999') FROM DUAL;
--> 설정한 포맷의 범위를 넘어서면 값이 모두 #으로 조회된다.

-- EMPLOYEE 테이블에서 모든 사원의 사원명, 급여, 연봉을 조회
-- 단, 급여, 연봉은 세자리마다 ','로 구분 +  ₩ 화폐기호 추가
SELECT EMP_NAME,
TRIM(TO_CHAR(SALARY, 'L999,999,999')) 급여,
TRIM(TO_CHAR(SALARY * 12, 'L999,999,999')) 연봉
FROM EMPLOYEE;
-- TRIM 이용해서 공백 삭제

-- [날짜]
/*
PM HH : AM / PM
HH24 : 24시간 표기법
MI : 분
SS : 초
YYYY : 2020년, YY : 20년
MM : 월
DAY : 금요일, DY   : 금,   D : 6 (일요일 1 ~ 토요일 7)
Q : 분기
*/

SELECT TO_CHAR(SYSDATE, 'PM HH:MI:SS')  FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS')  FROM DUAL;

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD D Q') FROM DUAL;


-- EMPOLYEE 테이블에서 
-- 모든 사원의 이름, 고용일 조회 
-- 단, 고용일은 '2020-10-30 금' 형식으로 조회

SELECT TO_CHAR(HIRE_DATE, 'YYYY-MM-DD DY') FROM EMPLOYEE;



-- EMPOLYEE 테이블에서 
-- 모든 사원의 이름, 고용일 조회 
-- 단, 고용일은 '2020년 10월 30일 금요일' 형식으로 조회

SELECT EMP_NAME, 
TO_CHAR(HIRE_DATE, 'YYYY"년" MM"월" DD"일" DAY') FROM EMPLOYEE;
-- 지정되지 않은 패턴을 사용하고 싶은 경우 ""(쌍따옴표)로 감싸서 작성한다.



TO_NUMBER

날짜 혹은 문자형 데이터를 숫자형 데이터로 변환하여 반환한다.

TO_NUMBER(문자, [, 포맷]) : 문자형 데이터를 숫자형 데이터로 형변환
-- 명시적으로 문자 -> 숫자 변환
SELECT TO_NUMBER('100') + TO_NUMBER('200') FROM DUAL;

-- 묵시적 변환
SELECT '100' + '200' FROM DUAL;

--> 오라클에의해 문자형 데이터지만, 숫자 또는 날짜의 형태를 띄고 있다면
-- 자동으로 형태를 변환시켜줌
SELECT TO_NUMBER('1,000,000', '9,999,999') FROM DUAL;



TO_DATE

숫자 혹은 문자형 데이터를 날짜형 데이터로 변환하여 반환한다.

-- TO_DATE(문자 | 숫자 [, 포맷])

SELECT TO_DATE('20210101', 'YYYYMMDD') FROM DUAL;

SELECT TO_DATE(20210101, 'YYYYMMDD') FROM DUAL;

SELECT TO_DATE('900116', 'YYMMDD') FROM DUAL; -- 90/01/16

SELECT TO_CHAR(TO_DATE('900116', 'YYMMDD'), 'YYYY-MM-DD') FROM DUAL; - 1990-01-16

SELECT TO_CHAR(TO_DATE('900116', 'RRMMDD'), 'YYYY-MM-DD') FROM DUAL; - 1990-01-16

/* TO_DATE를 이용한 변환 시 YY, RR의 차이점
-- YY : 현재 세기를 적용 (21C == 20XX 년대)
-- RR : 읽어들인 값이 50년 이상이면 이전 세기(20C == 19XX년대)
--                                   50년 미만이면 현재 세기(21C == 20XX년대) 적용
*/

-- EMPLOYEE 테이블에서 2000년도 이후에 입사한 사원의 사번, 이름, 입사일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE 
FROM EMPLOYEE
-- WHERE HIRE_DATE >= '00/01/01'; -> 묵시적
WHERE HIRE_DATE >= TO_DATE('20000101', 'YYYYMMDD');  --명시적



NULL 처리 함수

NVL

NULL로 되어 있는 컬럼의 값을 인자로 지정한 숫자 혹은 문자로 변경하여 변환한다.

 -- NVL (컬럼명, NULL인 경우 대체값)
  --> 해당 컬럼 값이 NULL인 경우 대체값을 사용
  
 -- EMPLOYEE 테이블에서 BONUS가 NULL인 사원의 컬럼값을 0으로 변환하여
 -- 사원명, 급여, BONUS 조회
 
SELECT EMP_NAME, SALARY, NVL(BONUS, 0) AS BONUS
FROM EMPLOYEE;
 
 -- EMPLOYEE 테이블에서 부서 코드가 NULL인 사원의 사번, 이름, 부서코드 조회
 -- NULL인 부서코드 "부서 없음" 변환
 SELECT EMP_ID, EMP_NAME, NVL(DEPT_CODE,  '부서 없음')
 FROM EMPLOYEE
 WHERE DEPT_CODE IS NULL;



NVL2

-- NVL(컬럼명, NULL 아닌 경우 대체값, NULL인 경우 대체값)
-- EMPLOYEE 테이블에서 기존에 보너스를 받지 못하던 사원은 보너스율을 0.3
-- 받던 사원은 0.8로 변경하여
-- 사원명, 기존 보너스, 변경된 보너스 조회
 
SELECT EMP_NAME, BONUS, NVL2(BONUS, 0.8, 0.3)
FROM EMPLOYEE;
 
-- EMPLOYEE 테이블에서 재직중인 사람은 '재직중'
-- 퇴사한 사람은 '퇴사(퇴사일)'로 변경하여
-- 사번, 사원명, 재직여부
 
SELECT EMP_ID, EMP_NAME, NVL2(ENT_DATE , '퇴사(' ||ENT_DATE||')' , '재직중' )  "재직여부"
FROM EMPLOYEE
ORDER BY 재직여부 DESC;



선택 함수

DECODE

비교하고자 하는 값 또는 컬럼이 조건식과 같으면 결과 값을 반환한다.

-- DECODE (컬럼명 | 계산식, 결과1, 선택1, 결과2, 선택2, 결과3, 선택3 ..... 나머지)
-- (JAVA SWITCH와 비슷)
-- EMPLOYEE 테이블에서 
-- 사번, 이름, 주민등록번호, 성별(남/여) 조회

SELECT EMP_ID, EMP_NAME, EMP_NO,
DECODE(SUBSTR(EMP_NO, 8, 1),  '1', '남', '2', '여') AS 성별
FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 직원의 급여를 인상하고자 한다.
-- 직급 코드가 'J7'인 직원은 10% 인상
-- 'J6'인 직원은 15% 인상
-- 'J5'인 직원은 20% 인상
-- 그 외 직급은 5% 인상
-- 사원명, 직급코드, 기존 급여, 인상 급여를
-- 직급 코드 오름차순으로 정렬하여 조회

SELECT EMP_NAME, JOB_CODE, SALARY, 
DECODE(JOB_CODE, 'J7', SALARY * 1.1, 
      'J6', SALARY * 1.15, 
      'J5', SALARY * 1.2, 
      SALARY * 1.05)  "인상 급여"
      FROM EMPLOYEE
      ORDER BY JOB_CODE;



CASE

비교하고자 하는 값 또는 컬럼이 조건식과 같으면 결과 값을 반환한다.(조건은 범위 값이 가능하다.)

/* [작성법]
CASE WHEN 조건식1 THEN 결과1
            WHEN 조건식2 THEN 결과2
            WHEN 조건식3 THEN 결과3
            ...
            ELSE 나머지 결과
    END
*/

-- EMPLOYEE 테이블에서 직원의 급여를 인상하고자 한다.
-- 직급 코드가 'J7'인 직원은 10% 인상
-- 'J6'인 직원은 15% 인상
-- 'J5'인 직원은 20% 인상
-- 그 외 직급은 5% 인상
-- 사원명, 직급코드, 기존 급여, 인상 급여를
-- 직급 코드 오름차순으로 정렬하여 조회

SELECT EMP_NAME, JOB_CODE, SALARY,
CASE WHEN JOB_CODE = 'J7' THEN SALARY * 1.1
            WHEN JOB_CODE='J6' THEN SALARY * 1.15
             WHEN JOB_CODE='J5' THEN SALARY * 1.2
             ELSE SALARY * 1.05
END "인상 급여"
FROM EMPLOYEE
ORDER BY 2;

-- EMPLOYEE 테이블에서 사번, 이름, 급여, 개발자 등급 조회
-- 개발자 등급 기준
-- 급여 500만 이상 : '고급'
-- 500만 미만, 300만 이상 : '중급'
-- 300만 미만 : '초급'

SELECT EMP_ID, EMP_NAME, SALARY,
    CASE WHEN SALARY >= 5000000 THEN '고급', 
         --  WHEN SALARY < 5000000 AND SALARY >= 3000000 THEN '중급'
                WHEN SALARY >= 3000000 THEN '중급' 
                ELSE '초급'
                END "개발자 등급"
        FROM EMPLOYEE;



그룹 함수

하나 이상의 행을 그룹으로 묶어 연산하며 총합, 평균 등을 하나의 컬럼으로 반환하는 함수이다.


SUM

해당 컬럼 값들의 총합을 반환한다.

-- EMPLOYEE 테이블에서 모든 사원의 급여 총합 조히
SELECT SUM(SALARY) FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 여자 사원의 급여 총합 조회
SELECT SUM(SALARY) FROM EMPLOYEE WHERE SUBSTR(EMP_NO, 8, 1) = 2;


-- EMPLOYEE 테이블에서 부서코드가 'D5'인 직원의 보너스 포함 연봉 총합 조회
SELECT SUM (SALARY * (1+ NVL(BONUS, 0) *12))
FROM EMPLOYEE
WHERE DEPT_CODE= 'D5';



AVG

해당 컬럼 값들의 평균을 반환한다.

-- EMPLOYEE 테이블 모든 사원의 급여 합, 급여 평균 조회
SELECT SUM(SALARY), FLOOR(AVG(SALARY)) FROM EMPLOYEE;



MIN / MAX

그룹의 최대값과 최소값 반환.

-- EMPLOYEE 테이블에서 이름 순서가 가장 빠른 사람과 마지막 사람 조회
SELECT MIN(EMP_NAME), MAX(EMP_NAME) FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 이메일 순서가 가장 빠른 사람과 마지막 사람 조회
SELECT MIN(EMAIL), MAX(EMAIL) FROM EMPLOYEE;


-- EMPLOYEE 테이블에서 급여가 가장 적은 사람 / 높은 사람 조회
SELECT MIN(SALARY), MAX(SALARY) FROM EMPLOYEE;


-- EMPLOYEE 테이블에서 입사일이 가장 빠른 사람과 마지막 입사한 사람 조회
SELECT MIN(HIRE_DATE), MAX(HIRE_DATE) FROM EMPLOYEE;


-- EMPLOYEE 테이블에서 전체 급여 합, 전체 급여 평균, 가장 많이 받는 사람의 급여, 가장 적게 받는 사람의 급여 조회
SELECT SUM(SALARY)  , FLOOR(AVG(SALARY)), MAX(SALARY), MIN(SALARY)
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5';



COUNT

테이블 조건을 만족하는 행의 개수를 반환한다.

-- COUNT(* | [DISTINCT] 컬럼명) : 조회되는 행의 개수를 헤아려서 반환
-- COUNT(*) : NULL을 포함한 모든 행의 개수를 반환
-- COUNT(컬럼명) : 해당 컬럼의 컬럼 값 중 NULL을 제외한 개수를 반환함
-- COUNT(DISTINCT 컬럼명) : 중복된 행 제거 + NULL을 제외한 행의 개수를 반환


-- EMPLOYEE 테이블에서 모든 사원의 수, 부서코드가 있는 사원의 수
-- 사원이 속해있는 부서의 수
SELECT COUNT(*), COUNT(DEPT_CODE), COUNT(DISTINCT DEPT_CODE) FROM EMPLOYEE;


-- EMPLOYEE 테이블에서 급여가 300만원 이상인 사원의 수
SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY >= 3000000;

태그:

카테고리:

업데이트:

댓글남기기