728x90
함수
작성자 기준
- ANSI 표준 함수
- 특정 DBMS 벤더 전용 함수: MYSQL 전용, ORACLE 전용
- 사용자 정의 함수
- PL/SQL
- Stored Function, Stored Procedure
수행결과 반환 기준
- 단일행 함수
- 하나의 레코드에 대해서 하나의 결과를 반환하는 함수
- length(), trim()
- 그룹(복수행 함수)
- 여러개의 레코드에 대해서 연산 후 하나의 결과를 반환하는 함수
- count(*), max()
문자 관련 함수
- length()
- 문자길이 반환
- 영문, 숫자는 한자리는 1byte
- 한글 한자리는 2byte, 3byte 반환: db설정에 따라 다름
- 테이블 설계 시에 한글데이터 컬럼의 경우는 길이 * db설정byte길이
-- 문자 관련 함수
select length('abc12'), length('홍길동') from dual;
- trim(), ltrim(), rtrim(): 공백 제거
- 문자열 타입
- char(고정길이)
- varchar(가변길이)
insert into table_name(data1, data2) values(’abc’, ‘abc’);
- data1 char(10) ⇒ ‘abc ‘ 이렇게 들어감(뒤에 공백 7칸)
- data2 varchar(10) ⇒ ‘abc’ 이렇게 들어감
→ 이럴때 공백제거 해서 써야됨!
- insert()
- ‘hello ssafy !!!’ 문자열에서 ‘ssafy’를 ‘hello’로 변경
- replace()
- instr()
- substring()
- mid()
- lower()
- upper()
- concat()
실습1 : ‘helloabc!!!’에서 abc를 ssafy로 변경
- insert(’문자열’, 시작위치, 길이)
- db 문자열 index 시작: 1번부터 시작!!!
실습2: ‘helloabc!!!’에서 hello를 welcome으로 변경
- replace(’문자열’, ‘검색어’, ‘변경어’)
실습3: ‘hello ssafy !!!’ 에서 ‘ssafy’문자만 추출하기
- substring(’문자열’, 시작위치, 길이), mid(’문자열’, 시작위치, 길이)
- instr(’문자열, ‘검색어’): 위치반환, length(’문자열’): 길이반환
select substring('hello ssafy !!!', instr('hello ssafy !!!', 'ssafy'), length('ssafy')) "결과";
실습4: ‘hello ssafy !!!’ 모두 대문자 변경
- upper(’문자열’)
실습5: ‘hello ssafy !!!’ 에서 ssafy 위치 인덱스 조회
- instr(’문자열’, ‘검색어’)
숫자 관련 함수
- 12345.456
- abs(숫자): 절대값
- truncate(숫자, [자릿수]): 버림
- 자릿수가 2면 소수점 2자리 이후로는 버림(12345.456 → 12345.45)
- 자릿수가 -2면 (12345.456 → 12300)
- 자릿수가 0이면 (12345.456 → 12345)
- round(숫자, [자릿수]): 반올림
- truncate와 비슷
- ceil(숫자), ceiling(숫자): 올림
- floor(숫자): 내림
날짜 관련 함수
- now(), sysdate(), current_timestamp()
- current_date(), curdate()
- current_time(), curtime()
- select year(now()), month(now());
복수행(그룹함수)
- count(*), count(PK): 전체 레코드 행수 반환
- count(*): null 포함 행수 반환
- count(컬럼명): null을 제외한 행수 반환
-- 복수행(그룹) 함수
-- 전체직원 숫자 조회
select count(*), count(employee_id) from employees;
-- 부서를 배정받은 직원의 숫자 조회
select count(department_id) "부서배정 받은 직원 숫자" from employees;
-- 부서를 배정받지 못한 직원의 숫자 조회
select count(*) "부서배정 받지 못한 직원 숫자" from employees
where department_id is null;
- sum(): 총액
- max(): 최대, 숫자, 날짜
- min(): 최소, 숫자, 날짜
- avg(): 평균
-- 전체직원숫자, 총급여, 평균급여, 최대급여, 최소급여 정보 조회
-- 평균급여는 소수이하 버림 처리
select count(*) 전체직원숫자, sum(salary) 총급여, floor(avg(salary)) 평균급여, max(salary) 최대급여, min(salary) 최소급여
from employees;
-- 가장 오래된 직원의 입사일과, 가장 최근에 입사한 직원 입사일 조회
select min(hire_date) 가장오래된입사일, max(hire_date) 가장최근입사일
from employees;
728x90